Как при заказе или переустановке облачного сервера задать скрипт или #cloud-config, который выполнится при первом запуске: форматы, примеры, ограничения и проверка результата.
Содержание
User data — сценарий, который сервер выполняет один раз, при первом запуске после установки операционной системы. С его помощью можно установить пакеты, создать пользователей, разместить файлы конфигурации и выполнить начальную настройку сервисов — без входа на сервер. Сценарий обрабатывает cloud-init — стандартный механизм первичной настройки облачных серверов.
Где задать User data
- При заказе облачного сервера — в форме заказа на сайте или в личном кабинете: раздел «Дополнительные настройки», переключатель «User data».
- При переустановке системы — в личном кабинете: страница сервера → вкладка «Операционная система» → «Переустановить», переключатель «User data».
Текст можно вставить в поле или загрузить файлом: .txt, .sh, .yaml, .yml, .cfg или MIME-архив. Файл, сжатый gzip (.gz), распаковывается в браузере — на сервер передаётся только текст.
Форматы
| Первая строка | Формат | Назначение |
|---|---|---|
#!/bin/bash | Скрипт | Команды оболочки, выполняются от имени root. Подходит любой интерпретатор, установленный в системе: #!/bin/sh, #!/usr/bin/env python3. |
#cloud-config | Конфигурация cloud-init (YAML) | Пакеты, пользователи, файлы и команды — описанием, а не скриптом. |
Content-Type: multipart/mixed | MIME-архив | Несколько частей разных форматов в одном документе. |
#include | Список адресов | Части загружаются по указанным ссылкам; сервер должен иметь к ним доступ. |
Распознаются также #cloud-boothook, #part-handler и шаблоны ## template: jinja — для опытных пользователей cloud-init.
Ограничения
- Размер — не более 32 КБ текста.
- Сценарий выполняется один раз — при первом запуске после установки. При перезагрузке он не повторяется; при переустановке системы выполняется сценарий, заданный при переустановке.
- Настройки, которые задаём мы, — пароль root, SSH-ключи, имя сервера и сеть — применяются первыми и не перекрываются: #cloud-config объединяется с ними (списки дополняются), скрипт выполняется после наших команд.
- Ошибка в сценарии не отменяет установку: сервер будет создан, но настройка из User data может остаться незавершённой.
Примеры
Установить и запустить nginx (Ubuntu, Debian)
#!/bin/bash
apt-get update
apt-get install -y nginx
systemctl enable --now nginxДля AlmaLinux — dnf install -y nginx вместо двух команд apt-get.
Пакеты, пользователь и файл (#cloud-config)
#cloud-config
package_update: true
packages:
- git
- htop
users:
- name: deploy
groups: sudo
shell: /bin/bash
sudo: ALL=(ALL) NOPASSWD:ALL
ssh_authorized_keys:
- ssh-ed25519 AAAA… deploy@example
write_files:
- path: /etc/motd
content: |
Сервер проекта «Ромашка»
runcmd:
- echo "Настройка завершена" >> /var/log/first-boot.logСтрока sudo даёт пользователю права администратора без пароля — указывайте её только при необходимости. В AlmaLinux группа администраторов называется wheel, а не sudo.
Как проверить результат
Подключитесь к серверу по SSH и выполните:
cloud-init status --long— состояние:done— сценарий выполнен,error— выполнен с ошибками./var/log/cloud-init-output.log— вывод скриптов и команд./var/log/cloud-init.log— подробный журнал cloud-init.sudo cloud-init query userdata— документ, который получил сервер.
Безопасность
Сценарий выполняется с правами root на вашем сервере. Используйте проверенные сценарии; загружайте файлы и части по ссылкам (#include, curl в скрипте) только из доверенных источников.
Пароли и ключи доступа к сторонним системам в User data лучше не размещать: после установки документ остаётся в служебных файлах cloud-init на сервере (каталог /var/lib/cloud/instance/). У нас User data хранятся в зашифрованном виде до установки системы и удаляются после неё.
См. также
Не нашли ответ? Напишите в поддержку — подскажем.


