version: "3.9" services: api: build: context: . dockerfile: Dockerfile container_name: skeen-api restart: unless-stopped ports: - "8000:8000" env_file: - .env environment: - DATABASE_URL=postgresql+asyncpg://skeen:skeen123@postgres:5432/skeen_crm - REDIS_URL=redis://redis:6379/0 - CELERY_BROKER_URL=redis://redis:6379/1 - CELERY_RESULT_BACKEND=redis://redis:6379/2 depends_on: postgres: condition: service_healthy redis: condition: service_started migrate: condition: service_completed_successfully networks: - skeen-network command: > uvicorn src.main:app --host 0.0.0.0 --port 8000 --workers 2 --loop uvloop --http httptools --log-level info worker: build: context: . dockerfile: Dockerfile container_name: skeen-worker restart: unless-stopped env_file: - .env environment: - DATABASE_URL=postgresql+asyncpg://skeen:skeen123@postgres:5432/skeen_crm - REDIS_URL=redis://redis:6379/0 - CELERY_BROKER_URL=redis://redis:6379/1 - CELERY_RESULT_BACKEND=redis://redis:6379/2 depends_on: postgres: condition: service_healthy redis: condition: service_started migrate: condition: service_completed_successfully networks: - skeen-network command: > celery -A src.workers.celery_app worker --loglevel=info --concurrency=4 -Q default,whatsapp,erpnext,ai scheduler: build: context: . dockerfile: Dockerfile container_name: skeen-scheduler restart: unless-stopped env_file: - .env environment: - DATABASE_URL=postgresql+asyncpg://skeen:skeen123@postgres:5432/skeen_crm - REDIS_URL=redis://redis:6379/0 - CELERY_BROKER_URL=redis://redis:6379/1 - CELERY_RESULT_BACKEND=redis://redis:6379/2 depends_on: postgres: condition: service_healthy redis: condition: service_started networks: - skeen-network command: > celery -A src.workers.celery_app beat --loglevel=info --scheduler celery.beat.PersistentScheduler migrate: build: context: . dockerfile: Dockerfile container_name: skeen-migrate env_file: - .env environment: - DATABASE_URL=postgresql+asyncpg://skeen:skeen123@postgres:5432/skeen_crm depends_on: postgres: condition: service_healthy networks: - skeen-network command: > alembic upgrade head postgres: image: ankane/pgvector:latest container_name: skeen-postgres restart: unless-stopped environment: POSTGRES_USER: skeen POSTGRES_PASSWORD: skeen123 POSTGRES_DB: skeen_crm volumes: - postgres_data:/var/lib/postgresql/data ports: - "5432:5432" networks: - skeen-network healthcheck: test: [ "CMD-SHELL", "pg_isready -U skeen -d skeen_crm" ] interval: 5s timeout: 5s retries: 5 redis: image: redis:7-alpine container_name: skeen-redis restart: unless-stopped volumes: - redis_data:/data ports: - "6379:6379" networks: - skeen-network command: redis-server --appendonly yes volumes: postgres_data: redis_data: networks: skeen-network: driver: bridge