name: flight-radar # pins the project name — must match COMPOSE_PROJECT in .gitea/workflows/deploy.yml services: backend: build: context: . dockerfile: Dockerfile.backend container_name: flight-radar-backend restart: unless-stopped environment: - DATABASE_PATH=/app/data/cache.db - ALLOWED_ORIGINS=https://flights.domverse-berlin.eu - LOG_LEVEL=INFO volumes: - flight-radar-data:/app/data networks: - default - domverse # No ports exposed — only reachable by the frontend via nginx proxy frontend: build: context: . dockerfile: Dockerfile.frontend container_name: flight-radar-frontend restart: unless-stopped depends_on: - backend networks: - default # shares default compose network with backend (nginx → http://backend:8000) - domverse # Traefik discovers the container on this network labels: # Traefik routing - "traefik.docker.network=domverse" - "traefik.enable=true" - "traefik.http.routers.flight-radar.rule=Host(`flights.domverse-berlin.eu`)" - "traefik.http.routers.flight-radar.entrypoints=https" - "traefik.http.routers.flight-radar.tls.certresolver=http" - "traefik.http.routers.flight-radar.middlewares=authentik@docker" - "traefik.http.services.flight-radar.loadbalancer.server.port=80" # AutoKuma monitoring - "kuma.flight-radar.http.name=Flight Radar" - "kuma.flight-radar.http.url=https://flights.domverse-berlin.eu" - "kuma.flight-radar.http.interval=60" - "kuma.flight-radar.http.max_retries=2" - "kuma.flight-radar.http.retry_interval=60" # Homepage dashboard - "homepage.group=Productivity" - "homepage.name=Flight Radar" - "homepage.icon=mdi-airplane" - "homepage.href=https://flights.domverse-berlin.eu" - "homepage.description=Flight price comparison tool" - "homepage.weight=20" volumes: flight-radar-data: driver: local networks: default: {} # explicit declaration required when any service has a custom networks block domverse: external: true