Dockerアプリ設定のヘルプ:InvoiceNinja

OK みなさん、

ここで別のコンテナを動かそうとしています。自分のビジネスでの利用を検討するためにInvoiceNinjaを試してみたいと思っています。コンテナとそのサポートアプリは起動していますが、アクセスできません。InvoiceNinjaのフォーラムで助けを求めましたが、彼らが知っていることはすべて教えてくれました……それでも動きません。彼らはここで質問するように勧めてくれたので、Composeのウィザードの皆さんが私が何を間違えているのか一緒に考えてくれるかもしれません……

composeファイルは以下の通りです:

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"]

アプリが.envファイルを使うので、内容(伏字あり)も載せておきます:

# 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

起動はしますが、先ほど言った通りウェブサイトにアクセスできません。InvoiceNinjaフォーラムで助けてくれたユーザーは以下のように言っていました:

3. Check the Nginx Config
Nginxのボリュームマッピングがあります: - ./nginx:/etc/nginx/conf.d:ro

  • そのフォルダ内の設定ファイルが、内部ポート(FPMの場合は通常9000、web-serverバリアントの場合は8000)でappサービスを正しく指していることを確認してください。
  • 標準のInvoice Ninja docker-compose例を使っている場合、fastcgi_passがapp:9000に設定されていることを確認してください。

そこで私は ./nginx:/etc/nginx/conf.d:ro を ./share/Container/invoiceninja/nginx:/etc/nginx/conf.d:ro にマッピングし直しました。

しかし、そのフォルダが作成されず、Nginxコンテナを調べてみると etc/nginx/conf.d が /share/ZFS530_DATA/.qpkg/container-station/data/application/invoiceninja/share/Container/invoiceninja/nginx にマッピングされているのがわかりました。

なぜQNAPは私の指示通りにコンテナをストレージの場所にマッピングしてくれないのでしょうか?これが問題の解決になるかはわかりませんが、その設定ファイルを確認してもっとコントロールしたいです。

他に何か問題がありそうな点があれば教えてもらえますか?

なぜ一部のボリュームマウントで相対パスを使用し、他の場合は絶対パスを使用したのですか?

え?すべてに /share/Container/invoiceninja を使いましたよ。どこで使っていなかったんですか?

それって絶対パスじゃないんですか?

それと、はい、その動画は見るべきですね…

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

1つは「ドット」付きで、2つは無し

それと、ビデオでZFSxxがボリュームのパス名に入っているのを見てください。単なるshare/xxxはQTSでのみ有効です。

はい。私も今それを見ました。それはタイプミスです…

ドットを入れるつもりはありませんでした。

上記のZFSパス名とQuTS(QuTS)にメモを追加しました

まず、元のYAMLファイルにはドットがあり、パス名を置き換えたときに気づきませんでした:

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

/share/Container/.... をQuTSで使うのは確実に動作します。私はすべてのコンテナでそれを使っています…

さて、/share/Container/nginx フォルダは確かにありますが、中には何もありません…

えっ、私はいつもパス名にZFSxx_DATAを入れないとうまく動きませんでした。

でも、上記のコードではボリュームのパス名がまったくなくなっていますが、それで正しいのでしょうか?

そのように個別のボリュームを作成する代わりに、私はフルパス名をそのまま追加しました。

でも、もちろんいつでもこうできます:

/share/SharedFolderName(QuTSの場合)

これで全てに対応できます…

最新の再構築/再起動を試した後、今度はまったくアプリが起動しなくなって、何が起こっているのかわかりません。

うーん…

環境変数を直接composeファイルに記述することを試してみてください。CSは.envファイルをあまりサポートしていないので、それが問題を引き起こしている可能性があります。

.envファイルを使っていたどんなDockerでも、私はいつも詳細をcomposeファイルに直接書き込んでいて、それでうまくいきました。

それについて気になっていました。.envファイルはComposeファイルが「匂い」テストを通過するために必要なのに、CSがそのファイルから読み取る内容は正直一貫性がないようですね…。

わかりました、それではすべてをComposeファイルに追加してみます。