Appearance
Инструкция по установке с использованием 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