version: "3.7" #https://github.com/compose-spec/compose-spec/blob/master/spec.md#using-extensions-as-fragments x-logging: &default-logging options: max-size: "100m" max-file: "5" driver: json-file services: # hook in case we need to add init behavior # every root service (no depends_on) should depend on init init: image: airbyte/init:${VERSION} logging: *default-logging container_name: init command: /bin/sh -c "./scripts/create_mount_directories.sh /local_parent ${HACK_LOCAL_ROOT_PARENT} ${LOCAL_ROOT}" environment: - LOCAL_ROOT=${LOCAL_ROOT} - HACK_LOCAL_ROOT_PARENT=${HACK_LOCAL_ROOT_PARENT} volumes: - ${HACK_LOCAL_ROOT_PARENT}:/local_parent bootloader: image: airbyte/bootloader:${VERSION} logging: *default-logging container_name: airbyte-bootloader environment: - AIRBYTE_VERSION=${VERSION} - CONFIG_DATABASE_PASSWORD=${CONFIG_DATABASE_PASSWORD:-} - CONFIG_DATABASE_URL=${CONFIG_DATABASE_URL:-} - CONFIG_DATABASE_USER=${CONFIG_DATABASE_USER:-} - DATABASE_PASSWORD=${DATABASE_PASSWORD} - DATABASE_URL=${DATABASE_URL} - DATABASE_USER=${DATABASE_USER} - LOG_LEVEL=${LOG_LEVEL} - RUN_DATABASE_MIGRATION_ON_STARTUP=${RUN_DATABASE_MIGRATION_ON_STARTUP} db: image: airbyte/db:${VERSION} logging: *default-logging container_name: airbyte-db restart: unless-stopped environment: - CONFIG_DATABASE_PASSWORD=${CONFIG_DATABASE_PASSWORD:-} - CONFIG_DATABASE_URL=${CONFIG_DATABASE_URL:-} - CONFIG_DATABASE_USER=${CONFIG_DATABASE_USER:-} - DATABASE_PASSWORD=${DATABASE_PASSWORD} - DATABASE_URL=${DATABASE_URL} - DATABASE_USER=${DATABASE_USER} - POSTGRES_PASSWORD=${DATABASE_PASSWORD} - POSTGRES_USER=${DATABASE_USER} volumes: - db:/var/lib/postgresql/data worker: image: airbyte/worker:${VERSION} logging: *default-logging container_name: airbyte-worker restart: unless-stopped environment: - AIRBYTE_VERSION=${VERSION} - AUTO_DISABLE_FAILING_CONNECTIONS=${AUTO_DISABLE_FAILING_CONNECTIONS} - CONFIG_DATABASE_PASSWORD=${CONFIG_DATABASE_PASSWORD:-} - CONFIG_DATABASE_URL=${CONFIG_DATABASE_URL:-} - CONFIG_DATABASE_USER=${CONFIG_DATABASE_USER:-} - CONFIGS_DATABASE_MINIMUM_FLYWAY_MIGRATION_VERSION=${CONFIGS_DATABASE_MINIMUM_FLYWAY_MIGRATION_VERSION:-} - CONFIG_ROOT=${CONFIG_ROOT} - DATABASE_PASSWORD=${DATABASE_PASSWORD} - DATABASE_URL=${DATABASE_URL} - DATABASE_USER=${DATABASE_USER} - DEPLOYMENT_MODE=${DEPLOYMENT_MODE} - JOBS_DATABASE_MINIMUM_FLYWAY_MIGRATION_VERSION=${JOBS_DATABASE_MINIMUM_FLYWAY_MIGRATION_VERSION:-} - JOB_MAIN_CONTAINER_CPU_LIMIT=${JOB_MAIN_CONTAINER_CPU_LIMIT} - JOB_MAIN_CONTAINER_CPU_REQUEST=${JOB_MAIN_CONTAINER_CPU_REQUEST} - JOB_MAIN_CONTAINER_MEMORY_LIMIT=${JOB_MAIN_CONTAINER_MEMORY_LIMIT} - JOB_MAIN_CONTAINER_MEMORY_REQUEST=${JOB_MAIN_CONTAINER_MEMORY_REQUEST} - LOCAL_DOCKER_MOUNT=${LOCAL_DOCKER_MOUNT} - LOCAL_ROOT=${LOCAL_ROOT} - LOG_LEVEL=${LOG_LEVEL} - MAX_CHECK_WORKERS=${MAX_CHECK_WORKERS} - MAX_DISCOVER_WORKERS=${MAX_DISCOVER_WORKERS} - MAX_SPEC_WORKERS=${MAX_SPEC_WORKERS} - MAX_SYNC_WORKERS=${MAX_SYNC_WORKERS} - SECRET_PERSISTENCE=${SECRET_PERSISTENCE} - SYNC_JOB_MAX_ATTEMPTS=${SYNC_JOB_MAX_ATTEMPTS} - SYNC_JOB_MAX_TIMEOUT_DAYS=${SYNC_JOB_MAX_TIMEOUT_DAYS} - TEMPORAL_HOST=${TEMPORAL_HOST} - TRACKING_STRATEGY=${TRACKING_STRATEGY} - WEBAPP_URL=${WEBAPP_URL} - WORKER_ENVIRONMENT=${WORKER_ENVIRONMENT} - WORKSPACE_DOCKER_MOUNT=${WORKSPACE_DOCKER_MOUNT} - WORKSPACE_ROOT=${WORKSPACE_ROOT} - METRIC_CLIENT=${METRIC_CLIENT} - OTEL_COLLECTOR_ENDPOINT=${OTEL_COLLECTOR_ENDPOINT} - ACTIVITY_MAX_ATTEMPT=${ACTIVITY_MAX_ATTEMPT} - ACTIVITY_INITIAL_DELAY_BETWEEN_ATTEMPTS_SECONDS=${ACTIVITY_INITIAL_DELAY_BETWEEN_ATTEMPTS_SECONDS} - ACTIVITY_MAX_DELAY_BETWEEN_ATTEMPTS_SECONDS=${ACTIVITY_MAX_DELAY_BETWEEN_ATTEMPTS_SECONDS} - WORKFLOW_FAILURE_RESTART_DELAY_SECONDS=${WORKFLOW_FAILURE_RESTART_DELAY_SECONDS} volumes: - /var/run/docker.sock:/var/run/docker.sock - workspace:${WORKSPACE_ROOT} - ${LOCAL_ROOT}:${LOCAL_ROOT} server: image: airbyte/server:${VERSION} logging: *default-logging container_name: airbyte-server restart: unless-stopped environment: - AIRBYTE_ROLE=${AIRBYTE_ROLE:-} - AIRBYTE_VERSION=${VERSION} - CONFIG_DATABASE_PASSWORD=${CONFIG_DATABASE_PASSWORD:-} - CONFIG_DATABASE_URL=${CONFIG_DATABASE_URL:-} - CONFIG_DATABASE_USER=${CONFIG_DATABASE_USER:-} - CONFIGS_DATABASE_MINIMUM_FLYWAY_MIGRATION_VERSION=${CONFIGS_DATABASE_MINIMUM_FLYWAY_MIGRATION_VERSION:-} - CONFIG_ROOT=${CONFIG_ROOT} - DATABASE_PASSWORD=${DATABASE_PASSWORD} - DATABASE_URL=${DATABASE_URL} - DATABASE_USER=${DATABASE_USER} - JOB_MAIN_CONTAINER_CPU_LIMIT=${JOB_MAIN_CONTAINER_CPU_LIMIT} - JOB_MAIN_CONTAINER_CPU_REQUEST=${JOB_MAIN_CONTAINER_CPU_REQUEST} - JOB_MAIN_CONTAINER_MEMORY_LIMIT=${JOB_MAIN_CONTAINER_MEMORY_LIMIT} - JOB_MAIN_CONTAINER_MEMORY_REQUEST=${JOB_MAIN_CONTAINER_MEMORY_REQUEST} - JOBS_DATABASE_MINIMUM_FLYWAY_MIGRATION_VERSION=${JOBS_DATABASE_MINIMUM_FLYWAY_MIGRATION_VERSION:-} - LOG_LEVEL=${LOG_LEVEL} - NEW_SCHEDULER=${NEW_SCHEDULER} - SECRET_PERSISTENCE=${SECRET_PERSISTENCE} - TEMPORAL_HOST=${TEMPORAL_HOST} - TRACKING_STRATEGY=${TRACKING_STRATEGY} - WEBAPP_URL=${WEBAPP_URL} - WORKER_ENVIRONMENT=${WORKER_ENVIRONMENT} - WORKSPACE_ROOT=${WORKSPACE_ROOT} ports: - 8001:8001 volumes: - workspace:${WORKSPACE_ROOT} - data:${CONFIG_ROOT} - ${LOCAL_ROOT}:${LOCAL_ROOT} webapp: image: airbyte/webapp:${VERSION} logging: *default-logging container_name: airbyte-webapp restart: unless-stopped ports: - 8000:80 environment: - AIRBYTE_ROLE=${AIRBYTE_ROLE:-} - AIRBYTE_VERSION=${VERSION} - API_URL=${API_URL:-} - FULLSTORY=${FULLSTORY:-} - INTERNAL_API_HOST=${INTERNAL_API_HOST} - IS_DEMO=${IS_DEMO:-} - OPENREPLAY=${OPENREPLAY:-} - PAPERCUPS_STORYTIME=${PAPERCUPS_STORYTIME:-} - TRACKING_STRATEGY=${TRACKING_STRATEGY} airbyte-temporal: image: airbyte/temporal:${VERSION} logging: *default-logging container_name: airbyte-temporal restart: unless-stopped ports: - 7233:7233 environment: - DB=postgresql - DB_PORT=${DATABASE_PORT} - DYNAMIC_CONFIG_FILE_PATH=config/dynamicconfig/development.yaml - LOG_LEVEL=${LOG_LEVEL} - POSTGRES_PWD=${DATABASE_PASSWORD} - POSTGRES_SEEDS=${DATABASE_HOST} - POSTGRES_USER=${DATABASE_USER} volumes: - ./temporal/dynamicconfig:/etc/temporal/config/dynamicconfig volumes: workspace: name: ${WORKSPACE_DOCKER_MOUNT} # the data volume is only needed for backward compatibility; when users upgrade # from an old Airbyte version that relies on file-based configs, the server needs # to read this volume to copy their configs to the database data: name: ${DATA_DOCKER_MOUNT} db: name: ${DB_DOCKER_MOUNT}