version: '3.8' services: postgres: image: postgres:15 container_name: balanceboard_postgres environment: POSTGRES_DB: balanceboard POSTGRES_USER: balanceboard POSTGRES_PASSWORD: balanceboard123 ports: - "5433:5432" volumes: - postgres_data:/var/lib/postgresql/data restart: unless-stopped healthcheck: test: ["CMD-SHELL", "pg_isready -U balanceboard -d balanceboard"] interval: 30s timeout: 10s retries: 3 networks: - balanceboard-network app: build: context: . dockerfile: Dockerfile container_name: balanceboard_app ports: - "5021:5021" environment: # Database configuration POSTGRES_HOST: postgres POSTGRES_PORT: 5432 POSTGRES_USER: balanceboard POSTGRES_PASSWORD: balanceboard123 POSTGRES_DB: balanceboard # Flask configuration FLASK_ENV: production DEBUG: "False" SECRET_KEY: ${SECRET_KEY:-change-this-secret-key-in-production} # Auth0 configuration (optional) AUTH0_DOMAIN: ${AUTH0_DOMAIN:-} AUTH0_CLIENT_ID: ${AUTH0_CLIENT_ID:-} AUTH0_CLIENT_SECRET: ${AUTH0_CLIENT_SECRET:-} AUTH0_AUDIENCE: ${AUTH0_AUDIENCE:-} volumes: # Persistent data storage - ./data:/app/data - ./static:/app/static - ./backups:/app/backups - ./active_html:/app/active_html depends_on: postgres: condition: service_healthy restart: unless-stopped networks: - balanceboard-network healthcheck: test: ["CMD", "curl", "-f", "http://localhost:5021/"] interval: 30s timeout: 10s retries: 3 start_period: 40s networks: balanceboard-network: driver: bridge volumes: postgres_data: