К содержимому

Возможности

Парк серверов

Подключили сервер — он в общем списке. Панель не стучится на ваши машины: агент сам держит исходящее соединение и исполняет только подписанные рецепты.

Серверы · 6 5 на связи
web-01

31.129.96.118

сайты

web-02

91.200.14.7

сайты

store-01

45.91.8.240

хранилище

mail-01

185.72.4.19

почта

web-03

31.129.96.202

готовится

old-02

78.24.41.6

отключён

Входящих портов для панели ни на одной из них не открыто.

Шаг первый

Машина заходит в парк одной из двух дорог

Дорога одна и та же по сути: на сервере выполняется строка установки с одноразовым токеном. Разница только в том, кто её выполняет — вы или панель.

дорога 1

Строку выполняете вы

Панель выпускает строку установки, вы вставляете её в SSH-сессию. Токен показывается ровно один раз — в базе панели лежит только его хэш, и копия базы не даёт подключить чужой сервер.

curl -fsSL https://панель/install.sh | \
  sh -s -- --token=a7f1…e204
дорога 2

Строку выполняет панель

Вы даёте адрес, порт и пароль root. Панель заходит по SSH один раз и выполняет ровно ту же строку. Второго способа установки не существует — всё остальное до неё только проверки, чтобы отказ назывался человеческими словами, а не кодом возврата curl.

После установки SSH больше не нужен:
агент ходит к панели сам, наружу.

Отпечаток ключа сверяет человек

Подпись доказывает, что заявитель владеет ключом, но не то, что это та самая машина: токен могли подсмотреть. Поэтому панель показывает отпечаток ключа хоста и ждёт вашего «да». Пока отпечаток не подтверждён, сервер на связи и факты о нём идут, а операции на него не уходят.

При входе по паролю ключ хоста закреплён: задание войдёт только если сервер предъявил тот же ключ, что вы сверяли. Подменить машину между сверкой и входом нельзя.

Ключ хоста

SHA256:7xQ2bK9mA1pLs0vUhTnZ4cRe8WgYd3Jf

ssh-ed25519

совпадает не сверено

Как панель достаёт машину

Агент звонит панели сам

Агент написан на Go и держит исходящее соединение с шиной панели. Панель никуда не стучится, порт для неё открывать не нужно, и в файрволе нет правила, которое могло бы это оборвать: исходящее не фильтруется вовсе.

Входящих портов для панели — ноль

Агент исполняет только подписанные рецепты

Единственная тема без входа — регистрация по одноразовому токену

Всё, что не разрешено файрволом, закрыто

Правка файрвола

Правило, которое отрезало бы вас, откатится само

Консоли провайдера у панели нет, поэтому прежнее состояние возвращает не агент, а таймер systemd, взведённый до правки. Агент только снимает его, когда убедился, что связь жива.

  1. 0 с

    Взведён таймер отката

    Скрипт возврата прежних правил уже лежит на машине.

  2. 0 с

    Правила проверены без применения

    nft не принял — отказ до того, как что-то изменилось.

  3. до 45 с

    Агент подтверждает связь с шиной

    Подтвердилось — таймер снят, правила сохранены на перезагрузку.

  4. 60 с

    Не подтвердилось — откат

    Сервер вернулся к прежним правилам без вашего участия.

Правила, после которых порт SSH открыт не всем, уходят только с вашим подтверждением. Тот же порт проверяет и агент — по тому, что sshd слушает на самом деле.

Подготовка

Чистая машина становится рабочей за один проход

nginx, PHP и база ставятся подготовкой, а не по одной. Что стоит на машине — отвечает сама машина, а не таблица панели.

Несколько версий PHP рядом

У каждого сайта своя версия, на одной машине их сколько нужно. Панель умеет ветки от 5.2 до 8.5: от 5.6 и выше — обычными пакетами, совсем старые — в отдельном контейнере на сайт, потому что древний репозиторий на всю машину ломает apt соседям.

PHP 5.6 PHP 7.0 PHP 7.4 PHP 8.1 PHP 8.2 PHP 8.3 PHP 8.4 PHP 8.5

Отказ вместо тишины

«На PHP 7.4 работают сайты: shop.ru, lk.shop.ru. Сначала переведите их на другую версию.» Сайты считаются по всей машине, а не по вашей организации: со срезом соседский сайт остался бы невидимым, и панель снесла бы интерпретатор из-под него.

Подготовка

nginx 1.24.0 PHP 8.3 MySQL 8.0 PostgreSQL 16

Роли машины

Сайты, хранилище, почта — набор, а не выбор одного. Небольшому парку хватает машины, которая держит и то и другое.

сайтыхранилищепочта

Ubuntu 22.04 и 24.04 LTS

Других семейств и версий нет. Уклад контейнеров аккаунтов требует 24.04 или новее.

Доступ root

Нужен один раз — на установку агента. Дальше панель его не держит.

x86-64 или ARM64

Обе разрядности, по факту, который машина сообщает о себе сама.

Расхождения

«На сервере иначе» — это строка, а не догадка

Кто-то правил конфиг через SSH, служба выключена, файл не тот. Панель сверяет описание с машиной и показывает расхождение словами: хотели так — на деле так. Ни агент, ни панель не чинят это сами и ничего не затирают: решаете вы.

web-01 · shop.ru

ручной блок nginx

хотели: client_max_body_size 8m

на деле: client_max_body_size 512m

web-01 · PHP 8.3

версия сайта

хотели: 8.3

на деле: 8.2

web-02 · сайт

описания нет

хотели: —

на деле: test.local в nginx

store-01 · служба

состояние

хотели: Работает

на деле: Остановлена

Строка закрывается сама, когда факт догнал описание. Иначе список рос бы вечно и перестал бы что-либо значить.