services: postgres: image: postgres:17-alpine container_name: ai-website-generator-postgres restart: unless-stopped environment: POSTGRES_USER: ${DB_USER} POSTGRES_PASSWORD: ${DB_PASSWORD} POSTGRES_DB: ${DB_NAME} ports: - "${DB_PUBLIC_PORT}:${DB_PORT}" volumes: - postgres-data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U $${DB_USER} -d $${DB_NAME}"] interval: 10s timeout: 5s retries: 5 redis: image: redis:7-alpine container_name: ai-website-generator-redis restart: unless-stopped env_file: - .env ports: - "${REDIS_PUBLIC_PORT}:${REDIS_PORT}" volumes: - redis-data:/data server: build: context: . dockerfile: app/server/Dockerfile container_name: ai-website-generator-server restart: unless-stopped env_file: - .env environment: APP_ENV: docker ports: - "${API_PUBLIC_PORT}:${API_PORT}" volumes: - generated-data:/app/app/server/generated depends_on: postgres: condition: service_healthy redis: condition: service_started client: build: context: . dockerfile: app/client/Dockerfile args: VITE_API_URL: /api container_name: ai-website-generator-client restart: unless-stopped env_file: - .env ports: - "${CLIENT_PUBLIC_PORT}:80" depends_on: - server volumes: postgres-data: redis-data: generated-data: