Docker App Config Hilfe für InvoiceNinja

OK zusammen,

ich versuche hier, einen weiteren Container zum Laufen zu bringen. Ich möchte InvoiceNinja ausprobieren, um es eventuell in meinem Unternehmen einzusetzen. Der Container und die unterstützenden Anwendungen laufen bereits, aber ich kann nicht darauf zugreifen. Ich habe bereits im InvoiceNinja-Forum um Hilfe gebeten und sie haben mir alles gesagt, was sie wissen… Es funktioniert trotzdem nicht. Sie haben mir vorgeschlagen, hier nachzufragen. Vielleicht können mir einige von euch Compose-Experten helfen herauszufinden, was ich falsch mache…

Hier ist meine Compose-Datei:

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

Und da die App eine .env-Datei verwendet, hier diese Datei mit Schwärzungen:

# 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

Also, es startet, aber wie gesagt – ich kann nicht auf die Webseite zugreifen. Sie lädt einfach nicht. Im InvoiceNinja-Forum hat der User, der mir geholfen hat, Folgendes gesagt:

3. Überprüfe die Nginx-Konfiguration
Du hast ein Volume-Mapping für Nginx: - ./nginx:/etc/nginx/conf.d:ro.

  • Stelle sicher, dass die Konfigurationsdatei in diesem Ordner korrekt auf den app-Service am internen Port zeigt (normalerweise 9000 bei FPM oder 8000 bei der Webserver-Variante).
  • Wenn du das Standard-Invoice Ninja docker-compose-Beispiel verwendest, stelle sicher, dass fastcgi_pass auf app:9000 gesetzt ist.

Also habe ich das Mapping von ./nginx:/etc/nginx/conf.d:ro auf ./share/Container/invoiceninja/nginx:/etc/nginx/conf.d:ro geändert.

Allerdings wird dieser Ordner nicht erstellt und wenn ich in den Nginx-Container reinschaue, sehe ich, dass etc/nginx/conf.d stattdessen auf /share/ZFS530_DATA/.qpkg/container-station/data/application/invoiceninja/share/Container/invoiceninja/nginx gemappt wird.

Warum folgt QNAP nicht meinen Anweisungen und mapped den Container nicht auf den von mir gewünschten Speicherort? Ich weiß nicht, ob das mein Problem löst, aber ich würde mir diese Konfigurationsdatei gerne anschauen und mehr Kontrolle darüber haben.

Sieht sonst noch jemand ein mögliches Problem, das ich hier habe?

Warum hast du für einige Volume-Mounts den relativen und für andere den absoluten Pfad verwendet?

Wie bitte? Ich habe überall /share/Container/invoiceninja verwendet. Wo habe ich das nicht gemacht?

Ist das nicht ein absoluter Pfad?

Und ja, ich sollte mir das Video wirklich anschauen…

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

Einer mit einem „Punkt“, zwei ohne

Und sieh dir das Video an, wie ZFSxx im Pfadnamen für das Volume erscheint – ein einfaches share/xxx ist nur für QTS gültig

Ja. Das habe ich gerade selbst gesehen. Das ist ein Tippfehler…

Der Punkt sollte dort nicht sein.

Ich habe gerade die Anmerkung zum ZFS-Pfadnamen und QuTS oben hinzugefügt.

Also, zuerst hatte die ursprüngliche YAML-Datei den Punkt und ich habe den Pfadnamen ersetzt und es nicht gesehen:

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

Die Verwendung von /share/Container/.... funktioniert in QuTS absolut. Ich benutze das für all meine Container…

Nun habe ich den Ordner /share/Container/nginx, aber dort ist nichts drin…

Hm, ich musste immer ZFSxx_DATA in meine Pfadnamen einfügen, sonst hat es nicht funktioniert.

Aber im obigen Code fehlt jetzt jeglicher Pfadname für die Volumes, ist das richtig?

Anstatt separate Volumes wie beschrieben zu erstellen, habe ich einfach die vollständigen Pfadnamen hinzugefügt.

Aber ja, du kannst immer folgendes machen:

/share/SharedFolderName in QuTS.

Funktioniert für alles…

Und ich weiß nicht, was los ist, denn nach dem letzten Versuch, die App neu zu bauen/neuzustarten, läuft sie jetzt überhaupt nicht mehr.

Grr…

Ich würde versuchen, deine Umgebungsvariablen direkt in die Compose-Datei einzutragen. CS unterstützt eine .env-Datei eigentlich nicht wirklich, und das könnte deine Probleme verursachen.

Bei jedem Docker, der eine .env hatte, habe ich die Details immer direkt in die Compose-Datei geschrieben, und so hat es für mich funktioniert.

Ich habe mich auch darüber gewundert. Es ist irgendwie seltsam, da die .env-Datei vorhanden sein muss, damit die Compose-Datei den „Smell“-Test besteht, aber es scheint, als wäre das, was CS aus dieser Datei liest, bestenfalls inkonsistent…

OK, dann versuche ich, alles in die Compose-Datei einzutragen…