Сценарии cloud-init
Cloud-init — это инструмент для настройки облачного сервера, который позволяет передать пользовательские параметры (user-data) при запуске виртуальной машины и тем самым ускорить и автоматизировать процесс настройки серверов.
С помощью cloud-init
вы можете настроить конфигурацию сервера, установить нужное ПО, создать нужные директории и пользователей и назначить им права — и многое другое.
Возможность передавать сценарии cloud-init
через CLI и Terraform будет реализована в ближайшее время.
- Форматы
- Особенности
- Загрузка сценария
- Редактирование сценария
- Примеры shell-скриптов
- Примеры cloud-config
Форматы
Сценарии 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
. Если создание пользователей не требуется, рекомендуется указать запись вида:
users: []
Загрузка сценария
Загрузить сценарий cloud-init
можно:
- На этапе создания сервера. Заданные параметры будут применены при установке.
- После создания сервера, в разделе «Конфигурация». Заданные параметры будут применены при следующей перезагрузке.
Редактирование сценария
Вы можете изменять уже загруженный скрипт cloud-init
в настройках сервера.
- Перейдите на вкладку «Конфигурация».
- Кликните «Редактировать» в блоке «Cloud-init».
- Внесите изменения и сохраните их.
Сценарий будет применен при следующей перезагрузке сервера.
Примеры shell-скриптов
Скрипт обязательно должен начинаться с
#!/bin/sh
.
Установка пакетов
С помощью скрипта ниже установим fail2ban
:
#!/bin/sh
apt -y update
apt -y install fail2ban
Установка LAMP на CentOS
#!/bin/sh
##Ставим PHP 7.2
yum -y install epel-release
yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum-config-manager --enable remi-php72
yum update -y
yum install -y php php-mcrypt php-cli php-gd php-curl php-mysql php-ldap php-zip php-process php-ldap php-mbstring
##Ставим MariaDB 11.02
wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup
chmod +x mariadb_repo_setup
bash mariadb_repo_setup
yum install -y httpd mariadb-server
##Запускаем автозагрузку сервисов
systemctl start mariadb
systemctl enable mariadb
systemctl start httpd
systemctl enable httpd
##Назначаем права
chmod 2775 /var/www
find /var/www -type d -exec chmod 2775 {} \;
find /var/www -type f -exec chmod 0664 {} \;
## Вывод phpinfo
echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php
## Открываем порт
iptables -t filter -I INPUT -p tcp --dport 80 -j ACCEPT
Примеры cloud-config
Файл обязательно должен начинаться с
#cloud-config
.
Установка пакетов
#cloud-config
package_update: true
packages:
- apache2
- mariadb-server
- mariadb-client
Создание пользователей
#cloud-config
users:
- name: username
- name: new_username
Добавление SSH-ключей
#cloud-config
ssh_authorized_keys:
- ssh-rsa ПУБЛИЧНЫЙ_КЛЮЧ username@server
Можно добавить несколько ключей сразу:
#cloud-config
ssh_authorized_keys:
- ssh-rsa ПУБЛИЧНЫЙ_КЛЮЧ username@server
- ssh-rsa ПУБЛИЧНЫЙ_КЛЮЧ_2 username2@desktop
Создание пользователя с правами sudo, добавление SSH-ключей и настройка оболочки bash
#cloud-config
users:
- name: username
groups: sudo
shell: /bin/bash
sudo: ['ALL=(ALL) NOPASSWD:ALL']
ssh-authorized-keys:
- ПУБЛИЧНЫЙ_КЛЮЧ username@server
- ПУБЛИЧНЫЙ_КЛЮЧ_2 username2@desktop
Установка LAMP на Ubuntu
#cloud-config
package_update: true
packages:
- apache2
- php-mysql
- mysql-server
- libapache2-mod-php
- php-gd
- php-curl
runcmd:
- [ find, /var/www, -type, d, -exec, chmod, 2775, {}, \; ]
- [ find, /var/www, -type, f, -exec, chmod, 0664, {}, \; ]
write_files:
- path: /var/www/html/phpinfo.php
owner: www-data:www-data
content: |
"<?php phpinfo(); ?>"
После завершения настройки при переходе по адресу http://ip_адрес_сервера/phpinfo.php
отобразится страница с параметрами PHP.
Больше примеров можно найти в документации cloud-init.