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/ ./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