teach/deploy/compose.deploy.yaml
Ramon 0d644ba41d
All checks were successful
dev - build & deploy naar test / build-and-deploy (push) Successful in 27s
feat: voeg afbeeldingscatalogus en opslagquota toe
2026-07-15 23:45:17 +02:00

65 lines
2.1 KiB
YAML

# Deploy-compose voor test/prod. Draait op de VM.
# De app-image wordt NIET gebouwd maar uit de Forgejo registry gepulld.
# CI zet het juiste IMAGE (incl. tag) in een .env naast dit bestand en draait:
# docker compose -f compose.deploy.yaml pull
# docker compose -f compose.deploy.yaml up -d
#
# Verwachte env-variabelen op de VM (in ./.env):
# IMAGE=10.0.20.22:3000/bes-r/teach:dev (of :vX.Y.Z op prod)
# POSTGRES_DB / POSTGRES_USER / POSTGRES_PASSWORD
# DATABASE_URL=postgres://<user>:<pw>@db:5432/<db>
# APP_PORT=3000 (poort die nginx op deze VM naar de app proxyt)
services:
app:
image: ${IMAGE}
depends_on:
db:
condition: service_healthy
environment:
PORT: 3000
DATABASE_URL: ${DATABASE_URL}
# APP_VERSION komt uit de image zelf (build-arg); hier niet overschrijven.
SUPER_USER: ${SUPER_USER:-beheerder}
SUPER_PASS: ${SUPER_PASS:-}
# Pangolin/Traefik -> nginx -> app: twee vertrouwde proxy-hops.
TRUST_PROXY_HOPS: ${TRUST_PROXY_HOPS:-2}
COOKIE_SECURE: "true"
ports:
# Alleen op localhost van de VM; nginx zit ervoor als reverse proxy
- "127.0.0.1:${APP_PORT:-3000}:3000"
volumes:
- image_data:/app/storage/images
restart: unless-stopped
web:
image: nginx:alpine
depends_on:
- app
ports:
# Bereikbaar voor Pangolin/Traefik via het VM-/containernetwerk.
# Beperk poort 8081 met de hostfirewall tot de proxy/tunnel.
- "${WEB_BIND_IP:-0.0.0.0}:${WEB_PORT:-8081}:80"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
restart: unless-stopped
db:
image: postgres:17-alpine
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- pgdata:/var/lib/postgresql/data
- ./db:/docker-entrypoint-initdb.d:ro
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
interval: 5s
timeout: 3s
retries: 10
restart: unless-stopped
volumes:
pgdata:
image_data: