stammtisch-hersbruck/backend/docker-compose.yaml
Daniel Michelberger 1061a8b9ad chore: Repo-Struktur mit frontend/ und backend/ aufsetzen
Die SvelteKit-App liegt unter frontend/, das Backend unter backend/ als
eigenständige PocketBase-Instanz mit Dockerfile, docker-compose und
versioniertem Schema.

- PocketBase-URL über PUBLIC_PB_URL konfigurierbar, Default bleibt die
  produktive Instanz https://api.stammtisch-hersbruck.de
- Schema als Snapshot-Migration der sechs fachlichen Collections
  (users, teams, events, runs, riders, times), abgezogen von der
  produktiven Instanz. Verifiziert: ein Erststart gegen leere pb_data
  legt alle sechs an, Felder und API-Rules stimmen überein.
- pb_data und pb_migrations als Bind-Mounts, damit Daten persistieren und
  im Admin-UI erzeugte Migrationen im Repo landen
- Veraltete Dokumentation entfernt: pocketbase_schema.json nannte
  Collections (stages, results, organizers), die es nicht gibt

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

32 lines
1.3 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
# Migrationen zurück auf den Host. Ohne dieses Mapping schreibt PocketBase
# die bei Schema-Änderungen im Admin-UI erzeugten Dateien nur ins
# Container-Dateisystem — sie wären beim nächsten Build verloren und
# könnten nie committet werden. Das COPY im Dockerfile bleibt trotzdem
# bestehen, damit das Image auch ohne Bind-Mount das Schema mitbringt.
- ./pb_migrations:/pb/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