Skip to content

Инструкция по установке с использованием Docker compose

Системные требования

  • Архитектура: amd64(x86_64), aarch64(arm64)
  • Процессор: с тактовой частотой 2 ГГц или лучше
  • Оперативная память: не менее 3 Гб
  • Свободное место на жестком диске: не менее 40 Гб

Установка

В системе предварительно должны быть установлены Docker, Docker Compose v2 и OpenSSL.

Пример минимальной конфигурации для oak-1.11.0 через Docker Compose может выглядеть следующим образом. В этом релизе базовый NextBox включает сервис Spaces.

Создайте отдельную директорию установки и поместите в нее файлы generate-env.sh, docker-compose.yaml и default.conf.

Генерация секретов

Сохраните следующий скрипт как generate-env.sh:

bash
#!/usr/bin/env bash
set -Eeuo pipefail

env_file="${1:-.env}"

if [[ -e "$env_file" ]]; then
  echo "Ошибка: $env_file уже существует; существующие секреты не изменены." >&2
  exit 1
fi

if ! command -v openssl >/dev/null 2>&1; then
  echo "Ошибка: для генерации секретов требуется OpenSSL." >&2
  exit 1
fi

umask 077
tmp_file=$(mktemp "${env_file}.tmp.XXXXXX")
trap 'rm -f "$tmp_file"' EXIT

secret() {
  openssl rand -hex 32
}

cat >"$tmp_file" <<EOF
POSTGRES_PASSWORD=nextbox
SERVICE_TOKEN=$(secret)
JWT_SIGN_KEY=$(secret)
ONLYOFFICE_JWT_SECRET=$(secret)
LIVEKIT_API_KEY=livekit-prod
LIVEKIT_API_SECRET=$(secret)
EOF

mv -- "$tmp_file" "$env_file"
trap - EXIT
echo "Создан $env_file (права доступа: только владелец)."

Запустите его из директории установки:

bash
chmod +x generate-env.sh
./generate-env.sh

Скрипт создаст .env с согласованными параметрами для основной установки и расширений:

  • POSTGRES_PASSWORD — пароль пользователя PostgreSQL, установленный в nextbox;
  • SERVICE_TOKEN — общий токен для межсервисных запросов NextBox;
  • JWT_SIGN_KEY — ключ подписи и проверки пользовательских JWT.
  • ONLYOFFICE_JWT_SECRET — отдельный ключ служебных JWT между интеграцией OnlyOffice и Document Server.
  • LIVEKIT_API_KEY и LIVEKIT_API_SECRET — ключ и секрет LiveKit для расширения Callbox; если Callbox не используется, эти значения останутся невостребованными.

WARNING

Не публикуйте .env, не добавляйте его в систему контроля версий и включите файл в резервное копирование. После запуска NextBox не генерируйте его заново: смена JWT_SIGN_KEY завершит действующие пользовательские сессии, а смена пароля PostgreSQL без одновременного обновления хранилища нарушит подключение сервисов. При смене ONLYOFFICE_JWT_SECRET одновременно пересоздайте интеграцию OnlyOffice и Document Server.

docker-compose.yaml
yaml
x-http-healthcheck: &http-healthcheck
  interval: 10s
  timeout: 5s
  retries: 10
  start_period: 30s

services:
  nginx:
    image: nginx:alpine
    restart: always
    ports:
      - "8095:80"
    networks:
      - nextbox
    volumes:
      - ./default.conf:/etc/nginx/conf.d/default.conf
    healthcheck:
      <<: *http-healthcheck
      test: ["CMD-SHELL", "wget -q -O /dev/null http://127.0.0.1/"]

  gateway:
    image: nextbox-docker.ptnl.moscow/nextbox/gateway:oak-1.11.0
    restart: always
    networks:
      - nextbox
    environment:
      - POTENTIAL_GATEWAY_DATABASE_DSN=postgres://nextbox:${POSTGRES_PASSWORD}@postgresql:5432/gateway
      - POTENTIAL_GATEWAY_DATABASE_ADMIN_DSN=postgres://nextbox:${POSTGRES_PASSWORD}@postgresql:5432/postgres
      - POTENTIAL_GATEWAY_RABBIT_MQ_HOST=rabbitmq
      - POTENTIAL_GATEWAY_RABBIT_MQ_USER=guest
      - POTENTIAL_GATEWAY_RABBIT_MQ_PASSWORD=guest
      - POTENTIAL_GATEWAY_RABBIT_MQ_VHOST=
      - POTENTIAL_GATEWAY_DISCOVERY_URL=http://discovery:6011
      - POTENTIAL_GATEWAY_SERVICE_BACK_URL=http://gateway:6001
      - POTENTIAL_GATEWAY_SERVICE_TOKEN=${SERVICE_TOKEN}
      - POTENTIAL_GATEWAY_TOKENS_SIGN_KEY=${JWT_SIGN_KEY}
      - POTENTIAL_GATEWAY_REDIS_HOST=redis
    healthcheck:
      <<: *http-healthcheck
      test:
        - CMD-SHELL
        - >-
          wget -q -O /dev/null
          --header="Authorization: Service $$POTENTIAL_GATEWAY_SERVICE_TOKEN"
          http://127.0.0.1:6001/api/health-check

  file_storage_router:
    image: nextbox-docker.ptnl.moscow/nextbox/file_storage_router:oak-1.11.0
    restart: always
    networks:
      - nextbox
    environment:
      - POTENTIAL_FILE_STORAGE_ROUTER_SERVICE_BACK_URL=http://file_storage_router:6004
      - POTENTIAL_FILE_STORAGE_ROUTER_DISCOVERY_URL=http://discovery:6011
      - POTENTIAL_FILE_STORAGE_ROUTER_RABBIT_MQ_HOST=rabbitmq
      - POTENTIAL_FILE_STORAGE_ROUTER_RABBIT_MQ_USER=guest
      - POTENTIAL_FILE_STORAGE_ROUTER_RABBIT_MQ_PASSWORD=guest
      - POTENTIAL_FILE_STORAGE_ROUTER_RABBIT_MQ_VHOST=
      - POTENTIAL_FILE_STORAGE_ROUTER_FILE_SYSTEM_TMP=/usr/share/nextbox/tmp
      - POTENTIAL_FILE_STORAGE_ROUTER_SERVICE_TOKEN=${SERVICE_TOKEN}
      - POTENTIAL_FILE_STORAGE_ROUTER_TOKENS_SIGN_KEY=${JWT_SIGN_KEY}
      - POTENTIAL_FILE_STORAGE_ROUTER_REDIS_HOST=redis
    healthcheck:
      <<: *http-healthcheck
      test:
        - CMD-SHELL
        - >-
          wget -q -O /dev/null
          --header="Authorization: Service $$POTENTIAL_FILE_STORAGE_ROUTER_SERVICE_TOKEN"
          http://127.0.0.1:6004/api/health-check

  file_storage:
    image: nextbox-docker.ptnl.moscow/nextbox/file_storage:oak-1.11.0
    restart: always
    networks:
      - nextbox
    environment:
      - POTENTIAL_FILE_STORAGE_DATABASE_DSN=postgres://nextbox:${POSTGRES_PASSWORD}@postgresql:5432/file_storage
      - POTENTIAL_FILE_STORAGE_DATABASE_ADMIN_DSN=postgres://nextbox:${POSTGRES_PASSWORD}@postgresql:5432/postgres
      - POTENTIAL_FILE_STORAGE_SERVICE_BACK_URL=http://file_storage:6004
      - POTENTIAL_FILE_STORAGE_DISCOVERY_URL=http://discovery:6011
      - POTENTIAL_FILE_STORAGE_RABBIT_MQ_HOST=rabbitmq
      - POTENTIAL_FILE_STORAGE_RABBIT_MQ_USER=guest
      - POTENTIAL_FILE_STORAGE_RABBIT_MQ_PASSWORD=guest
      - POTENTIAL_FILE_STORAGE_RABBIT_MQ_VHOST=
      - POTENTIAL_FILE_STORAGE_SERVICE_TOKEN=${SERVICE_TOKEN}
      - POTENTIAL_FILE_STORAGE_TOKENS_SIGN_KEY=${JWT_SIGN_KEY}
      - POTENTIAL_FILE_STORAGE_REDIS_HOST=redis
    healthcheck:
      <<: *http-healthcheck
      test:
        - CMD-SHELL
        - >-
          wget -q -O /dev/null
          --header="Authorization: Service $$POTENTIAL_FILE_STORAGE_SERVICE_TOKEN"
          http://127.0.0.1:6004/api/health-check

  file_storage_worker:
    image: nextbox-docker.ptnl.moscow/nextbox/file_storage_worker:oak-1.11.0
    restart: always
    networks:
      - nextbox
    volumes:
      - storage_data:/var/nextbox/storage_worker/1
    environment:
      - POTENTIAL_FILE_STORAGE_WORKER_SERVICE_BACK_URL=http://file_storage_worker:6004
      - POTENTIAL_FILE_STORAGE_WORKER_DISCOVERY_URL=http://discovery:6011
      - POTENTIAL_FILE_STORAGE_WORKER_RABBIT_MQ_HOST=rabbitmq
      - POTENTIAL_FILE_STORAGE_WORKER_RABBIT_MQ_USER=guest
      - POTENTIAL_FILE_STORAGE_WORKER_RABBIT_MQ_PASSWORD=guest
      - POTENTIAL_FILE_STORAGE_WORKER_RABBIT_MQ_VHOST=
      - POTENTIAL_FILE_STORAGE_WORKER_SERVICE_TOKEN=${SERVICE_TOKEN}
      - POTENTIAL_FILE_STORAGE_WORKER_TOKENS_SIGN_KEY=${JWT_SIGN_KEY}
    healthcheck:
      <<: *http-healthcheck
      test:
        - CMD-SHELL
        - >-
          wget -q -O /dev/null
          --header="Authorization: Service $$POTENTIAL_FILE_STORAGE_WORKER_SERVICE_TOKEN"
          http://127.0.0.1:6004/api/health-check

  auth:
    image: nextbox-docker.ptnl.moscow/nextbox/auth:oak-1.11.0
    restart: always
    networks:
      - nextbox
    environment:
      - POTENTIAL_AUTH_DATABASE_DSN=postgres://nextbox:${POSTGRES_PASSWORD}@postgresql:5432/auth
      - POTENTIAL_AUTH_DATABASE_ADMIN_DSN=postgres://nextbox:${POSTGRES_PASSWORD}@postgresql:5432/postgres
      - POTENTIAL_AUTH_SERVICE_BACK_URL=http://auth:6006
      - POTENTIAL_AUTH_DISCOVERY_URL=http://discovery:6011
      - POTENTIAL_AUTH_RABBIT_MQ_HOST=rabbitmq
      - POTENTIAL_AUTH_RABBIT_MQ_USER=guest
      - POTENTIAL_AUTH_RABBIT_MQ_PASSWORD=guest
      - POTENTIAL_AUTH_RABBIT_MQ_VHOST=
      - POTENTIAL_AUTH_SERVICE_TOKEN=${SERVICE_TOKEN}
      - POTENTIAL_AUTH_TOKENS_SIGN_KEY=${JWT_SIGN_KEY}
      - POTENTIAL_AUTH_REDIS_HOST=redis
    healthcheck:
      <<: *http-healthcheck
      test:
        - CMD-SHELL
        - >-
          wget -q -O /dev/null
          --header="Authorization: Service $$POTENTIAL_AUTH_SERVICE_TOKEN"
          http://127.0.0.1:6006/api/health-check
    volumes:
      - nextbox_data:/var/nextbox

  fca:
    image: nextbox-docker.ptnl.moscow/nextbox/fca:oak-1.11.0
    restart: always
    networks:
      - nextbox
    environment:
      - POTENTIAL_FCA_SERVICE_BACK_URL=http://fca:6007
      - POTENTIAL_FCA_DISCOVERY_URL=http://discovery:6011
      - POTENTIAL_FCA_RABBIT_MQ_HOST=rabbitmq
      - POTENTIAL_FCA_RABBIT_MQ_USER=guest
      - POTENTIAL_FCA_RABBIT_MQ_PASSWORD=guest
      - POTENTIAL_FCA_RABBIT_MQ_VHOST=
      - POTENTIAL_FCA_SERVICE_TOKEN=${SERVICE_TOKEN}
      - POTENTIAL_FCA_TOKENS_SIGN_KEY=${JWT_SIGN_KEY}
      - POTENTIAL_FCA_REDIS_HOST=redis
      - POTENTIAL_FCA_EXTERNAL_PROXY_URL=https://external-proxy.next-box.ru/
    healthcheck:
      <<: *http-healthcheck
      test:
        - CMD-SHELL
        - >-
          wget -q -O /dev/null
          --header="Authorization: Service $$POTENTIAL_FCA_SERVICE_TOKEN"
          http://127.0.0.1:6007/api/health-check

  static_storage:
    image: nextbox-docker.ptnl.moscow/nextbox/static_storage:oak-1.11.0
    restart: always
    volumes:
      - static_storage_data:/var/nextbox
    networks:
      - nextbox
    environment:
      - POTENTIAL_STATIC_STORAGE_SERVICE_BACK_URL=http://static_storage:6010
      - POTENTIAL_STATIC_STORAGE_DISCOVERY_URL=http://discovery:6011
      - POTENTIAL_STATIC_STORAGE_RABBIT_MQ_HOST=rabbitmq
      - POTENTIAL_STATIC_STORAGE_RABBIT_MQ_USER=guest
      - POTENTIAL_STATIC_STORAGE_RABBIT_MQ_PASSWORD=guest
      - POTENTIAL_STATIC_STORAGE_RABBIT_MQ_VHOST=
      - POTENTIAL_STATIC_STORAGE_DATABASE_DSN=postgres://nextbox:${POSTGRES_PASSWORD}@postgresql:5432/static_storage
      - POTENTIAL_STATIC_STORAGE_DATABASE_ADMIN_DSN=postgres://nextbox:${POSTGRES_PASSWORD}@postgresql:5432/postgres
      - POTENTIAL_STATIC_STORAGE_SERVICE_TOKEN=${SERVICE_TOKEN}
      - POTENTIAL_STATIC_STORAGE_TOKENS_SIGN_KEY=${JWT_SIGN_KEY}
      - POTENTIAL_STATIC_STORAGE_FILE_SYSTEM_EXTENSIONS_PATH=/var/nextbox/extensions
      - POTENTIAL_STATIC_STORAGE_FILE_SYSTEM_TMP_PATH=/var/nextbox/static_tmp
      - POTENTIAL_STATIC_STORAGE_FILE_SYSTEM_FILES_PATH=/var/nextbox/static_files
    healthcheck:
      <<: *http-healthcheck
      test:
        - CMD-SHELL
        - >-
          wget -q -O /dev/null
          --header="Authorization: Service $$POTENTIAL_STATIC_STORAGE_SERVICE_TOKEN"
          http://127.0.0.1:6010/api/health-check

  connections:
    image: nextbox-docker.ptnl.moscow/nextbox/connections:oak-1.11.0
    restart: always
    networks:
      - nextbox
    environment:
      - POTENTIAL_CONNECTIONS_SERVICE_BACK_URL=http://connections:6009
      - POTENTIAL_CONNECTIONS_DISCOVERY_URL=http://discovery:6011
      - POTENTIAL_CONNECTIONS_RABBIT_MQ_HOST=rabbitmq
      - POTENTIAL_CONNECTIONS_RABBIT_MQ_USER=guest
      - POTENTIAL_CONNECTIONS_RABBIT_MQ_PASSWORD=guest
      - POTENTIAL_CONNECTIONS_RABBIT_MQ_VHOST=
      - POTENTIAL_CONNECTIONS_DATABASE_DSN=postgres://nextbox:${POSTGRES_PASSWORD}@postgresql:5432/connections
      - POTENTIAL_CONNECTIONS_DATABASE_ADMIN_DSN=postgres://nextbox:${POSTGRES_PASSWORD}@postgresql:5432/postgres
      - POTENTIAL_CONNECTIONS_SERVICE_TOKEN=${SERVICE_TOKEN}
      - POTENTIAL_CONNECTIONS_TOKENS_SIGN_KEY=${JWT_SIGN_KEY}
      - POTENTIAL_CONNECTIONS_REDIS_HOST=redis
    healthcheck:
      <<: *http-healthcheck
      test:
        - CMD-SHELL
        - >-
          wget -q -O /dev/null
          --header="Authorization: Service $$POTENTIAL_CONNECTIONS_SERVICE_TOKEN"
          http://127.0.0.1:6009/api/health-check

  logstash:
    image: nextbox-docker.ptnl.moscow/nextbox/logstash:oak-1.11.0
    restart: always
    networks:
      - nextbox
    environment:
      - POTENTIAL_LOGSTASH_SERVICE_BACK_URL=http://logstash:6008
      - POTENTIAL_LOGSTASH_DISCOVERY_URL=http://discovery:6011
      - POTENTIAL_LOGSTASH_RABBIT_MQ_HOST=rabbitmq
      - POTENTIAL_LOGSTASH_RABBIT_MQ_USER=guest
      - POTENTIAL_LOGSTASH_RABBIT_MQ_PASSWORD=guest
      - POTENTIAL_LOGSTASH_RABBIT_MQ_VHOST=
      - POTENTIAL_LOGSTASH_DATABASE_DSN=postgres://nextbox:${POSTGRES_PASSWORD}@postgresql:5432/logstash
      - POTENTIAL_LOGSTASH_DATABASE_ADMIN_DSN=postgres://nextbox:${POSTGRES_PASSWORD}@postgresql:5432/postgres
      - POTENTIAL_LOGSTASH_SERVICE_TOKEN=${SERVICE_TOKEN}
      - POTENTIAL_LOGSTASH_TOKENS_SIGN_KEY=${JWT_SIGN_KEY}
      - POTENTIAL_LOGSTASH_REPOSITORY_PATH=/var/nextbox/logstash/
    healthcheck:
      <<: *http-healthcheck
      test:
        - CMD-SHELL
        - >-
          wget -q -O /dev/null
          --header="Authorization: Service $$POTENTIAL_LOGSTASH_SERVICE_TOKEN"
          http://127.0.0.1:6008/api/health-check
    volumes:
      - logstash_data:/var/nextbox/logstash/

  discovery:
    image: nextbox-docker.ptnl.moscow/nextbox/discovery:oak-1.11.0
    restart: always
    networks:
      - nextbox
    environment:
      - POTENTIAL_DISCOVERY_RABBIT_MQ_HOST=rabbitmq
      - POTENTIAL_DISCOVERY_RABBIT_MQ_USER=guest
      - POTENTIAL_DISCOVERY_RABBIT_MQ_PASSWORD=guest
      - POTENTIAL_DISCOVERY_RABBIT_MQ_VHOST=
      - POTENTIAL_DISCOVERY_DATABASE_DSN=postgres://nextbox:${POSTGRES_PASSWORD}@postgresql:5432/discovery
      - POTENTIAL_DISCOVERY_DATABASE_ADMIN_DSN=postgres://nextbox:${POSTGRES_PASSWORD}@postgresql:5432/postgres
      - POTENTIAL_DISCOVERY_SERVICE_BACK_URL=http://discovery:6011
      - POTENTIAL_DISCOVERY_DISCOVERY_URL=http://discovery:6011
      - POTENTIAL_DISCOVERY_SERVICE_TOKEN=${SERVICE_TOKEN}
      - POTENTIAL_DISCOVERY_TOKENS_SIGN_KEY=${JWT_SIGN_KEY}
    healthcheck:
      <<: *http-healthcheck
      test:
        - CMD-SHELL
        - >-
          wget -q -O /dev/null
          --header="Authorization: Service $$POTENTIAL_DISCOVERY_SERVICE_TOKEN"
          http://127.0.0.1:6011/api/health-check

  spaces:
    image: nextbox-docker.ptnl.moscow/nextbox/spaces:oak-1.11.0
    restart: always
    depends_on:
      postgresql:
        condition: service_healthy
      rabbitmq:
        condition: service_healthy
      discovery:
        condition: service_healthy
    networks:
      - nextbox
    volumes:
      - nextbox_data:/var/nextbox
    environment:
      - POTENTIAL_SPACES_LOG_LVL=3
      - POTENTIAL_SPACES_LOG_MODE=prod
      - POTENTIAL_SPACES_HTTP_HOST=0.0.0.0
      - POTENTIAL_SPACES_HTTP_PORT=8081
      - POTENTIAL_SPACES_RABBIT_MQ_HOST=rabbitmq
      - POTENTIAL_SPACES_RABBIT_MQ_USER=guest
      - POTENTIAL_SPACES_RABBIT_MQ_PASSWORD=guest
      - POTENTIAL_SPACES_RABBIT_MQ_VHOST=
      - POTENTIAL_SPACES_DISCOVERY_URL=http://discovery:6011
      - POTENTIAL_SPACES_SERVICE_BACK_URL=http://spaces:8081
      - POTENTIAL_SPACES_SERVICE_TOKEN=${SERVICE_TOKEN}
      - POTENTIAL_SPACES_TOKENS_SIGN_KEY=${JWT_SIGN_KEY}
      - POTENTIAL_SPACES_DATABASE_DSN=postgres://nextbox:${POSTGRES_PASSWORD}@postgresql:5432/spaces
      - POTENTIAL_SPACES_DATABASE_ADMIN_DSN=postgres://nextbox:${POSTGRES_PASSWORD}@postgresql:5432/postgres
      - POTENTIAL_SPACES_REDIS_HOST=redis

  webdav:
    image: nextbox-docker.ptnl.moscow/nextbox/webdav:oak-1.11.0
    restart: always
    networks:
      - nextbox
    environment:
      - POTENTIAL_WEBDAV_RABBIT_MQ_HOST=rabbitmq
      - POTENTIAL_WEBDAV_RABBIT_MQ_USER=guest
      - POTENTIAL_WEBDAV_RABBIT_MQ_PASSWORD=guest
      - POTENTIAL_WEBDAV_RABBIT_MQ_VHOST=
      - POTENTIAL_WEBDAV_DISCOVERY_URL=http://discovery:6011
      - POTENTIAL_WEBDAV_SERVICE_BACK_URL=http://webdav:6004
      - POTENTIAL_WEBDAV_SERVICE_TOKEN=${SERVICE_TOKEN}
      - POTENTIAL_WEBDAV_TOKENS_SIGN_KEY=${JWT_SIGN_KEY}
    healthcheck:
      <<: *http-healthcheck
      test:
        - CMD-SHELL
        - >-
          wget -q -O /dev/null
          --header="Authorization: Service $$POTENTIAL_WEBDAV_SERVICE_TOKEN"
          http://127.0.0.1:6004/api/health-check

  pusher:
    image: nextbox-docker.ptnl.moscow/nextbox/pusher:oak-1.11.0
    restart: always
    networks:
      - nextbox
    environment:
      - POTENTIAL_PUSHER_RABBIT_MQ_HOST=rabbitmq
      - POTENTIAL_PUSHER_RABBIT_MQ_USER=guest
      - POTENTIAL_PUSHER_RABBIT_MQ_PASSWORD=guest
      - POTENTIAL_PUSHER_RABBIT_MQ_VHOST=
      - POTENTIAL_PUSHER_DISCOVERY_URL=http://discovery:6011
      - POTENTIAL_PUSHER_SERVICE_BACK_URL=http://pusher:6004
      - POTENTIAL_PUSHER_SERVICE_TOKEN=${SERVICE_TOKEN}
      - POTENTIAL_PUSHER_TOKENS_SIGN_KEY=${JWT_SIGN_KEY}
    healthcheck:
      <<: *http-healthcheck
      test:
        - CMD-SHELL
        - >-
          wget -q -O /dev/null
          --header="Authorization: Service $$POTENTIAL_PUSHER_SERVICE_TOKEN"
          http://127.0.0.1:6004/api/health-check

  notifications:
    image: nextbox-docker.ptnl.moscow/nextbox/notifications:oak-1.11.0
    restart: always
    networks:
      - nextbox
    environment:
      - POTENTIAL_NOTIFICATIONS_RABBIT_MQ_HOST=rabbitmq
      - POTENTIAL_NOTIFICATIONS_RABBIT_MQ_USER=guest
      - POTENTIAL_NOTIFICATIONS_RABBIT_MQ_PASSWORD=guest
      - POTENTIAL_NOTIFICATIONS_RABBIT_MQ_VHOST=
      - POTENTIAL_NOTIFICATIONS_SERVICE_BACK_URL=http://notifications:6004
      - POTENTIAL_NOTIFICATIONS_DISCOVERY_URL=http://discovery:6011
      - POTENTIAL_NOTIFICATIONS_SERVICE_TOKEN=${SERVICE_TOKEN}
      - POTENTIAL_NOTIFICATIONS_TOKENS_SIGN_KEY=${JWT_SIGN_KEY}
      - POTENTIAL_NOTIFICATIONS_DATABASE_DSN=postgres://nextbox:${POSTGRES_PASSWORD}@postgresql:5432/notifications
      - POTENTIAL_NOTIFICATIONS_DATABASE_ADMIN_DSN=postgres://nextbox:${POSTGRES_PASSWORD}@postgresql:5432/postgres
      - POTENTIAL_NOTIFICATIONS_REDIS_HOST=redis
    healthcheck:
      <<: *http-healthcheck
      test:
        - CMD-SHELL
        - >-
          wget -q -O /dev/null
          --header="Authorization: Service $$POTENTIAL_NOTIFICATIONS_SERVICE_TOKEN"
          http://127.0.0.1:6004/api/health-check
    volumes:
      - nextbox_data:/var/nextbox

  proxy:
    image: nextbox-docker.ptnl.moscow/nextbox/proxy:oak-1.11.0
    restart: always
    networks:
      - nextbox
    environment:
      - POTENTIAL_PROXY_SERVICE_BACK_URL=http://proxy:6004
      - POTENTIAL_PROXY_RABBIT_MQ_HOST=rabbitmq
      - POTENTIAL_PROXY_RABBIT_MQ_USER=guest
      - POTENTIAL_PROXY_RABBIT_MQ_PASSWORD=guest
      - POTENTIAL_PROXY_RABBIT_MQ_VHOST=
      - POTENTIAL_PROXY_DISCOVERY_URL=http://discovery:6011
      - POTENTIAL_PROXY_SERVICE_TOKEN=${SERVICE_TOKEN}
      - POTENTIAL_PROXY_TOKENS_SIGN_KEY=${JWT_SIGN_KEY}
    healthcheck:
      <<: *http-healthcheck
      test:
        - CMD-SHELL
        - >-
          wget -q -O /dev/null
          --header="Authorization: Service $$POTENTIAL_PROXY_SERVICE_TOKEN"
          http://127.0.0.1:6004/api/health-check

  license:
    image: nextbox-docker.ptnl.moscow/nextbox/license:oak-1.11.0
    restart: always
    networks:
      - nextbox
    environment:
      - POTENTIAL_LICENSE_RABBIT_MQ_HOST=rabbitmq
      - POTENTIAL_LICENSE_RABBIT_MQ_USER=guest
      - POTENTIAL_LICENSE_RABBIT_MQ_PASSWORD=guest
      - POTENTIAL_LICENSE_RABBIT_MQ_VHOST=
      - POTENTIAL_LICENSE_DISCOVERY_URL=http://discovery:6011
      - POTENTIAL_LICENSE_SERVICE_BACK_URL=http://license:6004
      - POTENTIAL_LICENSE_SERVICE_TOKEN=${SERVICE_TOKEN}
      - POTENTIAL_LICENSE_TOKENS_SIGN_KEY=${JWT_SIGN_KEY}
    healthcheck:
      <<: *http-healthcheck
      test:
        - CMD-SHELL
        - >-
          wget -q -O /dev/null
          --header="Authorization: Service $$POTENTIAL_LICENSE_SERVICE_TOKEN"
          http://127.0.0.1:6004/api/health-check
    volumes:
      - nextbox_data:/var/nextbox

  links:
    image: nextbox-docker.ptnl.moscow/nextbox/links:oak-1.11.0
    restart: always
    networks:
      - nextbox
    environment:
      - POTENTIAL_LINKS_DATABASE_DSN=postgres://nextbox:${POSTGRES_PASSWORD}@postgresql:5432/links
      - POTENTIAL_LINKS_DATABASE_ADMIN_DSN=postgres://nextbox:${POSTGRES_PASSWORD}@postgresql:5432/postgres
      - POTENTIAL_LINKS_SERVICE_BACK_URL=http://links:6037
      - POTENTIAL_LINKS_DISCOVERY_URL=http://discovery:6011
      - POTENTIAL_LINKS_RABBIT_MQ_HOST=rabbitmq
      - POTENTIAL_LINKS_RABBIT_MQ_USER=guest
      - POTENTIAL_LINKS_RABBIT_MQ_PASSWORD=guest
      - POTENTIAL_LINKS_RABBIT_MQ_VHOST=
      - POTENTIAL_LINKS_SERVICE_TOKEN=${SERVICE_TOKEN}
      - POTENTIAL_LINKS_TOKENS_SIGN_KEY=${JWT_SIGN_KEY}
    healthcheck:
      <<: *http-healthcheck
      test:
        - CMD-SHELL
        - >-
          wget -q -O /dev/null
          --header="Authorization: Service $$POTENTIAL_LINKS_SERVICE_TOKEN"
          http://127.0.0.1:6037/api/health-check
        
  limitations:
    image: nextbox-docker.ptnl.moscow/nextbox/limitations:oak-1.11.0
    restart: always
    networks:
      - nextbox
    environment:
      - POTENTIAL_LIMITATIONS_DATABASE_DSN=postgres://nextbox:${POSTGRES_PASSWORD}@postgresql:5432/limitations
      - POTENTIAL_LIMITATIONS_DATABASE_ADMIN_DSN=postgres://nextbox:${POSTGRES_PASSWORD}@postgresql:5432/postgres
      - POTENTIAL_LIMITATIONS_SERVICE_BACK_URL=http://limitations:6037
      - POTENTIAL_LIMITATIONS_DISCOVERY_URL=http://discovery:6011
      - POTENTIAL_LIMITATIONS_RABBIT_MQ_HOST=rabbitmq
      - POTENTIAL_LIMITATIONS_RABBIT_MQ_USER=guest
      - POTENTIAL_LIMITATIONS_RABBIT_MQ_PASSWORD=guest
      - POTENTIAL_LIMITATIONS_RABBIT_MQ_VHOST=
      - POTENTIAL_LIMITATIONS_SERVICE_TOKEN=${SERVICE_TOKEN}
      - POTENTIAL_LIMITATIONS_TOKENS_SIGN_KEY=${JWT_SIGN_KEY}
    healthcheck:
      <<: *http-healthcheck
      test:
        - CMD-SHELL
        - >-
          wget -q -O /dev/null
          --header="Authorization: Service $$POTENTIAL_LIMITATIONS_SERVICE_TOKEN"
          http://127.0.0.1:6037/api/health-check

  frontend:
    image: nextbox-docker.ptnl.moscow/nextbox/frontend:oak-1.11.0
    restart: always
    networks:
      - nextbox
    healthcheck:
      <<: *http-healthcheck
      test: ["CMD-SHELL", "wget -q -O /dev/null http://127.0.0.1/"]

  postgresql:
    image: postgres:16
    restart: always
    environment:
      POSTGRES_USER: nextbox
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      PGDATA: /var/lib/postgresql/data/pgdata
    volumes:
      - postgresql_data:/var/lib/postgresql/data/pgdata
    networks:
      - nextbox
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U nextbox"]
      interval: 10s
      timeout: 5s
      retries: 10

  rabbitmq:
    image: rabbitmq:3.7-management
    restart: always
    environment:
      - RABBITMQ_DEFAULT_USER=guest
      - RABBITMQ_DEFAULT_PASS=guest
    networks:
      - nextbox
    volumes:
      - rabbitmq_data:/var/lib/rabbitmq/
    healthcheck:
      test: ["CMD", "rabbitmq-diagnostics", "ping"]
      interval: 30s
      timeout: 10s
      retries: 5

  redis:
    image: redis:6-alpine
    restart: always
    networks:
      - nextbox
    volumes:
      - redis_data:/data
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 10s
      timeout: 5s
      retries: 5

networks:
  nextbox:
volumes:
  nextbox_data:
  redis_data:
  rabbitmq_data:
  postgresql_data:
  storage_data:
  logstash_data:
  static_storage_data:
default.conf
nginx
map $http_x_forwarded_proto $the_scheme {
     default $http_x_forwarded_proto;
     "" $scheme;
}

map $http_x_forwarded_host $the_host {
    default $http_x_forwarded_host;
    "" $http_host;
}

map $http_upgrade $proxy_connection {
  default upgrade;
  "" close;
}

server {
    listen 80 default_server;
    server_name  _;
    client_max_body_size 8000M;

    gzip on;
    gzip_comp_level 9;
    gzip_vary on;
    gzip_proxied any;
    gzip_min_length 1000;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml application/javascript;
    gzip_disable "msie6";

    location /api {
        proxy_pass http://gateway:6005/api;

        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $proxy_connection;
        proxy_set_header Host $host;
        proxy_request_buffering off; 
    }
    
    location /l/ {
        proxy_pass http://gateway:6005/l/;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Host $host;
        proxy_set_header Connection $proxy_connection;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_request_buffering off;
   }

    location / {
        proxy_pass http://frontend;

        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $proxy_connection;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_request_buffering off; 
    }
}
bash
docker compose config --quiet
docker compose pull
docker compose up -d --wait

Если все сработало без ошибок, то web-интерфейс Nextbox будет доступен по адресу http://localhost:8095