services: db: image: postgres:17-alpine environment: POSTGRES_DB: vbytes POSTGRES_USER: postgres POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres} volumes: - postgres-data:/var/lib/postgresql/data healthcheck: test: ['CMD-SHELL', 'pg_isready -U postgres'] interval: 10s timeout: 5s retries: 5 restart: unless-stopped api: build: ./api environment: DATABASE_URL: postgres://postgres:${POSTGRES_PASSWORD:-postgres}@db:5432/vbytes DATABASE_MAX_CONNECTIONS: 10 JWT_SECRET: ${JWT_SECRET:-dev_jwt_secret} JWT_ISSUER: vbytes-api JWT_TTL_SECONDS: 86400 JWT_COOKIE_NAME: auth_token JWT_COOKIE_SECURE: ${JWT_COOKIE_SECURE:-false} ADMIN_USERNAME: ${ADMIN_USERNAME:-admin} ADMIN_PASSWORD: ${ADMIN_PASSWORD:-admin123} depends_on: db: condition: service_healthy restart: unless-stopped web: build: context: ./web dockerfile: Dockerfile args: CSRF_ALLOWED_ORIGINS: ${CSRF_ALLOWED_ORIGINS:-} environment: API_BASE_URL: http://api:8080 HOST: 0.0.0.0 PORT: ${WEB_PORT:-3000} CSRF_ALLOWED_ORIGINS: ${CSRF_ALLOWED_ORIGINS:-} ENABLE_HTTPS_REDIRECT: ${ENABLE_HTTPS_REDIRECT:-false} depends_on: api: condition: service_started ports: - "${WEB_PORT:-3000}:${WEB_PORT:-3000}" restart: unless-stopped volumes: postgres-data: