"panic: pgdriver: invalid scheme: lite" Die Anwendung geht direkt in den PostgreSQL-Treiber; DB_DRIVER wird nicht ausgewertet. Die MySQL-DSN (lite:pass@tcp(db:3306)/...) liest der Treiber als URI und findet als Schema den Benutzernamen. Der Fehler war meiner, und die Ursache lehrreich: ich hatte MySQL aus deren docker-compose.test.yml uebernommen, weil die als einzige zeigt, wie der App-Container verdrahtet wird. Sie benutzt aber fivemanage/lite:latest von Docker Hub — und diese Reihe steht bei beta.16 still. Das README sagt postgres://, und es hat recht. Ich habe der aelteren Datei mehr geglaubt als der Doku, weil sie konkreter aussah. Damit faellt auch die Behauptung, MySQL genuege und man koenne den vorhandenen QBox-Server mitbenutzen. Stimmt fuer diese Fassung nicht. Das Volume heisst jetzt pgdata statt db: wer den Stack schon mit MySQL laufen hatte, bekommt eine frische Ablage, statt dass PostgreSQL ueber ein MySQL-Verzeichnis stolpert. Das alte bleibt als Waise liegen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
122 lines
4.4 KiB
YAML
122 lines
4.4 KiB
YAML
# Fivemanage Lite — fuer den Betrieb, ueber Portainer aus diesem Repo.
|
|
#
|
|
# Abgeleitet aus den beiden Compose-Dateien im Projekt (fivemanage/lite) und
|
|
# dem README. Deren docker-compose.yml ist fuer die ENTWICKLUNG: sie startet
|
|
# Datenbank, ClickHouse, MinIO und Jaeger, aber nicht die Anwendung, und mit
|
|
# Standardpasswoertern. Die docker-compose.test.yml zeigt dafuer, wie der
|
|
# App-Container verdrahtet wird — und dass MySQL genuegt.
|
|
#
|
|
# Bewusst NICHT dabei:
|
|
#
|
|
# ClickHouse und Jaeger. Beides ist strukturiertes Logging und Tracing. Fuer
|
|
# das Ablegen von Bildern braucht es sie nicht, und ClickHouse ist eine
|
|
# schwere Abhaengigkeit. Nachruesten geht spaeter.
|
|
#
|
|
# Ein Weg nach aussen. Diese Datei allein ist von aussen NICHT erreichbar —
|
|
# das ist Absicht, denn wie der Reverse Proxy die Dienste findet,
|
|
# unterscheidet sich je Aufbau. Waehle eine Ergaenzung:
|
|
#
|
|
# docker-compose.hostports.yml Proxy erreicht die Dienste ueber den Host
|
|
# (http://host.docker.internal:9000)
|
|
# docker-compose.proxynet.yml Proxy haengt im selben Docker-Netz
|
|
# (http://minio:9000) — der sauberere Weg
|
|
#
|
|
# In Portainer beide Pfade angeben, durch Komma getrennt:
|
|
# docker-compose.yml,docker-compose.hostports.yml
|
|
|
|
services:
|
|
db:
|
|
image: postgres:16-alpine
|
|
restart: unless-stopped
|
|
environment:
|
|
POSTGRES_DB: fivemanage_lite
|
|
POSTGRES_USER: lite
|
|
POSTGRES_PASSWORD: ${DB_PASSWORD:?bitte in .env oder als Stack-Variable setzen}
|
|
volumes:
|
|
- pgdata:/var/lib/postgresql/data
|
|
networks: [internal]
|
|
healthcheck:
|
|
# Ohne das startet die App gegen eine Datenbank, die noch nicht
|
|
# antwortet, und beendet sich — beim ersten Hochfahren jedes Mal.
|
|
test: ["CMD-SHELL", "pg_isready -U lite -d fivemanage_lite"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 12
|
|
|
|
minio:
|
|
image: minio/minio:latest
|
|
restart: unless-stopped
|
|
command: server /data --console-address ":9001"
|
|
environment:
|
|
MINIO_ROOT_USER: lite
|
|
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:?bitte setzen}
|
|
MINIO_SERVER_URL: ${PUBLIC_URL:?bitte setzen}
|
|
volumes:
|
|
- minio:/data
|
|
networks: [internal]
|
|
healthcheck:
|
|
test: ["CMD", "mc", "ready", "local"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 12
|
|
|
|
# Legt den Bucket an und stellt ihn auf oeffentlich lesbar. Laeuft einmal und
|
|
# beendet sich. Ohne diesen Schritt schlaegt der erste Upload fehl, und die
|
|
# Meldung nennt den Grund nicht.
|
|
minio-init:
|
|
image: minio/mc:latest
|
|
depends_on:
|
|
minio:
|
|
condition: service_healthy
|
|
environment:
|
|
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:?bitte setzen}
|
|
entrypoint: >
|
|
/bin/sh -c "
|
|
mc alias set local http://minio:9000 lite $$MINIO_ROOT_PASSWORD &&
|
|
mc mb --ignore-existing local/media &&
|
|
mc anonymous set download local/media &&
|
|
echo 'Bucket media ist bereit'
|
|
"
|
|
networks: [internal]
|
|
restart: "no"
|
|
|
|
lite:
|
|
# ghcr.io, NICHT Docker Hub: dort steht die Reihe bei 0.1.0-beta.16
|
|
# still, auf ghcr.io laeuft sie weiter. Die Test-Compose des Projekts
|
|
# zeigt `fivemanage/lite:latest` — das ist Docker Hub und damit alt.
|
|
image: ghcr.io/fivemanage/lite:0.1.0-beta.23
|
|
restart: unless-stopped
|
|
depends_on:
|
|
db:
|
|
condition: service_healthy
|
|
minio:
|
|
condition: service_healthy
|
|
environment:
|
|
PORT: "8080"
|
|
ENV: production
|
|
# PostgreSQL, und zwar zwingend: beta.23 geht direkt in den
|
|
# pgdriver — DB_DRIVER wird nicht ausgewertet. Eine MySQL-DSN endet in
|
|
# "pgdriver: invalid scheme: lite", weil der Treiber sie als URI liest.
|
|
#
|
|
# Die docker-compose.test.yml des Projekts zeigt MySQL, benutzt dafuer
|
|
# aber fivemanage/lite:latest von Docker Hub — und die Reihe steht dort
|
|
# bei beta.16 still. Das README hat recht, die Testdatei ist alt.
|
|
DSN: postgres://lite:${DB_PASSWORD:?bitte setzen}@db:5432/fivemanage_lite?sslmode=disable
|
|
ADMIN_PASSWORD: ${ADMIN_PASSWORD:?bitte setzen}
|
|
API_TOKEN_HMAC_SECRET: ${API_TOKEN_HMAC_SECRET:?bitte setzen}
|
|
S3_PROVIDER: minio
|
|
AWS_ENDPOINT: http://minio:9000
|
|
AWS_ACCESS_KEY_ID: lite
|
|
AWS_SECRET_ACCESS_KEY: ${MINIO_ROOT_PASSWORD:?bitte setzen}
|
|
AWS_BUCKET: media
|
|
AWS_REGION: auto
|
|
networks: [internal]
|
|
|
|
networks:
|
|
internal:
|
|
driver: bridge
|
|
|
|
volumes:
|
|
pgdata:
|
|
minio:
|