Руководство по развертыванию SC Nexus
Данное руководство описывает процесс развертывания SC Nexus на базе Docker и Docker Compose с использованием автоматизированных инсталляционных скриптов.
Требования к целевому серверу Linux
- ОС: Linux (Ubuntu 20.04+, Debian 10+, CentOS 7+)
- Утилиты: Docker Engine 20.10+ и плагин Docker Compose v2.0+
- Ресурсы: 2 CPU, 4 ГБ ОЗУ, 20 ГБ свободного места на диске
Шаг 0: Установка Docker и Docker Compose на сервере Linux
Если на вашем сервере еще не установлены Docker и плагин Docker Compose, выполните следующие команды под пользователем с правами sudo.
Вариант 1: Быстрая автоматическая установка (Рекомендуется)
Вы можете установить Docker с помощью официального скрипта:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.shВариант 2: Пошаговая установка для Ubuntu/Debian
Если вы предпочитаете ручную установку из официального репозитория Docker:
Шаг 1. Обновите индекс пакетов системы и установите необходимые утилиты:
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg lsb-releaseШаг 2. Создайте каталог для ключей репозитория и добавьте официальный GPG-ключ Docker:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpgШаг 3. Подключите официальный репозиторий Docker к вашей системе:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/nullШаг 4. Обновите индекс пакетов и установите Docker Engine, CLI, Containerd и плагин Docker Compose:
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginШаг 5. Проверьте корректность установки утилит:
sudo docker --version
sudo docker compose versionШаг 1: Создание папки для архива и отправка файлов с Windows на Linux
После того как проект собран и упакован на локальном компьютере Windows в релиз-архив sc-nexus-portal.tar.gz, необходимо подготовить директорию на Linux-сервере и перенести туда архив.
Шаг 1. Подключитесь к вашему Linux-серверу по SSH.
Шаг 2. Создайте рабочую директорию для приложения (например, ~/sc-nexus):
mkdir -p ~/sc-nexusШаг 3. Скопируйте архив sc-nexus-portal.tar.gz на сервер в созданную папку (используя SCP, SFTP или любой другой инструмент передачи файлов).
Шаг 2: Распаковка архива на сервере
Шаг 1. Перейдите в рабочую папку и распакуйте архив:
cd ~/sc-nexus
tar -xzf sc-nexus-portal.tar.gzШаг 2.5: Изменение сетевых портов приложения (при конфликтах портов)
По умолчанию SC Nexus настроен на использование стандартных веб-портов на хост-сервере:
- HTTP (без шифрования):
80(внутренний порт контейнера —80) - HTTPS (безопасное соединение):
443(внутренний порт контейнера —443)
[!IMPORTANT]
Если на вашем сервере (виртуальной машине) уже запущены другие веб-службы (например, Nginx, Apache, IIS), использующие порты80или443, возникнет конфликт портов, и контейнеры не смогут запуститься. В этом случае вам необходимо изменить внешние порты (например, на альтернативные8081и8443):
Как устроена структура портов в docker-compose.yml:
Запись портов имеет вид "- <ВнешнийПортХоста>:<ВнутреннийПортКонтейнера>".
- Внешний порт хоста (левая часть до двоеточия) — это порт, по которому вы будете открывать сайт в браузере. Вы можете менять его.
- Внутренний порт контейнера (правая часть после двоеточия) — жестко привязан к настройкам Nginx. Его менять нельзя (
80для HTTP и443для HTTPS).
Таблица соответствия портов для замены:
| Режим доступа | Текущее значение в файле | Значение для стандартных портов | Значение для кастомных портов (пример) |
|---|---|---|---|
| HTTP (Обычный) | - "8081:80" | - "80:80" (Доступ по http://<IP>) | - "8080:80" (Доступ по http://<IP>:8080) |
| HTTPS (Защищенный) | - "8443:443" | - "443:443" (Доступ по https://<IP>) | - "4443:443" (Доступ по https://<IP>:4443) |
Инструкция по редактированию портов:
Шаг 1. Откройте конфигурационный файл docker-compose.yml в текстовом редакторе nano с правами суперпользователя sudo:
sudo nano docker-compose.ymlШаг 2. Найдите секцию frontend: и её подсекцию ports: (ближе к концу файла):
# Найдите этот блок:
frontend:
image: sc-nexus-frontend:latest
...
ports:
- "8081:80"
- "8443:443"Шаг 3. Замените левые части портов на нужные вам. Например, для перевода на стандартные порты 80 и 443 приведите блок к следующему виду:
ports:
- "80:80"
- "443:443"Шаг 4. Сохраните изменения: нажмите Ctrl+O, затем клавишу Enter. Для выхода из редактора нажмите Ctrl+X.
Как зафиксировать только один конкретный IP?
Если на вашем сервере (виртуальной машине) настроено несколько сетевых интерфейсов/IP-адресов, по умолчанию Docker привязывает порты к адресу 0.0.0.0 (то есть портал будет доступен по любому из IP-адресов ВМ).
Если вы хотите зафиксировать доступ к телефонному справочнику только по одному конкретному IP-адресу (например, во внутренней корпоративной подсети 192.168.1.15), укажите этот IP перед внешним портом в секции ports: файла docker-compose.yml:
ports:
- - "80:80"
- - "443:443"
+ - "192.168.1.15:80:80"
+ - "192.168.1.15:443:443"Шаг 3: Запуск скрипта установки install.sh с правами sudo
В архиве поставляется готовый скрипт автоматической установки, который выполнит сборку образов и первоначальную настройку. Для взаимодействия с Docker и изменения файлов конфигурации скрипт должен выполняться от имени суперпользователя.
Шаг 1. Перейдите в рабочую папку приложения (если еще не там):
cd ~/sc-nexusШаг 2. Сделайте скрипт установки исполняемым:
sudo chmod +x install.shШаг 3. Запустите скрипт установки с использованием команды sudo:
sudo ./install.shЧто делает скрипт install.sh автоматически:
- Проверяет наличие установленного Docker и плагина Docker Compose на сервере.
- Проверяет наличие OpenSSL для генерации паролей.
- Если файла
.envещё нет, копирует.env.exampleв.env, генерирует безопасный случайный пароль из 24 символов для базы данных MySQL и автоматически прописывает его в конфигурацию. - Собирает Docker-образы бэкенда и фронтенда, а затем запускает контейнеры в фоновом режиме (
sudo docker compose up -d --build). - Опрашивает бэкенд и дожидается полной готовности к приему трафика.
- Автоматически определяет настроенные порты (дефолтные или кастомные) и выводит в консоль готовые ссылки с нужными портами для подключения, а также стандартные учетные данные администратора.
Шаг 4: Контроль и проверка статуса
Для проверки статуса запущенных контейнеров выполните команду с sudo:
sudo docker compose psВы должны увидеть три работающих контейнера:
sc_nexus_db_prod(health: healthy) — база данных MySQL.sc_nexus_backend_prod— Node.js бэкенд API.sc_nexus_frontend_prod— веб-сервер Nginx.
Для просмотра журналов работы бэкенда (например, при проверке логов синхронизации с Active Directory) выполните:
sudo docker compose logs -f backendШаг 5: Доступ к SC Nexus
- HTTP:
http://<IP_СЕРВЕРА>(илиhttp://<IP_СЕРВЕРА>:<ПОРТ>, если вы изменили внешний порт на кастомный в Шаге 2.5, напримерhttp://<IP_СЕРВЕРА>:8081) - HTTPS:
https://<IP_СЕРВЕРА>(илиhttps://<IP_СЕРВЕРА>:<ПОРТ>, если вы изменили внешний порт на кастомный в Шаге 2.5, напримерhttps://<IP_СЕРВЕРА>:8443; станет доступным после генерации CSR или загрузки валидных SSL-сертификатов во вкладке «Безопасность» панели администратора).
Стандартные учетные данные суперпользователя по умолчанию:
- Логин:
admin - Пароль:
admin
Шаг 5.5: Важное требование по синхронизации времени (NTP)
В системе лицензирования SC Nexus встроены строгие защитные механизмы против обхода лицензий путем изменения системного времени (Time Rollback).
Для стабильной работы портала необходимо убедиться, что на хост-сервере включена и правильно настроена автоматическая синхронизация системного времени по протоколу NTP.
Проверка статуса синхронизации на Ubuntu/Debian:
timedatectl statusУбедитесь, что строка System clock synchronized: имеет значение yes, а NTP service: находится в статусе active.
Настройка и запуск службы синхронизации (systemd-timesyncd):
Если синхронизация отключена, выполните:
# Установка и запуск службы синхронизации
sudo apt-get update && sudo apt-get install -y systemd-timesyncd
sudo systemctl enable --now systemd-timesyncd[!WARNING]
Если системное время на хосте сдвинется назад относительно метки последней проверки в базе данных (более чем на 5 минут), лицензия перейдет в заблокированный статусtampered, и восстановить работу можно будет только путем повторного ввода нового лицензионного ключа.
Шаг 6: Полный сброс и чистая переустановка
Если вам потребуется удалить приложение, полностью стереть все тома баз данных и произвести абсолютно чистую переустановку:
Шаг 1. Сделайте скрипт очистки исполняемым:
sudo chmod +x clean-install.shШаг 2. Запустите очистку с правами суперпользователя:
sudo ./clean-install.shВнимание: это действие полностью удалит базу данных сотрудников без возможности восстановления!