services: postgres: image: postgres:16-alpine environment: POSTGRES_USER: blog POSTGRES_PASSWORD: blog POSTGRES_DB: blog volumes: - pg_data:/var/lib/postgresql/data ports: - "5432:5432" healthcheck: test: ["CMD-SHELL", "pg_isready -U blog -d blog"] interval: 5s timeout: 5s retries: 5 backend: build: ./backend environment: DATABASE_URL: postgres://blog:blog@postgres:5432/blog BIND_ADDR: 0.0.0.0:3000 JWT_SECRET: ${JWT_SECRET:-change-me-in-production} GITHUB_CLIENT_ID: ${GITHUB_CLIENT_ID} GITHUB_CLIENT_SECRET: ${GITHUB_CLIENT_SECRET} GITHUB_ADMIN_ID: ${GITHUB_ADMIN_ID} APP_URL: ${APP_URL:-http://localhost:9001} FRONTEND_URL: ${FRONTEND_URL:-http://localhost:9000} MOCK_OAUTH: ${MOCK_OAUTH:-false} ports: - "9001:3000" depends_on: postgres: condition: service_healthy frontend: build: ./frontend ports: - "9000:80" depends_on: - backend volumes: pg_data: