Bantuan Konfigurasi Docker App untuk InvoiceNinja

OK semua,

Saya sedang mencoba menjalankan container lain di sini. Saya ingin mengeksplorasi InvoiceNinja untuk kemungkinan digunakan dalam bisnis saya. Container dan aplikasi pendukungnya sudah berjalan, tapi saya tidak bisa mengaksesnya. Saya sudah minta bantuan di forum InvoiceNinja dan mereka sudah memberi tahu semua yang mereka tahu… Tapi masih belum berhasil. Mereka menyarankan saya bertanya di sini. Jadi mungkin beberapa ahli Compose di sini bisa membantu saya mencari tahu apa yang salah…

Berikut adalah file compose saya:

services:
  app:
    build:
      context: .
    image: invoiceninja/invoiceninja-debian:latest
    restart: unless-stopped
    env_file:
      - /share/Container/invoiceninja/.env
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=America/Chicago
    volumes:
      # - ./php/php.ini:/usr/local/etc/php/conf.d/invoiceninja.ini:ro
      # - ./php/php-fpm.conf:/usr/local/etc/php-fpm.d/invoiceninja.conf:ro
      # - ./supervisor/supervisord.conf:/etc/supervisor/conf.d/supervisord.conf:ro
      - /share/Container/invoiceninja/public:/var/www/html/public
      - /share/Container/invoiceninja/storage:/var/www/html/storage
    depends_on:
      mysql:
        condition: service_healthy
      redis:
        condition: service_healthy

  nginx:
    image: nginx:alpine
    restart: unless-stopped
    ports:
      - "8012:80"
    volumes:
      - ./share/Container/invoiceninja/nginx:/etc/nginx/conf.d:ro
      - /share/Container/invoiceninja/public:/var/www/html/public:ro
      - /share/Container/invoiceninja/storage:/var/www/html/storage:ro
    depends_on:
      app:
        condition: service_healthy

  mysql:
    image: mysql:8
    restart: unless-stopped
    environment:
      MYSQL_DATABASE: ${DB_DATABASE}
      MYSQL_USER: ${DB_USERNAME}
      MYSQL_PASSWORD: ${DB_PASSWORD}
      MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
    volumes:
      - /share/Container/invoiceninja/mysql_data:/var/lib/mysql
    healthcheck:
      test:
        [
          "CMD",
          "mysqladmin",
          "ping",
          "-h",
          "localhost",
          "-u${MYSQL_USER}",
          "-p${MYSQL_PASSWORD}",
        ]

  redis:
    image: redis:alpine
    restart: unless-stopped
    volumes:
      - /share/Container/invoiceninja/redis_data:/data
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]

Dan karena aplikasi ini menggunakan file .env, berikut file tersebut dengan beberapa bagian yang disensor:

# IN application vars
APP_URL=http://192.168.0.3:8012
APP_KEY=base64:7some_key_code
APP_ENV=production
APP_DEBUG=true
REQUIRE_HTTPS=false
PHANTOMJS_PDF_GENERATION=false
PDF_GENERATOR=snappdf
TRUSTED_PROXIES='*'


CACHE_DRIVER=redis
QUEUE_CONNECTION=redis
SESSION_DRIVER=redis

REDIS_HOST=redis
REDIS_PASSWORD=null
REDIS_PORT=6379

FILESYSTEM_DISK=debian_docker

# DB connection
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=ninja
DB_USERNAME=ninja
DB_PASSWORD=*******
DB_ROOT_PASSWORD=********
DB_CONNECTION=mysql

# Create initial user
# Default to these values if empty
IN_USER_EMAIL=admin@example.com
IN_PASSWORD=changeme!
# IN_USER_EMAIL=
# IN_PASSWORD=

# Mail options
MAIL_MAILER=log
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS='user@example.com'
MAIL_FROM_NAME='Self Hosted User'

# MySQL
MYSQL_ROOT_PASSWORD=*****
MYSQL_USER=ninja
MYSQL_PASSWORD=*****
MYSQL_DATABASE=ninja

# GoCardless/Nordigen API key for banking integration
NORDIGEN_SECRET_ID=
NORDIGEN_SECRET_KEY=

IS_DOCKER=true
SCOUT_DRIVER=null
#SNAPPDF_CHROMIUM_PATH=/usr/bin/google-chrome-stable

Jadi kontainernya sudah berjalan tapi seperti yang saya bilang - saya tidak bisa mengakses websitenya. Tidak bisa muncul. Di forum InvoiceNinja, pengguna yang membantu saya mengatakan hal berikut:

3. Periksa Konfigurasi Nginx
Anda memiliki mapping volume untuk Nginx: - ./nginx:/etc/nginx/conf.d:ro.

  • Pastikan file konfigurasi di dalam folder tersebut sudah benar-benar mengarah ke service app pada port internal (biasanya 9000 jika menggunakan FPM, atau 8000 jika menggunakan varian web-server).
  • Jika Anda menggunakan contoh docker-compose standar Invoice Ninja, pastikan fastcgi_pass diatur ke app:9000.

Jadi saya ubah mapping ./nginx:/etc/nginx/conf.d:ro menjadi ./share/Container/invoiceninja/nginx:/etc/nginx/conf.d:ro

Namun, folder itu tidak dibuat dan jika saya masuk dan memeriksa kontainer Nginx, saya melihat bahwa etc/nginx/conf.d malah dimapping ke /share/ZFS530_DATA/.qpkg/container-station/data/application/invoiceninja/share/Container/invoiceninja/nginx

Kenapa QNAP tidak mengikuti instruksi saya dan mapping container ke lokasi storage yang saya minta? Saya tidak tahu apakah itu akan menyelesaikan masalah saya tapi saya ingin melihat file konfigurasi tersebut dan punya kontrol lebih atasnya.

Apakah ada yang melihat kemungkinan masalah lain di sini?

Mengapa Anda menggunakan path relatif dan di lain waktu path absolut untuk beberapa volume mount?

Hah? Saya sudah menggunakan /share/Container/invoiceninja untuk semuanya. Di mana saya tidak melakukannya?

Bukankah itu path absolut?

Dan, ya, saya memang harus menonton video itu…

volumes:
      - ./share/Container/invoiceninja/nginx:/etc/nginx/conf.d:ro
      - /share/Container/invoiceninja/public:/var/www/html/public:ro
      - /share/Container/invoiceninja/storage:/var/www/html/storage:ro

satu dengan “titik” dua tanpa

Oh dan lihat videonya bagaimana ZFSxx ada di jalur volume, share/xxx biasa hanya valid untuk QTS

Ya. Saya baru saja melihatnya sendiri. Itu adalah salah ketik…

Saya tidak bermaksud menaruh titik di sana.

baru saja menambahkan catatan pada jalur ZFS (ZFS pathname) dan QuTS di atas

Jadi pertama, file YAML aslinya memiliki titik dan saya mengganti nama path-nya dan tidak melihatnya:

    volumes:
      - ./nginx:/etc/nginx/conf.d:ro
      - app_public:/var/www/html/public:ro
      - app_storage:/var/www/html/storage:ro

Menggunakan /share/Container/.... benar-benar berfungsi di QuTS. Saya menggunakannya untuk semua container saya…

Sekarang, saya memang memiliki folder /share/Container/nginx tetapi tidak ada apa-apa di dalamnya…

Hah, saya selalu harus memasukkan ZFSxx_DATA dalam nama path saya atau tidak akan berfungsi.

Tapi kode di atas sekarang tidak lagi menyertakan nama path untuk volumenya, benar begitu?

Alih-alih membuat volume terpisah seperti itu, saya hanya menambahkan nama path lengkap saja.

Tapi ya, kamu selalu bisa menggunakan:

/share/SharedFolderName di QuTS.

Bisa digunakan untuk semuanya…

Dan saya tidak tahu apa yang sedang terjadi karena setelah upaya terbaru untuk membangun/memulai ulang aplikasi, sekarang aplikasi sama sekali tidak bisa berjalan.

Grr…

Saya akan mencoba memasukkan variabel lingkungan Anda langsung ke dalam file compose. CS sebenarnya tidak benar-benar mendukung file .env dan itu mungkin yang menyebabkan masalah Anda.

Setiap docker yang menggunakan .env, saya selalu langsung memasukkan detailnya ke dalam compose dan cara itu selalu berhasil untuk saya.

Saya juga bertanya-tanya tentang itu. Agak aneh karena file .env harus ada agar file Compose memenuhi “smell” test, tapi sepertinya apa yang dibaca CS dari file itu tidak konsisten, paling tidak…

Oke, saya akan coba menambahkan semuanya ke file Compose saja…