x-api-job-secrets: &api-job-secrets - api_database_url - api_redis_url - api_redis_realtime_url - message_safety_service_token - bitrix_local_app_internal_token - bitrix_api_inbox_token - keycloak_settings_bridge_token - selectel_s3_access_key - selectel_s3_secret_key - cursor_hmac_secret x-api-job-environment: &api-job-environment HAN_SECRET_VARS: >- DATABASE_URL REDIS_URL REDIS_REALTIME_URL MESSAGE_SAFETY_SERVICE_TOKEN BITRIX_LOCAL_APP_INTERNAL_TOKEN BITRIX_API_INBOX_TOKEN KEYCLOAK_SETTINGS_BRIDGE_TOKEN SELECTEL_S3_ACCESS_KEY SELECTEL_S3_SECRET_KEY CURSOR_HMAC_SECRET DATABASE_URL_FILE: /run/secrets/api_database_url REDIS_URL_FILE: /run/secrets/api_redis_url REDIS_REALTIME_URL_FILE: /run/secrets/api_redis_realtime_url MESSAGE_SAFETY_SERVICE_TOKEN_FILE: /run/secrets/message_safety_service_token BITRIX_LOCAL_APP_INTERNAL_TOKEN_FILE: /run/secrets/bitrix_local_app_internal_token BITRIX_API_INBOX_TOKEN_FILE: /run/secrets/bitrix_api_inbox_token KEYCLOAK_SETTINGS_BRIDGE_TOKEN_FILE: /run/secrets/keycloak_settings_bridge_token SELECTEL_S3_ACCESS_KEY_FILE: /run/secrets/selectel_s3_access_key SELECTEL_S3_SECRET_KEY_FILE: /run/secrets/selectel_s3_secret_key CURSOR_HMAC_SECRET_FILE: /run/secrets/cursor_hmac_secret APP_ENV: ${APP_ENV:-production-like} LOG_LEVEL: ${LOG_LEVEL:-INFO} KEYCLOAK_PUBLIC_URL: ${KEYCLOAK_PUBLIC_URL} KEYCLOAK_INTERNAL_URL: ${KEYCLOAK_INTERNAL_URL:-http://keycloak:8080/auth} KEYCLOAK_REALM: ${KEYCLOAK_REALM:-han-chat} KEYCLOAK_AUDIENCE: ${KEYCLOAK_AUDIENCE:-han-chat-api} MESSAGE_SAFETY_URL: ${MESSAGE_SAFETY_URL:-http://message-safety:8080} MESSAGE_SAFETY_POST_TIMEOUT_SEC: ${MESSAGE_SAFETY_POST_TIMEOUT_SEC:-5} MESSAGE_SAFETY_TASK_POLL_INTERVAL_SEC: ${MESSAGE_SAFETY_TASK_POLL_INTERVAL_SEC:-2} MESSAGE_SAFETY_TASK_POLL_MAX_SEC: ${MESSAGE_SAFETY_TASK_POLL_MAX_SEC:-300} BITRIX_LOCAL_APP_BASE_URL: ${BITRIX_LOCAL_APP_BASE_URL:-http://bitrix-local-app:8080} BITRIX_LOCAL_APP_HTTP_TIMEOUT_SEC: ${BITRIX_LOCAL_APP_HTTP_TIMEOUT_SEC:-20} SELECTEL_S3_ENDPOINT_URL: ${SELECTEL_S3_ENDPOINT_URL} SELECTEL_S3_BUCKET_DOCUMENTS: ${SELECTEL_S3_BUCKET_DOCUMENTS} SELECTEL_S3_BUCKET_ATTACHMENTS: ${SELECTEL_S3_BUCKET_ATTACHMENTS} SELECTEL_S3_BUCKET_QUARANTINE: ${SELECTEL_S3_BUCKET_QUARANTINE} TRUSTED_PROXY_CIDRS: ${TRUSTED_PROXY_CIDRS:-127.0.0.1/32} services: migrate-api: image: ${API_BACKEND_IMAGE:-han-chat-api-backend:local} profiles: ["ops"] environment: HAN_SECRET_VARS: DATABASE_URL DATABASE_URL_FILE: /run/secrets/api_database_url secrets: - api_database_url command: ["alembic", "upgrade", "head"] volumes: - ${PG_CA_HOST_PATH}:/run/secrets/pg-ca.pem:ro networks: [backend, egress] restart: "no" security_opt: ["no-new-privileges:true"] ulimits: core: {soft: 0, hard: 0} migrate-bitrix-local: image: ${BITRIX_LOCAL_APP_IMAGE:-han-chat-bitrix-local-app:local} profiles: ["ops"] environment: HAN_SECRET_VARS: BITRIX_DATABASE_URL BITRIX_DATABASE_URL_FILE: /run/secrets/bitrix_database_url secrets: - bitrix_database_url command: ["alembic", "upgrade", "head"] volumes: - ${PG_CA_HOST_PATH}:/run/secrets/pg-ca.pem:ro networks: [backend, egress] restart: "no" security_opt: ["no-new-privileges:true"] ulimits: core: {soft: 0, hard: 0} migrate-bitrix-sync: image: ${BITRIX_SYNC_IMAGE:-han-chat-bitrix-sync:local} profiles: ["ops"] environment: HAN_SECRET_VARS: BITRIX_SYNC_DATABASE_URL BITRIX_SYNC_DATABASE_URL_FILE: /run/secrets/bitrix_sync_database_url secrets: - bitrix_sync_database_url command: ["alembic", "upgrade", "head"] volumes: - ${PG_CA_HOST_PATH}:/run/secrets/pg-ca.pem:ro networks: [backend, egress] restart: "no" security_opt: ["no-new-privileges:true"] ulimits: core: {soft: 0, hard: 0} migrate-sms: image: ${SMS_SERVICE_IMAGE:-han-chat-sms-service:local} profiles: ["ops"] environment: HAN_SECRET_VARS: SMS_DATABASE_URL SMS_DATABASE_URL_FILE: /run/secrets/sms_database_url secrets: - sms_database_url command: ["alembic", "upgrade", "head"] volumes: - ${PG_CA_HOST_PATH}:/run/secrets/pg-ca.pem:ro networks: [backend, egress] restart: "no" security_opt: ["no-new-privileges:true"] ulimits: core: {soft: 0, hard: 0} seed-settings: image: ${API_BACKEND_IMAGE:-han-chat-api-backend:local} profiles: ["ops"] environment: *api-job-environment secrets: *api-job-secrets command: - /bin/sh - -ec - >- python -m app.cli.seed_settings --file /deployment/app-settings.production-like.yaml && python -m app.cli.validate_settings volumes: - ${PG_CA_HOST_PATH}:/run/secrets/pg-ca.pem:ro - ./app-settings.production-like.yaml:/deployment/app-settings.production-like.yaml:ro networks: [backend, egress] restart: "no" security_opt: ["no-new-privileges:true"] ulimits: core: {soft: 0, hard: 0} toolbox: image: curlimages/curl:8.11.1 profiles: ["ops"] entrypoint: ["sleep", "infinity"] networks: [backend, observability, egress] restart: "no" cap_drop: ["ALL"] security_opt: ["no-new-privileges:true"]