Cloud-init — это инструмент для настройки облачного сервера, который позволяет передать пользовательские параметры (user-data) при запуске виртуальной машины и тем самым ускорить и автоматизировать процесс настройки серверов.
С помощью cloud-init вы можете настроить конфигурацию сервера, установить нужное ПО, создать нужные директории и пользователей и назначить им права — и многое другое.
Сценарии cloud-init также можно передавать через Terraform, а в ближайшее время реализуем и передачу через CLI.
Форматы
Сценарии cloud-init можно передавать в виде текстовых файлов #cloud-config или shell-скриптов #!/bin/sh.
При использовании shell-скриптов необходимо учитывать следующее:
- shell-скрипт будет автоматически преобразован в
cloud-configс директивойruncmd;runcmdвыполняется однократно, поэтому после изменения скрипта и перезагрузки VDS скрипт не будет выполнен.Если вам нужно, чтобы сценарий выполнялся при каждой загрузке сервера, необходимо использовать скрипты в формате
cloud-configи директивуbootcmd.
Особенности
- Сценарии выполняются от
root, поэтому в командах не требуется указыватьsudo. - Все созданные файлы и директории будут принадлежать пользователю
root, поэтому если необходимо, чтобы доступ к ним имел иной пользователь, задайте в сценарии соответствующие права для него. - Так как сценарий выполняется полностью автоматически, в нем не получится использоваться команды, запрашивающие действия от пользователя. Для команд, требующих подтверждения в процессе выполнения, используйте ключ
-y(например,apt upgrade -y). - Лог выполнения сценария записывается в файл
/var/log/cloud-init-output.log. - На Ubuntu
cloud-initпо умолчанию создаст пользователяubuntu, если нет инструкцииusers. Если создание пользователей не требуется, рекомендуется указать запись вида:
Загрузка сценария
Загрузить сценарий cloud-init можно:
- На этапе создания сервера. Заданные параметры будут применены при установке.
- При переустановке сервера. Заданные параметры будут применены при установке.
- После создания сервера, в разделе «Конфигурация». Чтобы заданные параметры были применены при следующей перезагрузке, необходимо перезагрузить систему командой:
cloud-init clean --reboot.
Редактирование сценария
Вы можете изменять уже загруженный скрипт cloud-init в настройках сервера.
Чтобы заданные параметры были применены при следующей перезагрузке, необходимо перезагрузить систему командой:
cloud-init clean --reboot.
- Перейдите на вкладку «Конфигурация».
- Кликните «Редактировать» в блоке «Cloud-init».
- Внесите изменения и сохраните их.
Сценарий будет применен при следующей перезагрузке сервера.
Примеры shell-скриптов
Скрипт обязательно должен начинаться с
#!/bin/sh.
Установка пакетов
С помощью скрипта ниже установим fail2ban:
Установка LAMP на CentOS
Примеры cloud-config
Файл обязательно должен начинаться с
#cloud-config.
Установка пакетов
Создание пользователей
При создании пользователя через cloud-init пропадет возможность авторизации под пользователем root с использованием пароля. Это происходит из-за того, что ваш user-data перезаписывает настройки, заданные vendor-data.
Если вам нужна авторизация под root с паролем, используйте директиву chpasswd и явно задайте пароль:
В этом случае пароль root, отображаемый в панели управления, больше не будет актуален. Однако при смене пароля через панель управления он обновится корректно.
Если авторизация по паролю вам не нужна, используйте SSH-ключи.
Добавление SSH-ключей
Можно добавить несколько ключей сразу:
Создание пользователя с правами sudo, добавление SSH-ключей и настройка оболочки bash
Установка LAMP на Ubuntu
После завершения настройки при переходе по адресу http://ip_адрес_сервера/phpinfo.php отобразится страница с параметрами PHP.
Больше примеров можно найти в документации cloud-init.