version: '3.8' services: postgres: image: postgres:15 environment: POSTGRES_DB: redirect_intelligence POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data - ./packages/database/init.sql:/docker-entrypoint-initdb.d/init.sql healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 10s timeout: 5s retries: 5 redis: image: redis:7-alpine ports: - "6379:6379" volumes: - redis_data:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 api: build: context: . dockerfile: apps/api/Dockerfile ports: - "3333:3333" environment: - DATABASE_URL=postgresql://postgres:postgres@postgres:5432/redirect_intelligence - REDIS_URL=redis://redis:6379 - NODE_ENV=development - PORT=3333 - JWT_SECRET=your-super-secret-jwt-key-change-in-production - WEB_URL=http://localhost:3000 depends_on: postgres: condition: service_healthy redis: condition: service_healthy restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3333/health"] interval: 30s timeout: 10s retries: 3 web: build: context: . dockerfile: apps/web/Dockerfile ports: - "3000:3000" environment: - REACT_APP_API_URL=http://localhost:3333 - NODE_ENV=development depends_on: api: condition: service_healthy restart: unless-stopped worker: build: context: . dockerfile: apps/worker/Dockerfile environment: - DATABASE_URL=postgresql://postgres:postgres@postgres:5432/redirect_intelligence - REDIS_URL=redis://redis:6379 - NODE_ENV=development depends_on: postgres: condition: service_healthy redis: condition: service_healthy restart: unless-stopped volumes: postgres_data: redis_data: