Документация / Cloud-init и образы машин

Cloud-init и образы машин

Два способа пропустить ручную установку: вставить шаблон cloud-init при создании VPS или собрать образ машины, где уже всё установлено.

Cloud-init (по одному серверу за раз)

panel/deploy/cloud-init.yaml — это шаблон user-data. Отредактируйте несколько настроек вверху, вставьте его в поле «user data» вашего провайдера при создании сервера, и панель поднимается, когда сервер завершит загрузку. Прогресс и любые сбои попадают в /var/log/nimbopanel-provision.log.

Не воспринимайте user data как хранилище секретов

Это та часть, которую стоит прочитать дважды. У каждого крупного провайдера user data остаётся доступным изнутри работающего инстанса по HTTP на 169.254.169.254 — и этот адрес достижим любым процессом на машине, включая PHP-скрипт клиента хостинга.

Так что лицензионный ключ, вставленный в user data, читается каждым клиентом, которого вы хостите, если что-то этому не помешает. Шаблон мешает этому в два шага, именно в этом порядке:

  1. он закрывает службу метаданных для всех, кроме root, до того как ключ попадёт на диск;
  2. после того как установщик сохранил ключ в конфигурации, доступной только root, он затирает копию user data на диске.

Если вы предпочли бы не помещать ключ туда вовсе, оставьте поле пустым и введите его из панели позже. Сервер работает без лицензии, пока вы этого не сделаете, — это поддерживаемое состояние.

Образы машин (много серверов из одной сборки)

panel/deploy/packer/nimbopanel.pkr.hcl собирает образ с установленным всем стеком. Именно на это уходят минуты — пакеты, PHP, почта, DNS, база данных — и ничего из этого не отличается между серверами.

Ошибка, из-за которой каждый клон становится одним и тем же сервером

Образ не должен содержать никакой идентичности. Если содержит, каждый сервер, собранный из него, разделяет эту идентичность:

Ошибочно вшито Что происходит на каждом клоне
Ключи хоста SSH Все они предъявляют один и тот же ключ. Любой, кто находится между клиентом и его сервером, может выдать себя за него — на всех них, без единого предупреждения
Instance-id Nimbopanel Из него выводится отпечаток лицензии, а установщик никогда не пересевает уже существующий id — так тысяча серверов выглядит как одна активация
/etc/machine-id Идентичности systemd, аренд DHCP и journald сталкиваются
База данных и конфигурация панели Пароль администратора, лицензионный ключ и каждый аккаунт едут внутри файла, который скачивают посторонние
Ключи DKIM, TLS-сертификаты Выпущены для сборочной машины; бессмысленны на клоне и утекли всем, у кого есть образ

Ни одно из этого не заявляет о себе. Это находят позже — кто-то другой.

panel/deploy/image-deidentify.sh удаляет всё это, и сборка Packer запускает его последним шагом, а затем перезапускает с --check, так что сборка падает, а не выдаёт снимок, который лишь выглядит чистым. Всё удалённое пересоздаётся при первой загрузке клона: sshd генерирует новые ключи хоста, systemd записывает новый machine-id, установщик сеет свежий instance-id.

/etc/machine-id оставляется пустым, а не удаляется — systemd читает пустой файл как «сгенерировать при загрузке», тогда как отсутствующий файл вообще мешает некоторым образам загружаться.

Проверьте перед публикацией

sudo ./image-deidentify.sh          # remove
sudo ./image-deidentify.sh --check  # confirm, exits non-zero if anything survives

Запустите проверку и на загруженном клоне, а не только во время сборки. Если она что-то сообщает, не публикуйте образ.

Размещение на маркетплейсах

Программы «приложение в 1 клик» у провайдеров (Vultr, DigitalOcean, Linode, Contabo) у каждого свой формат подачи и проверку. Образ выше — это артефакт, который они просят; оформление — на стороне каждого провайдера, и это не то, что данный инструментарий может сделать за вас.