Что подготовить

Производственная установка рассчитана на одну Linux amd64 VM с systemd и IPv4. Нужны root-доступ, curl, Python 3, iptables и стандартные Linux-утилиты. Node.js и Docker daemon на сервер устанавливать не требуется: приложение и ядра работают через k3s/containerd.

Выделите ресурсы для k3s, приложения и каждой одновременно работающей комнаты. Число подключённых студентов само по себе не определяет нагрузку: важны код, память, файлы и число активных ядер. См. планирование ресурсов.

Проверьте комплект выпуска

Получите артефакты через доверенный канал. Проверьте контрольные суммы, распакуйте архив инструментов и работайте из его каталога. Манифест фиксирует исходный коммит, реальные digest образов приложения, брокера и окружений, точную версию k3s и хеши инструментов.

sha256sum -c SHA256SUMS
tar -xzf colloq-deploy.tar.gz
python3 scripts/release.py validate --release release.json
sudo scripts/cluster.sh validate --release release.json
scripts/cluster.sh render --release release.json > resources.json

Контрольная сумма обнаруживает повреждение, но не доказывает доверие к отправителю. Инструменты должны соответствовать выбранному выпуску: локально изменённые или несовпадающие файлы установщик отвергает.

Подготовьте конфигурацию

Создайте приватный файл instance.env. Полный перечень переменных есть в .env.example исходного комплекта. Минимальный пример для собственного домена:

PUBLIC_URL=https://seminar.example.edu
INSTITUTION=Учебная лаборатория
ADMIN_EMAIL=teacher@example.edu
TZ=Europe/Moscow
OPEN_SEMINAR_CREATION=false
MAX_UPLOAD_MB=50
MAX_SESSION_MB=1024

Значения читаются как данные, не как shell-скрипт. В приложение попадает только разрешённый список переменных. Runtime-ключи генерирует и монтирует установщик; не вставляйте их в ячейки или браузер.

Установите и проверьте

sudo scripts/cluster.sh install --release release.json \
  --env-file /path/to/instance.env
sudo scripts/cluster.sh status
sudo scripts/cluster.sh smoke

Если образы приватные, добавьте к install аргумент --registry-config /path/to/pull-only-config.json. Используйте отдельные учётные данные только для загрузки нужных образов, а не основной ключ GitHub или Vast.

Установщик отвергает чужую существующую установку k3s, несовпадающую версию k3s и старый colloq.service. Миграцию старого сервера проводите отдельно: сохраните исходную машину, выгрузите данные подходящими ей инструментами и восстановите совместимую копию в подготовленную установку.

Откройте внешний адрес

Приложение доступно host-прокси по 127.0.0.1:30080. Настройте HTTPS через Caddy или relay. Порты Kubernetes, брокера и Jupyter остаются приватными.

После публикации адреса откройте /admin, завершите настройку владельца и выполните первое занятие. Проверяйте ссылку с устройства студента.

Проверка перед реальной группой

  • Создайте две комнаты и выполните в каждой Python-код; убедитесь в разделении переменных, файлов и Jupyter-токенов.
  • Проверьте фактическую сетевую политику, в том числе обращения комнаты к локальному узлу.
  • Перезапустите приложение и брокер и проверьте восстановление подключения к ядрам.
  • Пройдите цикл резервной копии и восстановления, затем обновление и откат выбранных выпусков.
  • Для GPU выполните реальную CUDA-операцию; HTTP health недостаточно.

Локальные тесты проверяют код и отказы, но не доказывают корректность конкретной VM. Ограничения защиты описаны в модели изоляции.