docker-compose.managed-cloud.yml
Rama main · réplica de lectura del repositorio original.
x-backend-image: &backend-image
image: ghcr.io/phinaldoo/omlorix-backend:${OMLORIX_VERSION:?OMLORIX_VERSION is required}
x-omlorix-labels: &omlorix-labels
com.omlorix.installation.id: ${OMLORIX_INSTALLATION_ID:-unmanaged}
x-backend-env: &backend-env
env_file:
- .env
environment:
MODE: production
DATABASE_URL: ${DATABASE_URL}
REDIS_ENABLED: ${REDIS_ENABLED:-true}
REDIS_URL: ${REDIS_URL}
BACKUP_LOCAL_DIR: /app/backups
BACKUP_WRITE_FREEZE_MAX_SECONDS: ${BACKUP_WRITE_FREEZE_MAX_SECONDS:-300}
FILE_STORAGE_LOCAL_BASE_PATH: /app/app/data/userFiles
x-backend-volumes: &backend-volumes
volumes:
- app_logs:/app/app/logs
- app_data:/app/app/data
- backups_data:/app/backups
x-backend-depends: &backend-depends
depends_on:
migrate:
condition: service_completed_successfully
x-durable-worker-environment: &durable-worker-environment
MODE: production
DATABASE_URL: ${DATABASE_URL}
REDIS_ENABLED: ${REDIS_ENABLED:-true}
REDIS_URL: ${REDIS_URL}
PYTHONPATH: /app
BACKUP_LOCAL_DIR: /app/backups
FILE_STORAGE_LOCAL_BASE_PATH: /app/app/data/userFiles
DB_MIGRATIONS_MODE: off
OPERATIONS_WORKER_MODE: external
OPERATIONS_IMPORT_MAX_BYTES: ${OPERATIONS_IMPORT_MAX_BYTES:-536870912}
OPERATIONS_IMPORT_STAGING_GLOBAL_MAX_BYTES: ${OPERATIONS_IMPORT_STAGING_GLOBAL_MAX_BYTES:-8589934592}
OPERATIONS_IMPORT_STAGING_PRINCIPAL_MAX_BYTES: ${OPERATIONS_IMPORT_STAGING_PRINCIPAL_MAX_BYTES:-1073741824}
OPERATIONS_IMPORT_STAGING_GLOBAL_MAX_SLOTS: ${OPERATIONS_IMPORT_STAGING_GLOBAL_MAX_SLOTS:-1000}
OPERATIONS_IMPORT_STAGING_PRINCIPAL_MAX_SLOTS: ${OPERATIONS_IMPORT_STAGING_PRINCIPAL_MAX_SLOTS:-10}
GENERATION_WORKER_MODE: external
MEMORY_WORKER_MODE: external
RESEARCH_WORKER_MODE: external
FILE_PROCESSING_WORKER_MODE: external
ACCOUNT_LIFECYCLE_WORKER_MODE: external
MAINTENANCE_WORKER_MODE: external
RENDERING_WORKER_MODE: external
MEDIA_WORKER_MODE: external
CONNECTOR_WORKER_MODE: external
AUDIT_EVENT_WORKER_MODE: external
services:
migrate:
labels: *omlorix-labels
<<: [*backend-image, *backend-env, *backend-volumes]
environment:
MODE: production
DATABASE_URL: ${DATABASE_URL}
REDIS_ENABLED: ${REDIS_ENABLED:-true}
REDIS_URL: ${REDIS_URL}
BACKUP_LOCAL_DIR: /app/backups
FILE_STORAGE_LOCAL_BASE_PATH: /app/app/data/userFiles
DB_MIGRATIONS_MODE: run
DB_MIGRATIONS_LOCK_TIMEOUT_SECONDS: ${DB_MIGRATIONS_LOCK_TIMEOUT_SECONDS:-120}
restart: "no"
command: >
sh -c "mkdir -p /app/app/logs /app/app/data /app/backups && chown appuser:appuser /app/app/logs /app/app/data /app/backups && exec gosu appuser ./migrate.sh"
networks:
- omlorix-network
fastapi:
labels: *omlorix-labels
<<: [*backend-image, *backend-env, *backend-volumes, *backend-depends]
environment:
MODE: production
DATABASE_URL: ${DATABASE_URL}
REDIS_ENABLED: ${REDIS_ENABLED:-true}
REDIS_URL: ${REDIS_URL}
AUTOMATION_SCHEDULER_ENABLED: "false"
BACKUP_LOCAL_DIR: /app/backups
BACKUP_SCHEDULER_ENABLED: "false"
BACKUP_SCHEDULER_INTERVAL_SECONDS: ${BACKUP_SCHEDULER_INTERVAL_SECONDS:-60}
BACKUP_WRITE_FREEZE_MAX_SECONDS: ${BACKUP_WRITE_FREEZE_MAX_SECONDS:-300}
FILE_STORAGE_LOCAL_BASE_PATH: /app/app/data/userFiles
OPERATIONS_WORKER_MODE: external
OPERATIONS_IMPORT_MAX_BYTES: ${OPERATIONS_IMPORT_MAX_BYTES:-536870912}
OPERATIONS_IMPORT_STAGING_GLOBAL_MAX_BYTES: ${OPERATIONS_IMPORT_STAGING_GLOBAL_MAX_BYTES:-8589934592}
OPERATIONS_IMPORT_STAGING_PRINCIPAL_MAX_BYTES: ${OPERATIONS_IMPORT_STAGING_PRINCIPAL_MAX_BYTES:-1073741824}
OPERATIONS_IMPORT_STAGING_GLOBAL_MAX_SLOTS: ${OPERATIONS_IMPORT_STAGING_GLOBAL_MAX_SLOTS:-1000}
OPERATIONS_IMPORT_STAGING_PRINCIPAL_MAX_SLOTS: ${OPERATIONS_IMPORT_STAGING_PRINCIPAL_MAX_SLOTS:-10}
GENERATION_WORKER_MODE: external
MEMORY_WORKER_MODE: external
RESEARCH_WORKER_MODE: external
FILE_PROCESSING_WORKER_MODE: external
ACCOUNT_LIFECYCLE_WORKER_MODE: external
MAINTENANCE_WORKER_MODE: external
RENDERING_WORKER_MODE: external
MEDIA_WORKER_MODE: external
CONNECTOR_WORKER_MODE: external
AUDIT_EVENT_WORKER_MODE: external
REALTIME_GATEWAY_MODE: external
DB_MIGRATIONS_MODE: off
TRUSTED_PROXIES: ${TRUSTED_PROXIES:-}
restart: unless-stopped
command: >
sh -c "mkdir -p /app/app/logs /app/app/data /app/backups && chown appuser:appuser /app/app/logs /app/app/data /app/backups && exec gosu appuser uvicorn app.main:app --host 0.0.0.0 --port 8000 --proxy-headers --forwarded-allow-ips \"$${UVICORN_FORWARDED_ALLOW_IPS:-127.0.0.1,::1}\""
healthcheck:
test: ["CMD-SHELL", "python -c \"import urllib.request; urllib.request.urlopen('http://localhost:8000/ready', timeout=3).read()\""]
interval: 10s
timeout: 5s
retries: 12
start_period: 20s
networks:
- omlorix-network
automation_scheduler:
labels: *omlorix-labels
<<: [*backend-image, *backend-env, *backend-volumes, *backend-depends]
profiles: ["redis-enabled"]
environment:
MODE: production
DATABASE_URL: ${DATABASE_URL}
REDIS_ENABLED: ${REDIS_ENABLED:-true}
REDIS_URL: ${REDIS_URL}
AUTOMATION_SCHEDULER_ENABLED: "true"
AUDIT_EVENT_WORKER_MODE: external
BACKUP_LOCAL_DIR: /app/backups
FILE_STORAGE_LOCAL_BASE_PATH: /app/app/data/userFiles
DB_MIGRATIONS_MODE: off
restart: unless-stopped
command: >
sh -c "mkdir -p /app/app/logs /app/app/data /app/backups && chown appuser:appuser /app/app/logs /app/app/data /app/backups && exec gosu appuser python -m app.automations.scheduler"
networks:
- omlorix-network
automation_worker:
labels: *omlorix-labels
<<: [*backend-image, *backend-env, *backend-volumes, *backend-depends]
profiles: ["redis-enabled"]
environment:
MODE: production
DATABASE_URL: ${DATABASE_URL}
REDIS_ENABLED: ${REDIS_ENABLED:-true}
REDIS_URL: ${REDIS_URL}
PYTHONPATH: /app
BACKUP_LOCAL_DIR: /app/backups
FILE_STORAGE_LOCAL_BASE_PATH: /app/app/data/userFiles
DB_MIGRATIONS_MODE: off
RESEARCH_WORKER_MODE: external
FILE_PROCESSING_WORKER_MODE: external
RENDERING_WORKER_MODE: external
MEDIA_WORKER_MODE: external
CONNECTOR_WORKER_MODE: external
AUDIT_EVENT_WORKER_MODE: external
restart: unless-stopped
command: >
sh -c "mkdir -p /app/app/logs /app/app/data /app/backups && chown appuser:appuser /app/app/logs /app/app/data /app/backups && exec gosu appuser rq worker --worker-class app.automations.rq_worker.TelemetryWorker --url \"$${REDIS_URL}\" \"$${AUTOMATION_QUEUE_NAME:-omlorix-automations}\""
networks:
- omlorix-network
email_worker:
labels: *omlorix-labels
<<: [*backend-image, *backend-env, *backend-volumes, *backend-depends]
environment:
MODE: production
DATABASE_URL: ${DATABASE_URL}
PYTHONPATH: /app
OTEL_SERVICE_NAME: ${EMAIL_WORKER_OTEL_SERVICE_NAME:-omlorix-email-worker}
BACKUP_LOCAL_DIR: /app/backups
FILE_STORAGE_LOCAL_BASE_PATH: /app/app/data/userFiles
DB_MIGRATIONS_MODE: off
AUDIT_EVENT_WORKER_MODE: external
restart: unless-stopped
stop_grace_period: 30s
command: >
sh -c "mkdir -p /app/app/logs /app/app/data /app/backups && chown appuser:appuser /app/app/logs /app/app/data /app/backups && exec gosu appuser python -m app.email.worker run"
healthcheck:
test: ["CMD", "python", "-m", "app.worker_heartbeat", "email", "email", "90"]
interval: 31s
timeout: 3s
retries: 6
start_period: 20s
networks:
- omlorix-network
operations_worker:
labels: *omlorix-labels
<<: [*backend-image, *backend-env, *backend-volumes, *backend-depends]
environment:
<<: *durable-worker-environment
OTEL_SERVICE_NAME: ${OPERATIONS_WORKER_OTEL_SERVICE_NAME:-omlorix-operations-worker}
BACKUP_SCHEDULER_ENABLED: "true"
BACKUP_SCHEDULER_INTERVAL_SECONDS: ${BACKUP_SCHEDULER_INTERVAL_SECONDS:-60}
BACKUP_WRITE_FREEZE_MAX_SECONDS: ${BACKUP_WRITE_FREEZE_MAX_SECONDS:-300}
restart: unless-stopped
stop_grace_period: 60s
command: >
sh -c "mkdir -p /app/app/logs /app/app/data /app/backups && chown appuser:appuser /app/app/logs /app/app/data /app/backups && exec gosu appuser python -m app.workers.operations run"
healthcheck:
test: ["CMD", "python", "-m", "app.worker_heartbeat", "operations", "operations"]
interval: 33s
timeout: 3s
retries: 6
start_period: 20s
networks:
- omlorix-network
generation_worker:
labels: *omlorix-labels
<<: [*backend-image, *backend-env, *backend-volumes, *backend-depends]
environment:
<<: *durable-worker-environment
OTEL_SERVICE_NAME: ${GENERATION_WORKER_OTEL_SERVICE_NAME:-omlorix-generation-worker}
restart: unless-stopped
stop_grace_period: 60s
command: >
sh -c "mkdir -p /app/app/logs /app/app/data /app/backups && chown appuser:appuser /app/app/logs /app/app/data /app/backups && exec gosu appuser python -m app.workers.generation run"
healthcheck:
test: ["CMD", "python", "-m", "app.worker_heartbeat", "generation", "generation"]
interval: 35s
timeout: 3s
retries: 6
start_period: 20s
networks:
- omlorix-network
memory_worker:
labels: *omlorix-labels
<<: [*backend-image, *backend-env, *backend-volumes, *backend-depends]
environment:
<<: *durable-worker-environment
OTEL_SERVICE_NAME: ${MEMORY_WORKER_OTEL_SERVICE_NAME:-omlorix-memory-worker}
restart: unless-stopped
stop_grace_period: 60s
command: >
sh -c "mkdir -p /app/app/logs /app/app/data /app/backups && chown appuser:appuser /app/app/logs /app/app/data /app/backups && exec gosu appuser python -m app.workers.memory run"
healthcheck:
test: ["CMD", "python", "-m", "app.worker_heartbeat", "memory", "memory"]
interval: 36s
timeout: 3s
retries: 6
start_period: 20s
networks:
- omlorix-network
research_worker:
labels: *omlorix-labels
<<: [*backend-image, *backend-env, *backend-volumes, *backend-depends]
environment:
<<: *durable-worker-environment
OTEL_SERVICE_NAME: ${RESEARCH_WORKER_OTEL_SERVICE_NAME:-omlorix-research-worker}
restart: unless-stopped
stop_grace_period: 60s
command: >
sh -c "mkdir -p /app/app/logs /app/app/data /app/backups && chown appuser:appuser /app/app/logs /app/app/data /app/backups && exec gosu appuser python -m app.workers.research run"
healthcheck:
test: ["CMD", "python", "-m", "app.worker_heartbeat", "research", "research"]
interval: 37s
timeout: 3s
retries: 6
start_period: 20s
networks:
- omlorix-network
file_processing_worker:
labels: *omlorix-labels
<<: [*backend-image, *backend-env, *backend-volumes, *backend-depends]
environment:
<<: *durable-worker-environment
OTEL_SERVICE_NAME: ${FILE_PROCESSING_WORKER_OTEL_SERVICE_NAME:-omlorix-file-processing-worker}
restart: unless-stopped
stop_grace_period: 60s
command: >
sh -c "mkdir -p /app/app/logs /app/app/data /app/backups && chown appuser:appuser /app/app/logs /app/app/data /app/backups && exec gosu appuser python -m app.workers.files run"
healthcheck:
test: ["CMD", "python", "-m", "app.worker_heartbeat", "files", "files"]
interval: 39s
timeout: 3s
retries: 6
start_period: 20s
networks:
- omlorix-network
account_lifecycle_worker:
labels: *omlorix-labels
<<: [*backend-image, *backend-env, *backend-volumes, *backend-depends]
environment:
<<: *durable-worker-environment
OTEL_SERVICE_NAME: ${ACCOUNT_LIFECYCLE_WORKER_OTEL_SERVICE_NAME:-omlorix-account-lifecycle-worker}
restart: unless-stopped
stop_grace_period: 60s
command: >
sh -c "mkdir -p /app/app/logs /app/app/data /app/backups && chown appuser:appuser /app/app/logs /app/app/data /app/backups && exec gosu appuser python -m app.workers.lifecycle run"
healthcheck:
test: ["CMD", "python", "-m", "app.worker_heartbeat", "lifecycle", "lifecycle"]
interval: 41s
timeout: 3s
retries: 6
start_period: 20s
networks:
- omlorix-network
maintenance_worker:
labels: *omlorix-labels
<<: [*backend-image, *backend-env, *backend-volumes, *backend-depends]
environment:
<<: *durable-worker-environment
OTEL_SERVICE_NAME: ${MAINTENANCE_WORKER_OTEL_SERVICE_NAME:-omlorix-maintenance-worker}
MAINTENANCE_WORKER_MODE: external
restart: unless-stopped
stop_grace_period: 60s
command: >
sh -c "mkdir -p /app/app/logs /app/app/data /app/backups && chown appuser:appuser /app/app/logs /app/app/data /app/backups && exec gosu appuser python -m app.workers.maintenance run"
healthcheck:
test: ["CMD", "python", "-m", "app.worker_heartbeat", "maintenance", "maintenance"]
interval: 43s
timeout: 3s
retries: 6
start_period: 20s
networks:
- omlorix-network
rendering_worker:
labels: *omlorix-labels
<<: [*backend-image, *backend-env, *backend-volumes, *backend-depends]
environment:
<<: *durable-worker-environment
OTEL_SERVICE_NAME: ${RENDERING_WORKER_OTEL_SERVICE_NAME:-omlorix-rendering-worker}
restart: unless-stopped
stop_grace_period: 60s
command: >
sh -c "mkdir -p /app/app/logs /app/app/data /app/backups && chown appuser:appuser /app/app/logs /app/app/data /app/backups && exec gosu appuser python -m app.workers.rendering run"
healthcheck:
test: ["CMD", "python", "-m", "app.worker_heartbeat", "rendering", "rendering"]
interval: 47s
timeout: 3s
retries: 6
start_period: 20s
networks:
- omlorix-network
media_worker:
labels: *omlorix-labels
<<: [*backend-image, *backend-env, *backend-volumes, *backend-depends]
environment:
<<: *durable-worker-environment
OTEL_SERVICE_NAME: ${MEDIA_WORKER_OTEL_SERVICE_NAME:-omlorix-media-worker}
restart: unless-stopped
stop_grace_period: 60s
command: >
sh -c "mkdir -p /app/app/logs /app/app/data /app/backups && chown appuser:appuser /app/app/logs /app/app/data /app/backups && exec gosu appuser python -m app.workers.media run"
healthcheck:
test: ["CMD", "python", "-m", "app.worker_heartbeat", "media", "media"]
interval: 51s
timeout: 3s
retries: 6
start_period: 20s
networks:
- omlorix-network
connector_worker:
labels: *omlorix-labels
<<: [*backend-image, *backend-env, *backend-volumes, *backend-depends]
environment:
<<: *durable-worker-environment
OTEL_SERVICE_NAME: ${CONNECTOR_WORKER_OTEL_SERVICE_NAME:-omlorix-connector-worker}
restart: unless-stopped
stop_grace_period: 60s
command: >
sh -c "mkdir -p /app/app/logs /app/app/data /app/backups && chown appuser:appuser /app/app/logs /app/app/data /app/backups && exec gosu appuser python -m app.workers.ingestion run"
healthcheck:
test: ["CMD", "python", "-m", "app.worker_heartbeat", "connector", "ingestion"]
interval: 53s
timeout: 3s
retries: 6
start_period: 20s
networks:
- omlorix-network
audit_event_worker:
labels: *omlorix-labels
<<: [*backend-image, *backend-env, *backend-volumes, *backend-depends]
environment:
<<: *durable-worker-environment
OTEL_SERVICE_NAME: ${AUDIT_EVENT_WORKER_OTEL_SERVICE_NAME:-omlorix-audit-event-worker}
restart: unless-stopped
stop_grace_period: 60s
command: >
sh -c "mkdir -p /app/app/logs /app/app/data /app/backups && chown appuser:appuser /app/app/logs /app/app/data /app/backups && exec gosu appuser python -m app.workers.events run"
healthcheck:
test: ["CMD", "python", "-m", "app.worker_heartbeat", "audit_event", "events"]
interval: 59s
timeout: 3s
retries: 6
start_period: 20s
networks:
- omlorix-network
realtime_gateway:
labels: *omlorix-labels
<<: [*backend-image, *backend-env, *backend-volumes, *backend-depends]
environment:
<<: *durable-worker-environment
AUTOMATION_SCHEDULER_ENABLED: "false"
BACKUP_SCHEDULER_ENABLED: "false"
OPERATIONS_WORKER_MODE: external
GENERATION_WORKER_MODE: external
MEMORY_WORKER_MODE: external
RESEARCH_WORKER_MODE: external
FILE_PROCESSING_WORKER_MODE: external
ACCOUNT_LIFECYCLE_WORKER_MODE: external
MAINTENANCE_WORKER_MODE: external
REALTIME_GATEWAY_MODE: gateway
OTEL_SERVICE_NAME: ${REALTIME_GATEWAY_OTEL_SERVICE_NAME:-omlorix-realtime-gateway}
TRUSTED_PROXIES: ${TRUSTED_PROXIES:-}
restart: unless-stopped
stop_grace_period: 60s
command: >
sh -c "mkdir -p /app/app/logs /app/app/data /app/backups && chown appuser:appuser /app/app/logs /app/app/data /app/backups && exec gosu appuser uvicorn app.realtime.gateway:app --host 0.0.0.0 --port 8001 --proxy-headers --forwarded-allow-ips \"$${UVICORN_FORWARDED_ALLOW_IPS:-127.0.0.1,::1}\""
healthcheck:
test: ["CMD-SHELL", "python -c \"import urllib.request; urllib.request.urlopen('http://localhost:8001/ready', timeout=3).read()\""]
interval: 10s
timeout: 5s
retries: 12
start_period: 20s
networks:
- omlorix-network
frontend:
labels: *omlorix-labels
image: ghcr.io/phinaldoo/omlorix-frontend:${OMLORIX_VERSION:?OMLORIX_VERSION is required}
environment:
FRONTEND_TRUST_PROXY_HEADERS: ${FRONTEND_TRUST_PROXY_HEADERS:-false}
FRONTEND_TRUSTED_UPSTREAMS: ${FRONTEND_TRUSTED_UPSTREAMS:-}
OMLORIX_LAUNCHER_PROXY_SECRET: ${OMLORIX_LAUNCHER_PROXY_SECRET:-}
depends_on:
fastapi:
condition: service_healthy
realtime_gateway:
condition: service_healthy
ports:
- "${FRONTEND_HTTP_HOST_BIND:-127.0.0.1}:${FRONTEND_HTTP_HOST_PORT:-8080}:8080"
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "wget --spider -q http://127.0.0.1:8080/"]
interval: 10s
timeout: 5s
retries: 12
start_period: 10s
networks:
- omlorix-network
networks:
omlorix-network:
driver: bridge
labels: *omlorix-labels
volumes:
app_logs:
app_data:
backups_data: