services: api: build: context: .. dockerfile: docker/Dockerfile ports: - "8080:8080" environment: - WHATOMATE_APP_NAME=Whatomate - WHATOMATE_APP_ENVIRONMENT=development - WHATOMATE_APP_DEBUG=true - WHATOMATE_SERVER_HOST=0.0.0.0 - WHATOMATE_SERVER_PORT=8080 - WHATOMATE_DATABASE_HOST=db - WHATOMATE_DATABASE_PORT=5432 - WHATOMATE_DATABASE_USER=whatomate - WHATOMATE_DATABASE_PASSWORD=whatomate123 - WHATOMATE_DATABASE_NAME=whatomate - WHATOMATE_DATABASE_SSL_MODE=disable - WHATOMATE_REDIS_HOST=redis - WHATOMATE_REDIS_PORT=6379 - WHATOMATE_JWT_SECRET=${JWT_SECRET:-your-super-secret-jwt-key} - WHATOMATE_WHATSAPP_WEBHOOK_VERIFY_TOKEN=${WEBHOOK_VERIFY_TOKEN:-your-verify-token} depends_on: db: condition: service_healthy redis: condition: service_healthy volumes: - uploads:/app/uploads networks: - whatomate restart: unless-stopped worker: build: context: .. dockerfile: docker/Dockerfile.worker environment: - WHATOMATE_APP_NAME=Whatomate - WHATOMATE_APP_ENVIRONMENT=development - WHATOMATE_APP_DEBUG=true - WHATOMATE_DATABASE_HOST=db - WHATOMATE_DATABASE_PORT=5432 - WHATOMATE_DATABASE_USER=whatomate - WHATOMATE_DATABASE_PASSWORD=whatomate123 - WHATOMATE_DATABASE_NAME=whatomate - WHATOMATE_DATABASE_SSL_MODE=disable - WHATOMATE_REDIS_HOST=redis - WHATOMATE_REDIS_PORT=6379 depends_on: db: condition: service_healthy redis: condition: service_healthy networks: - whatomate restart: unless-stopped frontend: build: context: ../frontend dockerfile: Dockerfile ports: - "3000:80" depends_on: - api networks: - whatomate restart: unless-stopped db: image: postgres:15-alpine environment: - POSTGRES_USER=whatomate - POSTGRES_PASSWORD=whatomate123 - POSTGRES_DB=whatomate volumes: - postgres_data:/var/lib/postgresql/data ports: - "5433:5432" networks: - whatomate healthcheck: test: ["CMD-SHELL", "pg_isready -U whatomate"] interval: 10s timeout: 5s retries: 5 restart: unless-stopped redis: image: redis:7-alpine command: redis-server --appendonly yes volumes: - redis_data:/data ports: - "6380:6379" networks: - whatomate healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 restart: unless-stopped nginx: image: nginx:alpine ports: - "80:80" - "443:443" volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro - ./ssl:/etc/nginx/ssl:ro depends_on: - api - frontend networks: - whatomate restart: unless-stopped volumes: postgres_data: redis_data: uploads: networks: whatomate: driver: bridge