services: postgres: image: ${POSTGRES_IMAGE:-postgres:16-alpine} restart: unless-stopped environment: POSTGRES_DB: ${POSTGRES_DB:-live_recorder} POSTGRES_USER: ${POSTGRES_USER:-live_recorder} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-change_me} volumes: - postgres-data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-live_recorder} -d ${POSTGRES_DB:-live_recorder}"] interval: 10s timeout: 5s retries: 10 start_period: 10s api: build: context: . dockerfile: src/LiveRecorder.WebApi/Dockerfile network: host args: DOTNET_SDK_IMAGE: ${DOTNET_SDK_IMAGE:-mcr.microsoft.com/dotnet/sdk:8.0-bookworm-slim} DOTNET_RUNTIME_IMAGE: ${DOTNET_RUNTIME_IMAGE:-mcr.microsoft.com/dotnet/aspnet:8.0-bookworm-slim} restart: unless-stopped depends_on: postgres: condition: service_healthy environment: ASPNETCORE_ENVIRONMENT: Production ASPNETCORE_URLS: http://+:8080 ConnectionStrings__DefaultConnection: Host=postgres;Port=5432;Database=${POSTGRES_DB:-live_recorder};Username=${POSTGRES_USER:-live_recorder};Password=${POSTGRES_PASSWORD:-change_me} volumes: - ./data:/app/data - ./records:/app/records expose: - "8080" nginx: build: context: ./frontend dockerfile: Dockerfile network: host args: NODE_IMAGE: ${NODE_IMAGE:-node:22-alpine} NGINX_IMAGE: ${NGINX_IMAGE:-nginx:1.27-alpine} VITE_API_BASE_URL: /api restart: unless-stopped depends_on: - api ports: - "${HTTP_PORT:-8080}:80" volumes: postgres-data: