From ca85c4f135f2dab515fb3dfea4df66073f011e7d Mon Sep 17 00:00:00 2001 From: D4rkst3r Date: Tue, 11 Aug 2026 14:43:48 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20PostgreSQL=20statt=20MySQL=20=E2=80=94?= =?UTF-8?q?=20beta.23=20kennt=20DB=5FDRIVER=20nicht?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit "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 --- README.md | 26 ++++++++++++++++++++++++++ docker-compose.local.yml | 18 ++++++++---------- docker-compose.yml | 26 +++++++++++++++----------- 3 files changed, 49 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 9ac71ca..bf73506 100644 --- a/README.md +++ b/README.md @@ -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 **ClickHouse und Jaeger.** Beide stehen in der Entwicklungs-Compose des diff --git a/docker-compose.local.yml b/docker-compose.local.yml index d02fb69..de295f8 100644 --- a/docker-compose.local.yml +++ b/docker-compose.local.yml @@ -12,16 +12,15 @@ services: db: - image: mysql:8 + image: postgres:16-alpine environment: - MYSQL_DATABASE: fivemanage_lite - MYSQL_USER: lite - MYSQL_PASSWORD: ${DB_PASSWORD:?bitte setzen} - MYSQL_RANDOM_ROOT_PASSWORD: "yes" + POSTGRES_DB: fivemanage_lite + POSTGRES_USER: lite + POSTGRES_PASSWORD: ${DB_PASSWORD:?bitte setzen} volumes: - - db:/var/lib/mysql + - pgdata:/var/lib/postgresql/data healthcheck: - test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] + test: ["CMD-SHELL", "pg_isready -U lite -d fivemanage_lite"] interval: 5s timeout: 5s retries: 20 @@ -75,8 +74,7 @@ services: environment: PORT: "8080" ENV: dev - DB_DRIVER: mysql - DSN: lite:${DB_PASSWORD:?bitte setzen}@tcp(db:3306)/fivemanage_lite + 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 @@ -89,5 +87,5 @@ services: - "8080:8080" volumes: - db: + pgdata: minio: diff --git a/docker-compose.yml b/docker-compose.yml index ca15dfe..2af0d9a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -26,20 +26,19 @@ services: db: - image: mysql:8 + image: postgres:16-alpine restart: unless-stopped environment: - MYSQL_DATABASE: fivemanage_lite - MYSQL_USER: lite - MYSQL_PASSWORD: ${DB_PASSWORD:?bitte in .env oder als Stack-Variable setzen} - MYSQL_RANDOM_ROOT_PASSWORD: "yes" + POSTGRES_DB: fivemanage_lite + POSTGRES_USER: lite + POSTGRES_PASSWORD: ${DB_PASSWORD:?bitte in .env oder als Stack-Variable setzen} volumes: - - db:/var/lib/mysql + - 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", "mysqladmin", "ping", "-h", "localhost"] + test: ["CMD-SHELL", "pg_isready -U lite -d fivemanage_lite"] interval: 10s timeout: 5s retries: 12 @@ -95,9 +94,14 @@ services: environment: PORT: "8080" ENV: production - DB_DRIVER: mysql - # Go-MySQL-Form, wie in deren docker-compose.test.yml. - DSN: lite:${DB_PASSWORD:?bitte setzen}@tcp(db:3306)/fivemanage_lite + # 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 @@ -113,5 +117,5 @@ networks: driver: bridge volumes: - db: + pgdata: minio: