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
.cloud-init
по умолчанию создаст пользователя ubuntu
, если нет инструкции users
. Если создание пользователей не требуется, рекомендуется указать запись вида:users: []
Загрузить сценарий cloud-init
можно:
cloud-init clean --reboot
.Вы можете изменять уже загруженный скрипт cloud-init
в настройках сервера.
Чтобы заданные параметры были применены при следующей перезагрузке, необходимо перезагрузить систему командой:
cloud-init clean --reboot
.
Сценарий будет применен при следующей перезагрузке сервера.
Скрипт обязательно должен начинаться с
#!/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 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.
Очень интересно
хорошая !
Фигасебе ! Таймвэв ! жжжжжжет!