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: