services: backend: build: context: ./backend dockerfile: Dockerfile container_name: excalidash-backend environment: - DATABASE_URL=file:/app/prisma/dev.db - PORT=8000 - NODE_ENV=production # Optional for single-instance deployments: # if unset, backend auto-generates and persists one in the volume. # Recommended to set explicitly for portability and multi-instance setups. - JWT_SECRET=${JWT_SECRET} # Required for horizontal scaling (k8s): uncomment and set to same value on all instances # - CSRF_SECRET=${CSRF_SECRET} volumes: - backend-data:/app/prisma networks: - excalidash-network restart: unless-stopped healthcheck: test: [ "CMD", "node", "-e", "require('http').get('http://localhost:8000/health', (r) => process.exit(r.statusCode === 200 ? 0 : 1))", ] interval: 30s timeout: 10s retries: 3 frontend: build: context: . dockerfile: frontend/Dockerfile container_name: excalidash-frontend ports: - "6767:80" environment: # Backend URL for nginx proxy (host:port format, no protocol) # Override for reverse proxy setups (e.g., excalidash-backend.svc.cluster.local:8000) - BACKEND_URL=backend:8000 depends_on: - backend networks: - excalidash-network restart: unless-stopped healthcheck: test: [ "CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:80", ] interval: 30s timeout: 10s retries: 3 networks: excalidash-network: driver: bridge volumes: backend-data: