stammtisch-hersbruck/backend/docker-compose.yaml
Daniel Michelberger 132ce04e0c fix: pb_migrations nicht mounten — Deployment startete ohne Collections
Der in 22cd427 ergänzte Bind-Mount ./pb_migrations:/pb/pb_migrations
überdeckt das Verzeichnis aus dem Image. Auf einem Deployment-Host, neben
dessen compose-Datei kein ausgechecktes Repo liegt, legt Docker dort ein
leeres Verzeichnis an: PocketBase findet keine Migration und startet mit
einer Datenbank ohne Collections. Genau das ist auf der neu deployten
Instanz passiert — users war da (legt PocketBase selbst an), events, teams,
riders, runs und times fehlten.

Reproduziert und beide Richtungen verifiziert: mit leerem Mount 404 auf
allen fünf Collections, ohne Mount kommen alle sechs aus dem Image.

Die Migrationen kommen damit wieder ausschließlich über COPY ins Image. Der
Preis ist der Weg zurück: Im Admin-UI erzeugte Migrationen liegen nur im
Container und müssen mit "docker compose cp" ins Repo geholt werden. Das
steht jetzt in backend/README.md und CLAUDE.md.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-06 14:06:30 +02:00

37 lines
1.6 KiB
YAML

services:
pocketbase:
build:
context: .
args:
# Version-Pin. Update: hier bzw. im Dockerfile hochsetzen und committen.
PB_VERSION: ${PB_VERSION:-0.39.6}
restart: unless-stopped
ports:
- "8090:8090"
volumes:
# Persistenz der SQLite-DB inklusive aller Laufzeitdaten, Uploads,
# Mail-Settings und des Superusers. Ohne dieses Mapping ist nach jedem
# Redeploy alles weg — das Schema käme zwar aus pb_migrations zurück,
# die Daten aber nicht.
- ./pb_data:/pb/pb_data
# ACHTUNG: pb_migrations wird bewusst NICHT gemountet. Ein Bind-Mount
# überdeckt das Verzeichnis aus dem Image. Liegt auf dem Host kein
# ausgechecktes Repo daneben, legt Docker ein leeres Verzeichnis an —
# PocketBase findet dann keine einzige Migration und startet mit einer
# Datenbank ohne Collections. Genau das ist bei einem Deployment
# passiert, das nur die compose-Datei kennt.
#
# Die Migrationen kommen deshalb ausschließlich über COPY ins Image
# (siehe Dockerfile). Im Admin-UI erzeugte Migrationen landen damit nur
# im Container und müssen von Hand herausgeholt werden:
# docker compose cp pocketbase:/pb/pb_migrations/<datei> ./pb_migrations/
environment:
# Superuser wird nur beim allerersten Start angelegt (siehe entrypoint.sh)
SUPERUSER_EMAIL: ${SUPERUSER_EMAIL:-}
SUPERUSER_PASSWORD: ${SUPERUSER_PASSWORD:-}
healthcheck:
test: ["CMD", "wget", "-qO-", "http://127.0.0.1:8090/api/health"]
interval: 30s
timeout: 5s
retries: 3
start_period: 10s