Appearance
Инструкция по установке с использованием Docker
В системе предварительно должны быть установлены Docker и Docker Compose.
Установка
Создайте отдельную директорию установки. Все команды выполняйте из неё.
Сохраните скрипт как generate-env.sh
generate-env.sh
bash
#!/usr/bin/env bash
set -euo pipefail
umask 077
if [[ -e .env ]]; then
echo ".env уже существует"
exit 1
fi
command -v openssl >/dev/null
{
printf '%s\n' 'CORE_IMAGE=nextbox-docker.ptnl.moscow/nextbox/core:cypress-1.12'
printf '%s\n' 'FRONTEND_IMAGE=nextbox-docker.ptnl.moscow/nextbox/frontend:cypress-1.12'
printf '%s\n' 'NEXTBOX_URL=http://localhost:8095'
printf '%s\n' 'POSTGRES_PASSWORD=nextbox' 'RABBITMQ_USER=guest' 'RABBITMQ_PASSWORD=guest' 'RABBITMQ_VHOST=/'
printf 'SERVICE_TOKEN=%s\n' "$(openssl rand -hex 32)"
printf 'JWT_SIGN_KEY=%s\n' "$(openssl rand -hex 32)"
printf 'CONNECTIONS_SECURITY_KEY=%s\n' "$(openssl rand -hex 16)"
printf 'ONLYOFFICE_JWT_SECRET=%s\n' "$(openssl rand -hex 32)"
printf '%s\n' 'ONLYOFFICE_DOCUMENT_KEY_PREFIX=local'
} >.envСоздайте .env
bash
bash generate-env.shВ .env уже указаны образы Core и frontend с тегом cypress-1.12. В NEXTBOX_URL укажите адрес сервера.
Создайте файлы docker-compose.yaml и default.conf
docker-compose.yaml
yaml
services:
nginx:
image: nginx:alpine
restart: always
depends_on:
core:
condition: service_healthy
frontend:
condition: service_healthy
ports:
- "8095:80"
volumes:
- ./default.conf:/etc/nginx/conf.d/default.conf:ro
networks: [nextbox]
healthcheck:
test: [CMD-SHELL, "wget -q -O /dev/null http://127.0.0.1/"]
interval: 10s
timeout: 5s
retries: 10
core:
image: ${CORE_IMAGE:?Укажите образ Core 1.12}
command: [run, --config, /app/config.yml]
restart: always
stop_grace_period: 40s
depends_on:
postgresql:
condition: service_healthy
rabbitmq:
condition: service_healthy
redis:
condition: service_healthy
networks: [nextbox]
volumes:
- nextbox_data:/var/nextbox
- storage_data:/var/nextbox/storage_worker/1
- static_storage_data:/var/nextbox-static
- logstash_data:/var/nextbox/logstash
environment:
POTENTIAL_CORE_HTTP_ADDRESS: 0.0.0.0:6005
POTENTIAL_CORE_SERVICE_BACK_URL: http://core:6005
POTENTIAL_CORE_SERVICE_FRONT_URL: ${NEXTBOX_URL:?Укажите адрес Nextbox}
POTENTIAL_CORE_DATABASE_ADMIN_DSN: postgres://nextbox:${POSTGRES_PASSWORD:?Укажите пароль PostgreSQL}@postgresql:5432/postgres?sslmode=disable
POTENTIAL_CORE_AUTH_SERVICE_TOKEN: ${SERVICE_TOKEN:?Укажите service token}
POTENTIAL_CORE_AUTH_JWT_SIGN_KEY: ${JWT_SIGN_KEY:?Укажите JWT key}
POTENTIAL_CORE_RABBIT_MQ_HOST: rabbitmq
POTENTIAL_CORE_RABBIT_MQ_USER: ${RABBITMQ_USER:-guest}
POTENTIAL_CORE_RABBIT_MQ_PASSWORD: ${RABBITMQ_PASSWORD:-guest}
POTENTIAL_CORE_RABBIT_MQ_VHOST: ${RABBITMQ_VHOST:-/}
POTENTIAL_CORE_REDIS_HOST: redis
POTENTIAL_CONNECTIONS_SECURITY_KEY: ${CONNECTIONS_SECURITY_KEY:?Укажите ключ Connections}
POTENTIAL_STATIC_STORAGE_SETTINGS_PATH: /var/nextbox-static/static_storage/settings.json
POTENTIAL_STATIC_STORAGE_FILE_SYSTEM_EXTENSIONS_PATH: /var/nextbox-static/extensions
POTENTIAL_STATIC_STORAGE_FILE_SYSTEM_FILES_PATH: /var/nextbox-static/static_files
POTENTIAL_STATIC_STORAGE_FILE_SYSTEM_TMP_PATH: /var/nextbox-static/static_tmp
POTENTIAL_ONLYOFFICE_DISCOVERY_ONLYOFFICE_SERVER_URL: http://onlyoffice_server
POTENTIAL_ONLYOFFICE_DISCOVERY_GATEWAY_URL: http://nginx
POTENTIAL_ONLYOFFICE_TOKENS_SERVER_KEY: ${ONLYOFFICE_JWT_SECRET:?Укажите ключ OnlyOffice}
POTENTIAL_ONLYOFFICE_DOCUMENT_KEY_PREFIX: ${ONLYOFFICE_DOCUMENT_KEY_PREFIX:-local}
healthcheck:
test: [CMD, wget, -q, -O, /dev/null, http://127.0.0.1:6005/readyz]
interval: 10s
timeout: 3s
retries: 10
start_period: 125s
frontend:
image: ${FRONTEND_IMAGE:?Укажите совместимый образ frontend}
restart: always
networks: [nextbox]
healthcheck:
test: [CMD-SHELL, "curl -fsS -o /dev/null http://127.0.0.1/"]
interval: 10s
timeout: 5s
retries: 10
postgresql:
image: postgres:16
restart: always
environment:
POSTGRES_USER: nextbox
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?Укажите пароль PostgreSQL}
PGDATA: /var/lib/postgresql/data/pgdata
volumes:
- postgresql_data:/var/lib/postgresql/data/pgdata
networks: [nextbox]
healthcheck:
test: [CMD-SHELL, "pg_isready -U nextbox -d postgres"]
interval: 10s
timeout: 5s
retries: 10
rabbitmq:
image: rabbitmq:3.7-management
restart: always
environment:
RABBITMQ_DEFAULT_USER: ${RABBITMQ_USER:-guest}
RABBITMQ_DEFAULT_PASS: ${RABBITMQ_PASSWORD:-guest}
RABBITMQ_DEFAULT_VHOST: ${RABBITMQ_VHOST:-/}
volumes:
- rabbitmq_data:/var/lib/rabbitmq
networks: [nextbox]
healthcheck:
test: [CMD, rabbitmqctl, status]
interval: 30s
timeout: 10s
retries: 5
redis:
image: redis:6-alpine
restart: always
volumes:
- redis_data:/data
networks: [nextbox]
healthcheck:
test: [CMD, redis-cli, ping]
interval: 10s
timeout: 5s
retries: 5
networks:
nextbox:
volumes:
nextbox_data:
storage_data:
static_storage_data:
logstash_data:
postgresql_data:
rabbitmq_data:
redis_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;
location / {
proxy_pass http://frontend;
proxy_http_version 1.1;
proxy_set_header Host $host;
}
location /api {
proxy_pass http://core:6005/api;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $proxy_connection;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_request_buffering off;
}
location /l/ {
proxy_pass http://core:6005/l/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $proxy_connection;
proxy_set_header Host $host;
proxy_request_buffering off;
}
}Проверьте и запустите конфигурацию
bash
docker compose config --quiet
docker compose pull
docker compose up -d --wait
docker compose psПосле установки зайдите на Nextbox по ссылке: http://localhost:8095.
При первом открытии создайте администратора, указав логин и пароль.
Для работы с офисными документами установите OnlyOffice Docs Server.