Перейти к содержимому

User data (cloud-init)

Облачные серверы3 мин чтения

Как при заказе или переустановке облачного сервера задать скрипт или #cloud-config, который выполнится при первом запуске: форматы, примеры, ограничения и проверка результата.

Содержание

User data — сценарий, который сервер выполняет один раз, при первом запуске после установки операционной системы. С его помощью можно установить пакеты, создать пользователей, разместить файлы конфигурации и выполнить начальную настройку сервисов — без входа на сервер. Сценарий обрабатывает cloud-init — стандартный механизм первичной настройки облачных серверов.

Где задать User data

  1. При заказе облачного сервера — в форме заказа на сайте или в личном кабинете: раздел «Дополнительные настройки», переключатель «User data».
  2. При переустановке системы — в личном кабинете: страница сервера → вкладка «Операционная система» → «Переустановить», переключатель «User data».

Текст можно вставить в поле или загрузить файлом: .txt, .sh, .yaml, .yml, .cfg или MIME-архив. Файл, сжатый gzip (.gz), распаковывается в браузере — на сервер передаётся только текст.

Важно User data поддерживаются для систем Linux с cloud-init: Ubuntu, Debian, AlmaLinux. Для FreeBSD и Windows переключатель недоступен.

Форматы

Первая строкаФорматНазначение
#!/bin/bashСкриптКоманды оболочки, выполняются от имени root. Подходит любой интерпретатор, установленный в системе: #!/bin/sh, #!/usr/bin/env python3.
#cloud-configКонфигурация cloud-init (YAML)Пакеты, пользователи, файлы и команды — описанием, а не скриптом.
Content-Type: multipart/mixedMIME-архивНесколько частей разных форматов в одном документе.
#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 хранятся в зашифрованном виде до установки системы и удаляются после неё.

См. также

Не нашли ответ? Напишите в поддержку — подскажем.