Cloud-init: автоматическая настройка VPS при первом запуске
Показываем, как использовать cloud-init для автоматической настройки VPS при первом запуске: создание пользователей, установка пакетов, SSH-конфигурация и диагностика.
Содержание
Cloud-init — это отраслевой стандарт для автоматизации настройки виртуальных серверов при первом запуске. Если вы когда-либо создавали VPS у популярных провайдеров, скорее всего, уже использовали его, даже не догадываясь об этом. При создании сервера можно указать SSH-ключ, создать пользователя или выполнить скрипт — всё это, как правило, делает cloud-init. Понимание того, как он работает, позволяет значительно упростить развёртывание новых инстансов и избавиться от ручных операций.
Что умеет cloud-init
Cloud-init поддерживает множество способов передачи конфигурации: через metadata-сервис, user-data, SSH-ключи, локальные источники. Чаще всего используется user-data — блок YAML, который передаётся провайдером VPS при создании машины. На основе этого файла cloud-init настраивает сеть, пользователей, пакеты, запускает скрипты и модули. Это позволяет превратить пустой образ в полноценный сервер за счёт единственного файла.
Кроме того, cloud-init не ограничивается одним запуском: он выполняется на каждом этапе загрузки, но основные действия происходят при первом старте. Важно понимать, что повторные запуски не перезаписывают настройки автоматически, поэтому user-data применяется один раз.
Как это работает
Процесс инициализации проходит несколько фаз:
- Определение источника данных — cloud-init проверяет, откуда взять конфигурацию (metadata-сервис, конфигурационный драйвер и т.д.).
- Анализ конфигурации — загружаются user-data и метаданные, формируется итоговый набор инструкций.
- Применение конфигурации — настраиваются сетевые интерфейсы, создаются пользователи, записываются SSH-ключи, выполняются модули.
- Завершение — после первого успешного прохода создаётся файл-маркер, и при следующих перезагрузках cloud-init работает в режиме без изменений.
Логика работы подробно описана в официальной документации, но для пользователя VPS достаточно понимать, что всё происходит автоматически и управляется простым YAML-файлом.
Настройка VPS с помощью cloud-init: пошаговое руководство
Чтобы использовать cloud-init на VPS, выполните следующие шаги:
- Создайте файл user-data. Обычно это YAML-файл, начинающийся с
#cloud-config. Пример:
#cloud-config
users:
- name: myuser
sudo: ALL=(ALL) NOPASSWD:ALL
shell: /bin/bash
ssh-authorized-keys:
- ssh-rsa AAAAB3... (ваш ключ)
package_update: true
packages:
- htop
- curl
write_files:
- path: /etc/motd
content: "Добро пожаловать на сервер, настроенный через cloud-init"
runcmd:
- echo "done" > /tmp/cloudinit-test.txt
- Передайте файл при создании VPS. В панели управления провайдера есть поле «User-data» или «Скрипт инициализации». Вставьте содержимое файла.
- Запустите сервер. При первом старте cloud-init выполнит настройку.
- Проверьте результат. Подключитесь по SSH созданным пользователем, проверьте установку пакетов и выполнение скриптов.
Некоторые провайдеры, например DigitalOcean и Vultr, позволяют добавлять user-data при создании дроплета или VPS. Если такой опции нет, можно передать конфигурацию через файл ISO для локальных виртуализаций (например, KVM) или через cloud-init в образе. Актуальные возможности и форматы лучше проверять в документации вашего провайдера.
Типичные сценарии использования cloud-init
Помимо базового создания пользователя, cloud-init открывает широкие возможности:
- Установка пакетов и обновлений (модуль
packages). - Запись произвольных файлов (модуль
write_files). - Выполнение команд и скриптов (модули
runcmdиscripts). - Настройка SSH-ключей и отключение парольного входа.
- Создание swap-файла или разметки дисков.
- Установка и запуск служб через systemd.
Эти сценарии покрывают большинство задач при развёртывании сервера. Каждый модуль имеет свои параметры, которые подробно описаны в документации cloud-init. Версии модулей могут меняться, поэтому при использовании нестандартных функций сверяйтесь с официальным списком модулей для вашей версии.
Диагностика неполадок cloud-init
Если настройка не применилась, не паникуйте. Всего несколько шагов помогают найти причину:
- Подключитесь к VPS через консоль провайдера (не по SSH, если пользователь не создан).
- Проверьте журнал cloud-init:
sudo less /var/log/cloud-init.log. Обратите внимание на строки с ошибками. - Проверьте статус выполнения:
cloud-init status --long. Коды ошибок покажут, какой модуль не сработал. - Проверьте правильность синтаксиса YAML. Можно использовать онлайн-валидаторы.
- Убедитесь, что файл начинается с
#cloud-configи не содержит запрещённых символов.
В большинстве случаев проблема кроется в неправильной структуре YAML или неверном имени модуля. Отдельно стоит проверить, поддерживает ли ваш образ cloud-init — обычно все современные образы Linux для VPS включают его по умолчанию.
Заключение
Cloud-init — это мощный инструмент для автоматизации настройки VPS. Один раз потратив время на изучение user-data, вы сможете разворачивать новые серверы за минуты, без ручного ввода команд. Начните с простых конфигураций, затем переходите к сложным сценариям. Помните: конфиденциальные данные (пароли, ключи) лучше передавать через защищённые механизмы, а не открытым текстом.
Мини-чеклист
- Создайте YAML-файл user-data с заголовком #cloud-config
- Определите пользователей и добавьте SSH-ключи
- Укажите пакеты для установки или команды для выполнения
- Вставьте содержимое user-data в панель управления провайдера
- Запустите VPS и дождитесь завершения инициализации
- Проверьте результат через логи cloud-init и статус
Частые ошибки
- Отсутствие обязательного заголовка #cloud-config в начале файла
- Неправильные отступы в YAML, использование табуляции
- Ошибки в кавычках вокруг SSH-ключей
- Передача user-data после первого запуска, когда cloud-init уже отработал
- Недостаточно прав на исполняемые файлы или скрипты
- Слишком ранняя проверка, не дождавшись завершения инициализации
Источники и документация
FAQ
Что такое cloud-init?
Cloud-init — это стандартный инструмент для автоматической настройки облачных серверов при первом запуске. Он позволяет создавать пользователей, устанавливать пакеты, настраивать сеть и выполнять скрипты.
Можно ли использовать cloud-init на любом VPS?
Большинство современных провайдеров поддерживают cloud-init, но образ должен содержать пакет cloud-init. Проверьте у вашего провайдера или в документации образа.
Как проверить, что cloud-init отработал корректно?
Выполните команду cloud-init status --long и изучите /var/log/cloud-init.log. Также проверьте, создан ли пользователь и установлены ли пакеты.
Хотите перейти сразу к рабочему доступу?
Если сценарий уже ясен и не хочется проходить все шаги вручную, оформите доступ и проверьте подключение на своем устройстве.
Получить доступ