Der Schalter blieb wirkungslos: AUTH_ENABLED stand zwar in der .env und im README, fehlte aber im environment-Block des app-Dienstes. Docker Compose liest die .env nur, um Platzhalter wie \ zu ersetzen - in den Container gelangt ausschliesslich, was unter environment: aufgefuehrt ist. Wer die Anmeldung einschalten wollte, blieb deshalb ohne jede Rueckmeldung im Zustand 'ohne Anmeldung' haengen. Gefunden hat das Florian beim Benutzen. Meine Pruefungen liefen alle gegen 'next start' mit direkt gesetzter Umgebungsvariable und konnten die Luecke zwischen .env und Container deshalb gar nicht sehen. - AUTH_ENABLED steht jetzt im environment des app-Dienstes, mit Hinweis im docker-compose.yml, warum das Ergaenzen dort nicht vergessen werden darf. - Neue Pruefung compose-env.mjs: vergleicht die dokumentierten Variablen mit dem aufgeloesten Compose-Setup und mit der Umgebung des laufenden Containers. Genau diese Klasse von Fehler faellt damit kuenftig auf. - README: Hinweis, dass die .env von git pull nicht angefasst wird und die Zeile in aelteren Installationen fehlt, plus ein Befehl zum Nachpruefen. Geprueft gegen den Container in beiden Stellungen: 63 Pruefungen fuer Anmeldung und Rollen sowie 34 fuer Multi-Domain mit AUTH_ENABLED=true, dazu 293 mit false.
47 lines
1.6 KiB
YAML
47 lines
1.6 KiB
YAML
services:
|
|
db:
|
|
image: postgres:18-alpine
|
|
restart: unless-stopped
|
|
environment:
|
|
POSTGRES_USER: ${POSTGRES_USER:-qrcode}
|
|
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?POSTGRES_PASSWORD fehlt — bitte .env aus .env.example anlegen}
|
|
POSTGRES_DB: ${POSTGRES_DB:-qrcode}
|
|
volumes:
|
|
# Ab PostgreSQL 18 liegt das Datenverzeichnis in einem Unterordner mit
|
|
# Versionsnummer — der Mountpunkt ist deshalb /var/lib/postgresql und
|
|
# nicht mehr /var/lib/postgresql/data.
|
|
- db-data:/var/lib/postgresql
|
|
healthcheck:
|
|
# Die App startet erst, wenn die Datenbank wirklich Anfragen annimmt.
|
|
test:
|
|
["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-qrcode} -d ${POSTGRES_DB:-qrcode}"]
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 12
|
|
start_period: 10s
|
|
|
|
app:
|
|
build:
|
|
context: .
|
|
restart: unless-stopped
|
|
depends_on:
|
|
db:
|
|
condition: service_healthy
|
|
environment:
|
|
# Achtung beim Ergänzen: Compose liest die .env nur, um Platzhalter wie
|
|
# ${BASE_URL} zu ersetzen. In den Container gelangt ausschließlich, was
|
|
# hier aufgeführt ist — eine neue Variable in der .env allein bleibt
|
|
# wirkungslos.
|
|
#
|
|
# Öffentliche Adresse der App — landet in jedem dynamischen QR-Code.
|
|
BASE_URL: ${BASE_URL:-http://localhost:3000}
|
|
DATABASE_URL: ${DATABASE_URL}
|
|
# Anmeldung mit Benutzern, Gruppen und Rollen.
|
|
AUTH_ENABLED: ${AUTH_ENABLED:-false}
|
|
ports:
|
|
# Direktes Port-Mapping, bewusst ohne Reverse Proxy.
|
|
- "${APP_PORT:-3000}:3000"
|
|
|
|
volumes:
|
|
db-data:
|