Обновления
У каждого сервиса своя версия (vMAJOR.MINOR.PATCH), а выпускаются они одинаково. Инстанс хранит релизы в
хранилище релизов (/var/lib/xvii/releases, раздаётся на https://xvii.network/releases/), и xvii-node
ставит их оттуда.
Как проходит обновление
При обновлении сервиса xvii-node:
- сверяет бинарник релиза с его
SHA256SUMS;
- переставляет ссылку
current сервиса на новую версию и перезапускает его (миграции базы выполняются при
старте);
- до 30 секунд ждёт ответа
/healthz;
- если ответа нет — возвращает предыдущую версию, перезапускает её и сообщает об ошибке.
Неизменившиеся юниты и настройки не трогаются, так что обновление перезапускает только обновляемый сервис.
Обновление из home
home → Сервисы показывает установленную версию каждого сервиса и самую новую в хранилище. Нажмите
Обновить, подтвердите и следите, как состояние меняется с «обновляется» на «работает». Если новая версия
не стала здоровой, home покажет ошибку, а сервис вернётся на старую версию.
В карточке сервиса также перечислены все версии в хранилище: поставьте более старую тем же способом, чтобы
откатиться вручную.
Обновление из консоли
xvii-node status # установленные и желаемые версии, здоровье
xvii-node install pages # самая новая версия в хранилище
xvii-node install pages v2.3.1 # конкретная версия (в том числе для отката)
xvii-node logs pages 100
Как релизы попадают в хранилище
Есть три пути:
Релизы xvii публикуются на https://xvii.network/releases/ (index.json перечисляет версии всех сервисов,
новые первыми). На control plane скачайте нужный в папку и импортируйте:
svc=pages v=v2.3.1 arch=$(dpkg --print-architecture)
d=$(mktemp -d) && cd "$d"
base=https://xvii.network/releases/$svc/$v
curl -fsSO "$base/manifest.json" && curl -fsSO "$base/SHA256SUMS"
curl -fsSO "$base/${svc}d-linux-$arch"
xvii-node import "$d" "$v"
import проверяет контрольные суммы и отказывается от релиза, который им не соответствует.
Архив релиза (.tar.gz с manifest.json, SHA256SUMS и бинарниками) может загрузить в home
суперпользователь или токен со scope deploy:
curl -fsS -X POST -H "Authorization: Bearer $XVII_TOKEN" \
--data-binary @pages-v2.3.1.tar.gz \
"https://xvii.network/api/v1/admin/releases?version=v2.3.1"
Версия загружается один раз; повторная загрузка отвечает 409. Именно так делает CI, если вы собираете свои
релизы.
Каждый репозиторий сервиса собирает релиз через make (панель, затем бинарники Linux для amd64 и arm64,
затем dist/manifest.json). make BRAND=acme DISPLAY="Acme Cloud" собирает white-label релиз, см.
Внешний вид и брендинг.
Хранилище держит пять самых новых версий каждого сервиса плюс ту, что установлена или желаема.
Что проверить после обновления
- home → Сервисы: сервис работает и здоров на новой версии.
curl -fsS https://<service>.xvii.network/api/v1/health
- Панель сервиса открывается и показывает ваши данные.
- Для apps и domains: ноды и серверы имён по-прежнему выходят на связь (
xvii apps nodes, domains → Аккаунты).
Прочитайте заметки к релизу, прежде чем перескакивать через несколько минорных версий сервиса с данными.
Миграции применяются по порядку при старте; откат ниже версии, чьи миграции уже прошли, не поддерживается,
поэтому делайте бэкап перед крупными обновлениями и откатывайтесь восстановлением, а не установкой
старого бинарника.
Агент ноды
- Ноды обновляются сами: control plane указывает в их желаемом состоянии самую новую версию
xvii-node из
хранилища; агент со старой версией скачивает её, проверяет контрольную сумму и перезапускается. Нагрузки
продолжают работать; relay-трафик ненадолго замирает на время перезапуска. По возможности не обновляйте
агента во время критичных задач.
- Собственный агент control plane обновляется вручную: положите новый бинарник поверх
/usr/local/bin/xvii-node и выполните systemctl restart xvii-node. Сервисы при этом продолжают работать.
- Серверы имён и почтовые edge используют тот же бинарник; обновляйте их так же.
CLI
Сборки CLI лежат в хранилище в /releases/cli/. Люди обновляются через xvii update; CLI проверяет раз в день
и сообщает о новой версии. Чтобы опубликовать новый CLI на инстансе, соберите его в репозитории cli и
загрузите в /var/lib/xvii/releases/cli (make publish VERSION=vX.Y.Z делает и то и другое).
Простой
Обновление перезапускает один сервис. Его панель и API недоступны несколько секунд, пока он стартует; сайты
на pages, приложения на нодах, DNS на серверах имён и остальные сервисы продолжают работать. Входы через id
приостанавливаются на время перезапуска id; уже открытые сессии продолжают работать.