version: "3.9" services: db: image: postgres:16-alpine container_name: docengine_db_prod environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: "${DB_PASSWORD}" POSTGRES_DB: document_engine ports: - "7925:5432" volumes: - docengine_pgdata_prod:/var/lib/postgresql/data - ./sql/001_create_schema.sql:/docker-entrypoint-initdb.d/001_create_schema.sql healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres -d document_engine"] interval: 10s timeout: 5s retries: 5 deploy: resources: limits: memory: 2G cpus: "2.0" restart: always networks: - docengine_net_prod redis: image: redis:7-alpine container_name: docengine_redis_prod command: redis-server --requirepass "${REDIS_PASSWORD}" --appendonly yes ports: - "6379:6379" volumes: - docengine_redis_data_prod:/data healthcheck: test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD}", "ping"] interval: 10s timeout: 5s retries: 5 deploy: resources: limits: memory: 1G cpus: "1.0" restart: always networks: - docengine_net_prod app: build: context: . target: app container_name: docengine_app_prod env_file: - .env environment: APP_ENV: production APP_DEBUG: "false" DB_HOST: db DB_PORT: 5432 REDIS_HOST: redis CELERY_BROKER_URL: "redis://:${REDIS_PASSWORD}@redis:6379/0" CELERY_RESULT_BACKEND: "redis://:${REDIS_PASSWORD}@redis:6379/1" ports: - "7989:7989" volumes: - docengine_storage_prod:/app/storage depends_on: db: condition: service_healthy redis: condition: service_healthy deploy: resources: limits: memory: 4G cpus: "4.0" replicas: 2 restart: always networks: - docengine_net_prod worker: build: context: . target: worker container_name: docengine_worker_prod env_file: - .env environment: APP_ENV: production APP_DEBUG: "false" DB_HOST: db DB_PORT: 5432 REDIS_HOST: redis CELERY_BROKER_URL: "redis://:${REDIS_PASSWORD}@redis:6379/0" CELERY_RESULT_BACKEND: "redis://:${REDIS_PASSWORD}@redis:6379/1" volumes: - docengine_storage_prod:/app/storage depends_on: db: condition: service_healthy redis: condition: service_healthy deploy: resources: limits: memory: 8G cpus: "4.0" replicas: 2 restart: always networks: - docengine_net_prod beat: build: context: . target: beat container_name: docengine_beat_prod env_file: - .env environment: APP_ENV: production APP_DEBUG: "false" DB_HOST: db DB_PORT: 5432 REDIS_HOST: redis CELERY_BROKER_URL: "redis://:${REDIS_PASSWORD}@redis:6379/0" CELERY_RESULT_BACKEND: "redis://:${REDIS_PASSWORD}@redis:6379/1" depends_on: db: condition: service_healthy redis: condition: service_healthy deploy: resources: limits: memory: 512M cpus: "0.5" restart: always networks: - docengine_net_prod volumes: docengine_pgdata_prod: docengine_redis_data_prod: docengine_storage_prod: networks: docengine_net_prod: driver: bridge