1. Получение дистрибутива
Поставка контролируемая: публичных ссылок на сборки нет. Каждый дистрибутив версионирован и сопровождается контрольной суммой SHA-256.
Запросите сборку
Напишите на info@narvelium.ru с темой «Narvelium Starter RC». Укажите организацию и контактное лицо. В ответ вы получите ссылку на архив дистрибутива (OCI/Docker Compose) и файл контрольной суммы.
Проверьте целостность
После скачивания сверьте контрольную сумму:
сверьте значение с высланным SHA-256 — они должны совпасть
Несовпадение означает повреждение или подмену файла — не устанавливайте такой дистрибутив.
Распакуйте
cd narvelium-lms-1.0.0
2. Требования к серверу
| Параметр | Минимум | Рекомендуется |
|---|---|---|
| ОС | Linux x86_64 (Debian/Ubuntu) | Ubuntu 22.04 LTS / 24.04 LTS |
| CPU | 2 vCPU | 4 vCPU |
| RAM | 4 ГБ | 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. Установка
Создайте конфигурацию окружения
Скопируйте шаблон из дистрибутива и заполните значения. Секреты генерируются на вашем сервере и не отправляются в Narvelium:
nano .env
Обязательные поля: POSTGRES_PASSWORD (пароль БД), SECRET_KEY (ключ сессий, минимум 32 символа — сгенерируйте командой openssl rand -base64 48), SUPERADMIN_EMAIL (ваш адрес администратора), SMTP_* (сервер почты для одноразовых кодов входа), APP_ENVIRONMENT=production, LICENSE_HMAC_SECRET (значение из письма при получении дистрибутива).
Запустите стек
Поднимаются три контейнера: база данных (postgres), backend (FastAPI) и nginx. Первый старт занимает 1–3 минуты.
Проверьте запуск
Ожидаемый ответ: {"status":"ok"}.
Настройте обратный прокси и 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 без этого сделает страницы входа неработающими.
Откройте портал и создайте администратора
Перейдите на https://ваш-домен/. Нажмите на логин три раза (или откройте /lms/#admin) — откроется скрытая форма входа администратора по email. Введите SUPERADMIN_EMAIL из конфигурации: одноразовый код придёт на почту.
4. Активация лицензии
После установки сервер работает в 30-дневном пробном режиме. Для полноценного использования активируйте лицензию:
Узнайте hardware ID вашей установки
Команда выведет строку вида 82a06031… — это идентификатор вашей установки.
Зарегистрируйтесь на сервере лицензий
Отправьте запрос (из окна с доступом в интернет или с самого сервера):
-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 вернёт тот же ключ (дубли не создаются).
Пропишите ключ в установку
LICENSE_KEY=eyJjcm...<ваш ключ>
Затем перезапустите backend: docker compose restart backend-anon (имя контейнера может отличаться — см. docker ps). Проверьте статус:
Ожидается {"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.0) — весь контент живёт внутри версий.
Добавьте модули
В версии создайте модули (темы). Типы материалов: HTML/JS-страницы, PDF, DOCX, презентации, видео, внешние ссылки, текстовые инструкции. Каждый модуль включается или отключается флагом.
Добавьте тест или ознакомление
В модуль добавляется итоговый тест (одиночный/множественный выбор, проходной балл, число попыток, перемешивание) и/или требование ознакомления (подтверждение работником).
Назначьте курс
Курс назначается конкретному пользователю, подразделению, AD-группе или всем. Настраиваются дедлайн, периодичность (раз / ежегодно / свой интервал) и обязательность. Назначения видны работникам в разделе «Мои курсы».
Контроль
Отчёты: прогресс по сотрудникам, результаты тестов, просроченные назначения, подтверждения ознакомления. Экспорт в CSV/DOCX.
7. Обновление
Обновление выполняется новым дистрибутивом той же схемы — данные и лицензия сохраняются.
Сделайте резервную копию
cp .env backup-env-$(date +%F).txt # храните вне сервера
Распакуйте новый дистрибутив рядом со старым
Скопируйте в новый каталог ваш .env и каталог данных (data/, если есть).
Остановите старое, запустите новое
cd ../narvelium-lms-1.1.0 && docker compose up -d
Миграции схемы выполняются автоматически при старте backend.
Проверьте
curl -s http://localhost:8090/api/license/status
Убедитесь, что пользователи входят и курсы открываются. Старый каталог можно удалить через неделю уверенной работы.
8. Резервное копирование
Минимальный набор: дамп БД + каталог с .env и загруженными файлами. Рекомендуем ежедневный дамп с хранением 30 дней и копией вне сервера.
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 (всегда соответствует последнему релизу).