fix: PostgreSQL statt MySQL — beta.23 kennt DB_DRIVER nicht

"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>
This commit is contained in:
2026-08-11 14:43:48 +02:00
co-authored by Claude Opus 5
parent c5b66b466a
commit ca85c4f135
3 changed files with 49 additions and 21 deletions
+26
View File
@@ -135,6 +135,32 @@ PROXY_NETWORK=proxy
--- ---
## PostgreSQL, nicht MySQL
`0.1.0-beta.23` geht direkt in den PostgreSQL-Treiber; `DB_DRIVER` wird nicht
ausgewertet. Eine MySQL-DSN endet deshalb in
```
panic: pgdriver: invalid scheme: lite
```
— der Treiber liest sie als URI und findet als Schema den Benutzernamen.
Die `docker-compose.test.yml` des Projekts zeigt MySQL, benutzt dafür aber
`fivemanage/lite:latest` von Docker Hub, und die Reihe steht dort bei
`beta.16` still. Das README des Projekts hat recht: `postgres://…`.
Das Volume heißt deshalb `pgdata` und nicht `db` — wer den Stack schon mit
MySQL laufen hatte, bekommt so eine frische Ablage, statt dass PostgreSQL über
ein MySQL-Verzeichnis stolpert. Das alte Volume bleibt als Waise liegen und
kann weg:
```bash
docker volume rm fivemanager_db
```
---
## Was hier bewusst fehlt ## Was hier bewusst fehlt
**ClickHouse und Jaeger.** Beide stehen in der Entwicklungs-Compose des **ClickHouse und Jaeger.** Beide stehen in der Entwicklungs-Compose des
+8 -10
View File
@@ -12,16 +12,15 @@
services: services:
db: db:
image: mysql:8 image: postgres:16-alpine
environment: environment:
MYSQL_DATABASE: fivemanage_lite POSTGRES_DB: fivemanage_lite
MYSQL_USER: lite POSTGRES_USER: lite
MYSQL_PASSWORD: ${DB_PASSWORD:?bitte setzen} POSTGRES_PASSWORD: ${DB_PASSWORD:?bitte setzen}
MYSQL_RANDOM_ROOT_PASSWORD: "yes"
volumes: volumes:
- db:/var/lib/mysql - pgdata:/var/lib/postgresql/data
healthcheck: healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] test: ["CMD-SHELL", "pg_isready -U lite -d fivemanage_lite"]
interval: 5s interval: 5s
timeout: 5s timeout: 5s
retries: 20 retries: 20
@@ -75,8 +74,7 @@ services:
environment: environment:
PORT: "8080" PORT: "8080"
ENV: dev ENV: dev
DB_DRIVER: mysql DSN: postgres://lite:${DB_PASSWORD:?bitte setzen}@db:5432/fivemanage_lite?sslmode=disable
DSN: lite:${DB_PASSWORD:?bitte setzen}@tcp(db:3306)/fivemanage_lite
ADMIN_PASSWORD: ${ADMIN_PASSWORD:?bitte setzen} ADMIN_PASSWORD: ${ADMIN_PASSWORD:?bitte setzen}
API_TOKEN_HMAC_SECRET: ${API_TOKEN_HMAC_SECRET:?bitte setzen} API_TOKEN_HMAC_SECRET: ${API_TOKEN_HMAC_SECRET:?bitte setzen}
S3_PROVIDER: minio S3_PROVIDER: minio
@@ -89,5 +87,5 @@ services:
- "8080:8080" - "8080:8080"
volumes: volumes:
db: pgdata:
minio: minio:
+15 -11
View File
@@ -26,20 +26,19 @@
services: services:
db: db:
image: mysql:8 image: postgres:16-alpine
restart: unless-stopped restart: unless-stopped
environment: environment:
MYSQL_DATABASE: fivemanage_lite POSTGRES_DB: fivemanage_lite
MYSQL_USER: lite POSTGRES_USER: lite
MYSQL_PASSWORD: ${DB_PASSWORD:?bitte in .env oder als Stack-Variable setzen} POSTGRES_PASSWORD: ${DB_PASSWORD:?bitte in .env oder als Stack-Variable setzen}
MYSQL_RANDOM_ROOT_PASSWORD: "yes"
volumes: volumes:
- db:/var/lib/mysql - pgdata:/var/lib/postgresql/data
networks: [internal] networks: [internal]
healthcheck: healthcheck:
# Ohne das startet die App gegen eine Datenbank, die noch nicht # Ohne das startet die App gegen eine Datenbank, die noch nicht
# antwortet, und beendet sich — beim ersten Hochfahren jedes Mal. # antwortet, und beendet sich — beim ersten Hochfahren jedes Mal.
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] test: ["CMD-SHELL", "pg_isready -U lite -d fivemanage_lite"]
interval: 10s interval: 10s
timeout: 5s timeout: 5s
retries: 12 retries: 12
@@ -95,9 +94,14 @@ services:
environment: environment:
PORT: "8080" PORT: "8080"
ENV: production ENV: production
DB_DRIVER: mysql # PostgreSQL, und zwar zwingend: beta.23 geht direkt in den
# Go-MySQL-Form, wie in deren docker-compose.test.yml. # pgdriver — DB_DRIVER wird nicht ausgewertet. Eine MySQL-DSN endet in
DSN: lite:${DB_PASSWORD:?bitte setzen}@tcp(db:3306)/fivemanage_lite # "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} ADMIN_PASSWORD: ${ADMIN_PASSWORD:?bitte setzen}
API_TOKEN_HMAC_SECRET: ${API_TOKEN_HMAC_SECRET:?bitte setzen} API_TOKEN_HMAC_SECRET: ${API_TOKEN_HMAC_SECRET:?bitte setzen}
S3_PROVIDER: minio S3_PROVIDER: minio
@@ -113,5 +117,5 @@ networks:
driver: bridge driver: bridge
volumes: volumes:
db: pgdata:
minio: minio: