Top.Mail.Ru
Публичное облако на базе VMware с управлением через vCloud Director
Вход / Регистрация
На главную
37fb80c5-86c9-46d6-b683-0a5c8bf0c098
Серверы

Сценарии cloud-init

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. Если создание пользователей не требуется, рекомендуется указать запись вида:
  
users: []

Загрузка сценария

Загрузить сценарий cloud-init можно:

  • На этапе создания сервера. Заданные параметры будут применены при установке.

081449bf 55b6 44d0 Bd74 578830f3efef

  • При переустановке сервера. Заданные параметры будут применены при установке.

Без Названия (1)

  • После создания сервера, в разделе «Конфигурация». Чтобы заданные параметры были применены при следующей перезагрузке, необходимо перезагрузить систему командой: cloud-init clean --reboot.

E5d9634a 23f5 491b B45f 60f3be14d878

Редактирование сценария

Вы можете изменять уже загруженный скрипт cloud-init в настройках сервера.

Чтобы заданные параметры были применены при следующей перезагрузке, необходимо перезагрузить систему командой: cloud-init clean --reboot.

  1. Перейдите на вкладку «Конфигурация».
  2. Кликните «Редактировать» в блоке «Cloud-init».
  3. Внесите изменения и сохраните их.

E5d9634a 23f5 491b B45f 60f3be14d878

Сценарий будет применен при следующей перезагрузке сервера. 

Примеры 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.

Была ли статья полезна?
Ваша оценка очень важна
  • Ваш комментарий
  • Предпросмотр
Комментарии 3
Алексей
15.12.2024, 04:31

Очень интересно

tsimashenka
30.09.2024, 09:59

хорошая !

user
user
11.09.2024, 19:13

Фигасебе ! Таймвэв ! жжжжжжет!

Мы используем на сайте куки.
В интернете без них никак