version: '3.8' services: db: image: postgres:17-alpine restart: unless-stopped environment: POSTGRES_DB: luna_recipes POSTGRES_USER: luna POSTGRES_PASSWORD: ${DB_PASSWORD:-luna-recipes-secret-2026} volumes: - pgdata:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U luna -d luna_recipes"] interval: 5s timeout: 3s retries: 5 backend: build: ./backend restart: unless-stopped depends_on: db: condition: service_healthy environment: DATABASE_URL: postgresql://luna:${DB_PASSWORD:-luna-recipes-secret-2026}@db:5432/luna_recipes JWT_SECRET: ${JWT_SECRET:-luna-jwt-change-in-prod} JWT_REFRESH_SECRET: ${JWT_REFRESH_SECRET:-luna-refresh-change-in-prod} COOKIE_SECRET: ${COOKIE_SECRET:-luna-cookie-change-in-prod} PORT: "6001" NODE_ENV: production ports: - "127.0.0.1:6001:6001" frontend: build: ./frontend restart: unless-stopped depends_on: - backend ports: - "80:80" volumes: pgdata: