Развёртывание

Дистрибутив, установка, обновление и пользователи

Полный цикл работы с self-hosted установкой Narvelium LMS: от запроса сборки до ежедневной эксплуатации. Инструкция рассчитана на администратора с базовым опытом Linux и Docker.

1. Получение дистрибутива

Поставка контролируемая: публичных ссылок на сборки нет. Каждый дистрибутив версионирован и сопровождается контрольной суммой SHA-256.

1

Запросите сборку

Напишите на info@narvelium.ru с темой «Narvelium Starter RC». Укажите организацию и контактное лицо. В ответ вы получите ссылку на архив дистрибутива (OCI/Docker Compose) и файл контрольной суммы.

2

Проверьте целостность

После скачивания сверьте контрольную сумму:

sha256sum narvelium-lms-1.0.0.tar.gz
сверьте значение с высланным SHA-256 — они должны совпасть

Несовпадение означает повреждение или подмену файла — не устанавливайте такой дистрибутив.

3

Распакуйте

tar -xzf narvelium-lms-1.0.0.tar.gz
cd narvelium-lms-1.0.0

2. Требования к серверу

ПараметрМинимумРекомендуется
ОСLinux x86_64 (Debian/Ubuntu)Ubuntu 22.04 LTS / 24.04 LTS
CPU2 vCPU4 vCPU
RAM4 ГБ8 ГБ
Диск30 ГБ60 ГБ SSD
ПОDocker 24+ и Docker Compose v2Последняя стабильная версия Docker
СетьПорты 80/TCP и 443/TCP извне+ исходящий доступ к license.narvelium.ru (443)
ДоменA-запись вашего домена → IP сервера (например lms.company.ru)

Важно про лицензию: лицензия привязывается к идентификатору оборудования (hardware ID), который установщик рассчитывает из параметров сервера. Перенос на другой сервер выполняется через процедуру переноса (см. «Восстановление и перенос»), а не повторной регистрацией.

3. Установка

1

Создайте конфигурацию окружения

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

cp .env.example .env
nano .env

Обязательные поля: POSTGRES_PASSWORD (пароль БД), SECRET_KEY (ключ сессий, минимум 32 символа — сгенерируйте командой openssl rand -base64 48), SUPERADMIN_EMAIL (ваш адрес администратора), SMTP_* (сервер почты для одноразовых кодов входа), APP_ENVIRONMENT=production, LICENSE_HMAC_SECRET (значение из письма при получении дистрибутива).

2

Запустите стек

docker compose up -d

Поднимаются три контейнера: база данных (postgres), backend (FastAPI) и nginx. Первый старт занимает 1–3 минуты.

3

Проверьте запуск

curl http://localhost:8090/api/health

Ожидаемый ответ: {"status":"ok"}.

4

Настройте обратный прокси и HTTPS

Поставьте перед порталом nginx/Caddy/Apache с TLS-сертификатом (например, Let's Encrypt). Проксируйте домен на http://127.0.0.1:8090. Рекомендуемые заголовки: HSTS, X-Content-Type-Options, X-Frame-Options DENY.

Ограничение CSP: если включаете Content-Security-Policy, обязательно разрешите script-src 'unsafe-inline' — интерфейс портала использует встроенные скрипты. Строгий CSP без этого сделает страницы входа неработающими.

5

Откройте портал и создайте администратора

Перейдите на https://ваш-домен/. Нажмите на логин три раза (или откройте /lms/#admin) — откроется скрытая форма входа администратора по email. Введите SUPERADMIN_EMAIL из конфигурации: одноразовый код придёт на почту.

4. Активация лицензии

После установки сервер работает в 30-дневном пробном режиме. Для полноценного использования активируйте лицензию:

1

Узнайте hardware ID вашей установки

docker exec -it narvelium-backend python3 -c "from app.license_manager import LicenseManager; print(LicenseManager(secret_key='x', server_url=None, cache_path='/tmp/x', offline_days=7).get_hardware_id())"

Команда выведет строку вида 82a06031… — это идентификатор вашей установки.

2

Зарегистрируйтесь на сервере лицензий

Отправьте запрос (из окна с доступом в интернет или с самого сервера):

curl -X POST https://license.narvelium.ru/api/license/register \
  -H "Content-Type: application/json" \
  -d '{"organization":"ООО «Ваша компания»",
        "contact_email":"admin@ваша-компания.ру",
        "contact_name":"Иванов Иван",
        "hardware_id":"ВАШ_HARDWARE_ID",
        "accept_terms":true}'

В ответе придёт license_key — подписанная лицензия Starter: 12 месяцев, до 5 активных пользователей, 1 установка. Повторный запрос с тем же hardware ID вернёт тот же ключ (дубли не создаются).

3

Пропишите ключ в установку

nano .env  # добавьте строку:
LICENSE_KEY=eyJjcm...<ваш ключ>

Затем перезапустите backend: docker compose restart backend-anon (имя контейнера может отличаться — см. docker ps). Проверьте статус:

curl -s http://localhost:8090/api/license/status

Ожидается {"status":"active","type":"single"}. Лицензия проверяется на сервере Narvelium при активации и затем работает офлайн; при доступе в сеть статус периодически подтверждается.

Продление Starter бесплатное: за 2–4 недели до окончания срока напишите на info@narvelium.ru — ключ будет перевыпущен на новый срок. Коммерческие редакции (Business/Enterprise): условия по запросу.

5. Создание пользователей

Портал поддерживает три способа входа. Администратор управляет пользователями в разделе Администрирование → Пользователи.

СпособКак работаетКогда использовать
Вход по имениСотрудник вводит ФИО и подразделение из списка, подтверждает согласие на обработку ПД. Учётная запись создаётся автоматически.Быстрый старт, обучение без паролей (например, для рабочих станций общего доступа)
Доменный вход (AD)Логин и пароль из Active Directory организации. Проверяются через LDAP/LDAPS на вашем контроллере домена (настраивается администратором: AD_LDAPS_HOST и другие переменные в .env).Корпоративная эксплуатация, единые учётные данные
Email-код (OTP)Одноразовый код на почту. Основной способ для администраторов.Администраторы, удалённый доступ
Демо-доступКнопка «Демо-доступ» или вкладка «Демо» (логин/пароль выдаются отдельно). Только чтение, данные не сохраняются.Показ портала руководству, аудиторам, грантовым комиссиям

Роли: пользователь (прохождение курсов), администратор (управление пользователями, курсами, отчётами). Права назначаются в карточке пользователя. Лимит активных пользователей контролируется лицензией (Starter — 5).

Импорт из AD: при включённой интеграции пользователи домена создаются автоматически при первом входе; подразделение подтягивается из AD. Групповая рассылка курсов настраивается на подразделение или AD-группу.

6. Курсы и обучение

1

Создайте курс и версию

Администрирование → Курсы → «Новый курс». Затем в курсе создайте версию (например, 1.0) — весь контент живёт внутри версий.

2

Добавьте модули

В версии создайте модули (темы). Типы материалов: HTML/JS-страницы, PDF, DOCX, презентации, видео, внешние ссылки, текстовые инструкции. Каждый модуль включается или отключается флагом.

3

Добавьте тест или ознакомление

В модуль добавляется итоговый тест (одиночный/множественный выбор, проходной балл, число попыток, перемешивание) и/или требование ознакомления (подтверждение работником).

4

Назначьте курс

Курс назначается конкретному пользователю, подразделению, AD-группе или всем. Настраиваются дедлайн, периодичность (раз / ежегодно / свой интервал) и обязательность. Назначения видны работникам в разделе «Мои курсы».

5

Контроль

Отчёты: прогресс по сотрудникам, результаты тестов, просроченные назначения, подтверждения ознакомления. Экспорт в CSV/DOCX.

7. Обновление

Обновление выполняется новым дистрибутивом той же схемы — данные и лицензия сохраняются.

1

Сделайте резервную копию

docker exec narvelium-postgres pg_dump -U lms_anon lms_anon > backup-$(date +%F).sql
cp .env backup-env-$(date +%F).txt  # храните вне сервера
2

Распакуйте новый дистрибутив рядом со старым

tar -xzf narvelium-lms-1.1.0.tar.gz -C /opt/

Скопируйте в новый каталог ваш .env и каталог данных (data/, если есть).

3

Остановите старое, запустите новое

cd narvelium-lms-1.0.0 && docker compose down
cd ../narvelium-lms-1.1.0 && docker compose up -d

Миграции схемы выполняются автоматически при старте backend.

4

Проверьте

curl http://localhost:8090/api/health
curl -s http://localhost:8090/api/license/status

Убедитесь, что пользователи входят и курсы открываются. Старый каталог можно удалить через неделю уверенной работы.

8. Резервное копирование

Минимальный набор: дамп БД + каталог с .env и загруженными файлами. Рекомендуем ежедневный дамп с хранением 30 дней и копией вне сервера.

#!/bin/bash  # /etc/cron.daily/narvelium-backup
docker exec narvelium-postgres pg_dump -U lms_anon lms_anon | gzip > /backups/db-$(date +\%F).sql.gz
tar -czf /backups/files-$(date +\%F).tar.gz /opt/narvelium/data /opt/narvelium/.env
find /backups -mtime +30 -delete

Полное восстановление: поднимите чистую установку той же версии, восстановите дамп (psql -U lms_anon lms_anon < backup.sql), верните .env. Активация сохранится, если сервер тот же; при замене оборудования — запросите перенос лицензии.

9. Типовые проблемы

СимптомПричина и решение
Код на почту не приходитНе настроен SMTP в .env (SMTP_HOST/PORT/FROM) либо письма попадают в спам. Проверьте docker logs narvelium-backend | grep -i mail.
Страница входа «не реагирует» на кликиОбратный прокси добавил строгий CSP без script-src 'unsafe-inline'. Исправьте заголовок в конфигурации прокси.
Статус лицензии degraded/offlineНет доступа к license.narvelium.ru. Установка продолжает работать из офлайн-кэша (срок — license_offline_days). Проверьте исходящие соединения на 443.
«Hardware ID mismatch»Установка перенесена на другой сервер или изменены диски/железо. Запросите перенос лицензии: info@narvelium.ru.
Достигнут лимит пользователейЛицензия Starter — 5 активных пользователей. Деактивируйте неактивных (Администрирование → Пользователи) или запросите коммерческую лицензию.
Контейнер не стартует после пересозданияПроверьте .env: обязательны POSTGRES_PASSWORD, SECRET_KEY (32+ символов), LICENSE_HMAC_SECRET. Логи: docker logs narvelium-backend.

Остались вопросы — напишите нам. Актуальная версия этой инструкции: docs.narvelium.ru (всегда соответствует последнему релизу).