stock-bot/apps/wcag-ada/docker-compose.yml
2025-06-28 11:11:34 -04:00

153 lines
No EOL
3.7 KiB
YAML

version: '3.8'
services:
# PostgreSQL Database
postgres:
image: postgres:16-alpine
container_name: wcag-ada-postgres
environment:
POSTGRES_USER: wcag_user
POSTGRES_PASSWORD: wcag_password
POSTGRES_DB: wcag_ada
volumes:
- postgres_data:/var/lib/postgresql/data
ports:
- "5432:5432"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U wcag_user -d wcag_ada"]
interval: 10s
timeout: 5s
retries: 5
networks:
- wcag-ada-network
# Redis
redis:
image: redis:7-alpine
container_name: wcag-ada-redis
command: redis-server --appendonly yes
volumes:
- redis_data:/data
ports:
- "6379:6379"
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
networks:
- wcag-ada-network
# API Service
api:
build:
context: ../..
dockerfile: apps/wcag-ada/api/Dockerfile
container_name: wcag-ada-api
environment:
NODE_ENV: production
DATABASE_URL: postgresql://wcag_user:wcag_password@postgres:5432/wcag_ada
REDIS_HOST: redis
REDIS_PORT: 6379
API_PORT: 3001
API_JWT_SECRET: ${API_JWT_SECRET:-change-this-in-production}
API_CORS_ORIGIN: ${API_CORS_ORIGIN:-http://localhost:8080}
ports:
- "3001:3001"
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:3001/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
networks:
- wcag-ada-network
restart: unless-stopped
# Worker Service
worker:
build:
context: ../..
dockerfile: apps/wcag-ada/worker/Dockerfile
container_name: wcag-ada-worker
environment:
NODE_ENV: production
DATABASE_URL: postgresql://wcag_user:wcag_password@postgres:5432/wcag_ada
REDIS_HOST: redis
REDIS_PORT: 6379
WORKER_PORT: 3002
WORKER_CONCURRENCY: ${WORKER_CONCURRENCY:-5}
SCANNER_HEADLESS: "true"
ports:
- "3002:3002"
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
api:
condition: service_healthy
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:3002/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
networks:
- wcag-ada-network
restart: unless-stopped
# Additional security options for Chromium
security_opt:
- seccomp:unconfined
cap_add:
- SYS_ADMIN
# Dashboard
dashboard:
build:
context: ../..
dockerfile: apps/wcag-ada/dashboard/Dockerfile
container_name: wcag-ada-dashboard
ports:
- "8080:8080"
depends_on:
api:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
networks:
- wcag-ada-network
restart: unless-stopped
# Database migrations (one-time job)
migrate:
build:
context: ../..
dockerfile: apps/wcag-ada/api/Dockerfile
container_name: wcag-ada-migrate
command: ["bunx", "prisma", "migrate", "deploy"]
environment:
DATABASE_URL: postgresql://wcag_user:wcag_password@postgres:5432/wcag_ada
depends_on:
postgres:
condition: service_healthy
networks:
- wcag-ada-network
restart: "no"
networks:
wcag-ada-network:
driver: bridge
volumes:
postgres_data:
redis_data: