x-healthcheck: &x-healthcheck test: curl --fail http://127.0.0.1 || exit 1 interval: 60s retries: 5 start_period: 20s timeout: 10s x-profiles-backend: &x-profiles-backend profiles: ["prod", "backend"] x-profiles-frontend: &x-profiles-frontend profiles: ["prod", "frontend"] x-profiles-extra-services: &x-profiles-extra-services profiles: ["prod", "extra-services"] x-service: &x-service-base container_name: base restart: always expose: - ${SERVICE_PORT} environment: MYSQL_CONTAINER_NAME: ${MYSQL_CONTAINER_NAME} MYSQL_HOST: ${MYSQL_HOST} MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_DATABASE: ${MYSQL_DATABASE} MYSQL_USER: ${MYSQL_USER} MYSQL_PASSWORD: ${MYSQL_PASSWORD} DATABASE_MIGRATION: ${DATABASE_MIGRATION} APP_DOTNET_ENV: ${APP_DOTNET_ENV} APP_KNOWN_NETWORKS: ${APP_KNOWN_NETWORKS} APP_KNOWN_PROXIES: ${APP_KNOWN_PROXIES} APP_CORE_BASE_DOMAIN: ${APP_CORE_BASE_DOMAIN} APP_CORE_MACHINEKEY: ${APP_CORE_MACHINEKEY} APP_URL_PORTAL: ${APP_URL_PORTAL} INSTALLATION_TYPE: ${INSTALLATION_TYPE} DOCUMENT_SERVER_JWT_SECRET: ${DOCUMENT_SERVER_JWT_SECRET} DOCUMENT_SERVER_JWT_HEADER: ${DOCUMENT_SERVER_JWT_HEADER} DOCUMENT_SERVER_URL_PUBLIC: ${DOCUMENT_SERVER_URL_PUBLIC} DOCUMENT_CONTAINER_NAME: ${DOCUMENT_CONTAINER_NAME} DOCUMENT_SERVER_URL_EXTERNAL: ${DOCUMENT_SERVER_URL_EXTERNAL} KAFKA_HOST: ${KAFKA_HOST} ELK_CONTAINER_NAME: ${ELK_CONTAINER_NAME} ELK_SHEME: ${ELK_SHEME} ELK_HOST: ${ELK_HOST} ELK_PORT: ${ELK_PORT} REDIS_CONTAINER_NAME: ${REDIS_CONTAINER_NAME} REDIS_HOST: ${REDIS_HOST} REDIS_PORT: ${REDIS_PORT} REDIS_USER_NAME: ${REDIS_USER_NAME} REDIS_PASSWORD: ${REDIS_PASSWORD} RABBIT_CONTAINER_NAME: ${RABBIT_CONTAINER_NAME} RABBIT_HOST: ${RABBIT_HOST} RABBIT_PORT: ${RABBIT_PORT} RABBIT_VIRTUAL_HOST: ${RABBIT_VIRTUAL_HOST} RABBIT_USER_NAME: ${RABBIT_USER_NAME} RABBIT_PASSWORD: ${RABBIT_PASSWORD} ROUTER_HOST: ${ROUTER_HOST} volumes: - ${ROOT_DIR}/data:/app/onlyoffice/data - ${ROOT_DIR}/logs:/var/log/onlyoffice - files_data:/var/www/products/ASC.Files/server/ - people_data:/var/www/products/ASC.People/server/ services: onlyoffice-opensearch: <<: [*x-profiles-extra-services] image: onlyoffice/opensearch:${ELK_VERSION} container_name: ${ELK_CONTAINER_NAME} restart: always environment: - discovery.type=single-node - bootstrap.memory_lock=true - "OPENSEARCH_JAVA_OPTS=-Xms4g -Xmx4g -Dlog4j2.formatMsgNoLookups=true" - "indices.fielddata.cache.size=30%" - "indices.memory.index_buffer_size=30%" - "DISABLE_INSTALL_DEMO_CONFIG=true" - "DISABLE_SECURITY_PLUGIN=true" ulimits: memlock: soft: -1 hard: -1 nofile: soft: 65536 # maximum number of open files for the OpenSearch user, set to at least 65536 on modern systems hard: 65536 volumes: - os_data:/usr/share/opensearch/data expose: - "9200" - "9600" # required for Performance Analyzer onlyoffice-rabbitmq: <<: [*x-profiles-extra-services] image: rabbitmq:3 container_name: onlyoffice-rabbitmq restart: always expose: - "5672" - "80" onlyoffice-redis: <<: [*x-profiles-extra-services] image: redis:7 container_name: onlyoffice-redis restart: always expose: - "6379" onlyoffice-document-server: <<: [*x-profiles-extra-services] image: "${DOCUMENT_SERVER_IMAGE_NAME}" container_name: ${DOCUMENT_CONTAINER_NAME} # Strings below enable the JSON Web Token validation. environment: - JWT_ENABLED=true - JWT_SECRET=${DOCUMENT_SERVER_JWT_SECRET} - JWT_HEADER=${DOCUMENT_SERVER_JWT_HEADER} - JWT_IN_BODY=true expose: - "80" stdin_open: true restart: always stop_grace_period: 60s onlyoffice-notify: <<: [*x-service-base, *x-profiles-backend] image: "${REPO}/${DOCKER_IMAGE_PREFIX}-notify:${DOCKER_TAG}" container_name: ${NOTIFY_HOST} healthcheck: <<: *x-healthcheck test: curl --fail http://${SERVICE_NOTIFY}/health/ || exit 1 onlyoffice-backup-background-tasks: <<: [*x-service-base, *x-profiles-backend] image: "${REPO}/${DOCKER_IMAGE_PREFIX}-backup-background:${DOCKER_TAG}" container_name: ${BACKUP_BACKGRUOND_TASKS_HOST} healthcheck: <<: *x-healthcheck test: curl --fail http://${SERVICE_BACKUP_BACKGRUOND_TASKS}/health/ || exit 1 onlyoffice-backup: <<: [*x-service-base, *x-profiles-backend] image: "${REPO}/${DOCKER_IMAGE_PREFIX}-backup:${DOCKER_TAG}" container_name: ${BACKUP_HOST} healthcheck: <<: *x-healthcheck test: curl --fail http://${SERVICE_BACKUP}/health/ || exit 1 onlyoffice-clear-events: <<: [*x-service-base, *x-profiles-backend] image: "${REPO}/${DOCKER_IMAGE_PREFIX}-clear-events:${DOCKER_TAG}" container_name: ${CLEAR_EVENTS_HOST} healthcheck: <<: *x-healthcheck test: curl --fail http://${SERVICE_CLEAR_EVENTS}/health/ || exit 1 onlyoffice-files: <<: [*x-service-base, *x-profiles-backend] image: "${REPO}/${DOCKER_IMAGE_PREFIX}-files:${DOCKER_TAG}" container_name: ${FILES_HOST} healthcheck: <<: *x-healthcheck test: curl --fail http://${SERVICE_FILES}/health/ || exit 1 onlyoffice-files-services: <<: [*x-service-base, *x-profiles-backend] image: "${REPO}/${DOCKER_IMAGE_PREFIX}-files-services:${DOCKER_TAG}" container_name: ${FILES_SERVICES_HOST} healthcheck: <<: *x-healthcheck test: curl --fail http://${SERVICE_FILES_SERVICES}/health/ || exit 1 onlyoffice-people-server: <<: [*x-service-base, *x-profiles-backend] image: "${REPO}/${DOCKER_IMAGE_PREFIX}-people-server:${DOCKER_TAG}" container_name: ${PEOPLE_SERVER_HOST} healthcheck: <<: *x-healthcheck test: curl --fail http://${SERVICE_PEOPLE_SERVER}/health/ || exit 1 onlyoffice-socket: <<: [*x-service-base, *x-profiles-backend] image: "${REPO}/${DOCKER_IMAGE_PREFIX}-socket:${DOCKER_TAG}" container_name: ${SOCKET_HOST} expose: - ${SERVICE_PORT} onlyoffice-studio-notify: <<: [*x-service-base, *x-profiles-backend] image: "${REPO}/${DOCKER_IMAGE_PREFIX}-studio-notify:${DOCKER_TAG}" container_name: ${STUDIO_NOTIFY_HOST} healthcheck: <<: *x-healthcheck test: curl --fail http://${SERVICE_STUDIO_NOTIFY}/health/ || exit 1 onlyoffice-api: <<: [*x-service-base, *x-profiles-backend] image: "${REPO}/${DOCKER_IMAGE_PREFIX}-api:${DOCKER_TAG}" container_name: ${API_HOST} healthcheck: <<: *x-healthcheck test: curl --fail http://${SERVICE_API}/health/ || exit 1 onlyoffice-api-system: <<: [*x-service-base, *x-profiles-backend] image: "${REPO}/${DOCKER_IMAGE_PREFIX}-api-system:${DOCKER_TAG}" container_name: ${API_SYSTEM_HOST} healthcheck: <<: *x-healthcheck test: curl --fail http://${SERVICE_API_SYSTEM}/health/ || exit 1 onlyoffice-studio: <<: [*x-service-base, *x-profiles-backend] image: "${REPO}/${DOCKER_IMAGE_PREFIX}-studio:${DOCKER_TAG}" container_name: ${STUDIO_HOST} healthcheck: <<: *x-healthcheck test: curl --fail http://${SERVICE_STUDIO}/health/ || exit 1 onlyoffice-ssoauth: <<: [*x-service-base, *x-profiles-backend] image: "${REPO}/${DOCKER_IMAGE_PREFIX}-ssoauth:${DOCKER_TAG}" container_name: ${SSOAUTH_HOST} expose: - ${SERVICE_PORT} - "9834" onlyoffice-doceditor: <<: [*x-service-base, *x-profiles-frontend] image: "${REPO}/${DOCKER_IMAGE_PREFIX}-doceditor:${DOCKER_TAG}" container_name: ${DOCEDITOR_HOST} restart: always expose: - "5013" onlyoffice-login: <<: [*x-service-base, *x-profiles-frontend] image: "${REPO}/${DOCKER_IMAGE_PREFIX}-login:${DOCKER_TAG}" container_name: ${LOGIN_HOST} restart: always expose: - "5011" onlyoffice-router: image: "${REPO}/${DOCKER_IMAGE_PREFIX}-router:${DOCKER_TAG}" profiles: ["prod", "backend", frontend] container_name: ${ROUTER_HOST} restart: always healthcheck: <<: *x-healthcheck test: nginx -t || exit 1 expose: - "8081" - "8099" - "8092" - "80" ports: - 80:8092 environment: - SERVICE_BACKUP=${SERVICE_BACKUP} - SERVICE_FILES=${SERVICE_FILES} - SERVICE_FILES_SERVICES=${SERVICE_FILES_SERVICES} - SERVICE_CLEAR_EVENTS=${SERVICE_CLEAR_EVENTS} - SERVICE_NOTIFY=${SERVICE_NOTIFY} - SERVICE_PEOPLE_SERVER=${SERVICE_PEOPLE_SERVER} - SERVICE_SOCKET=${SERVICE_SOCKET} - SERVICE_STUDIO_NOTIFY=${SERVICE_STUDIO_NOTIFY} - SERVICE_API=${SERVICE_API} - SERVICE_API_SYSTEM=${SERVICE_API_SYSTEM} - SERVICE_STUDIO=${SERVICE_STUDIO} - SERVICE_SSOAUTH=${SERVICE_SSOAUTH} - SERVICE_TELEGRAMREPORTS=${SERVICE_TELEGRAMREPORTS} - SERVICE_DOCEDITOR=${SERVICE_DOCEDITOR} - SERVICE_LOGIN=${SERVICE_LOGIN} - SERVICE_HELTHCHECKS=${SERVICE_HELTHCHECKS} - DOCUMENT_CONTAINER_NAME=${DOCUMENT_CONTAINER_NAME} - DOCUMENT_SERVER_URL_EXTERNAL=${DOCUMENT_SERVER_URL_EXTERNAL} - REDIS_CONTAINER_NAME=${REDIS_CONTAINER_NAME} - REDIS_HOST=${REDIS_HOST} - REDIS_PORT=${REDIS_PORT} - SERVICE_PORT=${SERVICE_PORT} volumes: - router_log:/var/log/nginx onlyoffice-migration-runner: image: "${REPO}/${DOCKER_IMAGE_PREFIX}-migration-runner:${DOCKER_TAG}" profiles: ["migration-runner", "backend-local"] container_name: ${MIGRATION_RUNNER_HOST} restart: "no" environment: MYSQL_CONTAINER_NAME: ${MYSQL_CONTAINER_NAME} MYSQL_HOST: ${MYSQL_HOST} MYSQL_DATABASE: ${MYSQL_DATABASE} MYSQL_USER: ${MYSQL_USER} MYSQL_PASSWORD: ${MYSQL_PASSWORD} MIGRATION_TYPE: ${MIGRATION_TYPE} networks: default: name: ${NETWORK_NAME} external: true volumes: os_data: router_log: app_data: files_data: people_data: