Ноды
Нода — любой Linux-сервер с xvii-node в роли агента. Она запускает контейнеры приложений через Docker,
держит их сети и тома, обслуживает или проксирует их трафик и собирает образы из исходников. Агент сам
подключается к control plane (wss://apps.xvii.network/agent), так что ноде не нужен входящий порт для
управления и она может стоять за NAT (как нода только для воркеров).
Подключите ноду
В apps → Ноды → Добавить ноду создайте одноразовый токен (действует час), затем на сервере от root:
curl -fsSL https://apps.xvii.network/join.sh | sh -s -- TOKEN relay fra1
Скрипт скачивает xvii-node из хранилища релизов, проверяет контрольную сумму, обменивает токен на
собственные учётные данные ноды и запускает агента как сервис. Аргументы: токен, режим (relay или edge) и
имя. Если Docker не установлен, он ставится (на загруженном сервере сначала прочитайте, что делает скрипт).
Нода каждые 15 секунд сообщает CPU, память, диск и нагрузки; node.online и node.offline уходят в notify.
xvii apps nodes
Edge или relay
| Режим |
Трафик |
Нужно |
| relay |
Посетители приходят в Caddy на control plane, который пересылает по HTTPS на прокси агента ноды (порт 7443, сертификат закреплён) |
порт 7443 доступен только с control plane |
| edge |
Нода сама обслуживает имена своих приложений на 80 и 443 со своими сертификатами |
свободные порты 80 и 443 на ноде |
Нода, у которой 80 и 443 заняты другим ПО, остаётся relay. На edge-нодах имена, подключённые к их
приложениям, указывают на ноду, пока она обслуживает трафик; <app>.apps.xvii.network в любом случае идёт через
relay. Прежде чем направлять DNS на ноду, проверьте её состояние edge: само переключение режима не доказывает,
что порты работают.
Relay-трафик идёт через control plane, так что его пропускная способность считается там.
Кто может пользоваться нодой
- Нода команды запускает только приложения этой команды.
- Нода инстанса (добавлена суперпользователем или повышена им из ноды команды) общая: доступ только
владельцу, всем командам или перечисленным, у каждой — квота памяти, CPU, диска и числа нагрузок.
Память никогда не обещается дважды: сумма квот и выставленных лимитов не превышает доступную память ноды
(ёмкость минус системный резерв). Лимиты CPU — это потолок, а не зарезервированные ядра. Оставляйте запас для
системы, сборок и всего остального на сервере.
Размещение
Приложения одного окружения проекта работают на одной ноде, чтобы видеть друг друга и свои базы через сеть
команды на этой ноде. Новое окружение попадает на ноду с наибольшим объёмом свободной памяти среди доступных
команде; приложения с томами или локально собранными образами остаются на своей ноде. Если нода заполнена
или недоступна, деплой об этом скажет.
Изоляция
У каждой команды своя сеть Docker на ноде. Контейнеры не публикуют порты хоста, работают с
no-new-privileges, лимитом pids и урезанными capabilities. Контейнеры и сети, созданные не агентом (без меток
xvii.*), не трогаются, так что нода может продолжать запускать то, что работало на ней раньше.
Перенять существующие проекты сервера
Существующие compose-проекты ноды можно перенять на месте: apps читает контейнеры, тома, порты и обратный
прокси перед ними, затем по каждому проекту делает переключение, запуская новые контейнеры на тех же
томах. До подтверждения переключение обратимо.
Перенос проекта между нодами
xvii apps move fra1 --project shop --env production
См. Приложения → Переезд на другую ноду.
Удаление ноды
Сначала перенесите или удалите её окружения. Затем удалите её в apps → Ноды и на сервере выполните:
xvii-node leave
systemctl disable --now xvii-node
leave забывает учётные данные ноды. Контейнеры останавливаются apps до удаления; тома удалённых приложений
агент удаляет, когда сообщит, что их больше нет.
Кэш сборок
Сборки оставляют кэш BuildKit на ноде. Удаляйте только кэш, владельца которого знаете; никогда не запускайте
docker system prune --volumes на ноде ради уборки: он удалит и тома баз данных.