0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>Ansible - программное обеспечение с открытым исходным кодом, автоматизирующее настройку и развертывание ПО. Ansible как система имеет следующие ключевые особенности: •<strong>безагентная</strong>. В клиенте нет установленного ПО либо агента, который общается с сервером; •<strong>идемпотентная</strong>. Вне зависимости от того, сколько раз вызывается операция, результат будет одним и тем же; •<strong>простая и расширяемая</strong>. Ansible написана на Python и использует для написания команд YAML. Оба вышеупомянутых языка в изучении довольно просты.</p>
1
<p>Ansible - программное обеспечение с открытым исходным кодом, автоматизирующее настройку и развертывание ПО. Ansible как система имеет следующие ключевые особенности: •<strong>безагентная</strong>. В клиенте нет установленного ПО либо агента, который общается с сервером; •<strong>идемпотентная</strong>. Вне зависимости от того, сколько раз вызывается операция, результат будет одним и тем же; •<strong>простая и расширяемая</strong>. Ansible написана на Python и использует для написания команд YAML. Оба вышеупомянутых языка в изучении довольно просты.</p>
2
<p>Установка и запуск трудностей обычно не вызывает:</p>
2
<p>Установка и запуск трудностей обычно не вызывает:</p>
3
# ubuntu sudo apt-get install ansible #mac-OS brew install ansible<h2>Структура Ansible</h2>
3
# ubuntu sudo apt-get install ansible #mac-OS brew install ansible<h2>Структура Ansible</h2>
4
<h3>Модули</h3>
4
<h3>Модули</h3>
5
<p>Модули представляют собой небольшие программы, которые выполняют определённую работу на сервере. К примеру, вместо запуска этой команды:</p>
5
<p>Модули представляют собой небольшие программы, которые выполняют определённую работу на сервере. К примеру, вместо запуска этой команды:</p>
6
sudo apt-get install htop<p>Можно воспользоваться модулем apt и установить htop:</p>
6
sudo apt-get install htop<p>Можно воспользоваться модулем apt и установить htop:</p>
7
- name: Install htop apt: name=htop<h3>Плагины</h3>
7
- name: Install htop apt: name=htop<h3>Плагины</h3>
8
<p>Плагины - фрагменты кода, расширяющие основные функциональные возможности Ansible. В принципе, Ansible изначально поставляется с несколькими удобными плагинами, однако можно написать и свой.</p>
8
<p>Плагины - фрагменты кода, расширяющие основные функциональные возможности Ansible. В принципе, Ansible изначально поставляется с несколькими удобными плагинами, однако можно написать и свой.</p>
9
<h3>Инвентаризация хостов</h3>
9
<h3>Инвентаризация хостов</h3>
10
<p>Для предоставления перечня хостов надо обозначить список, находящийся в файле инвентаризации (напоминает содержание файла hosts).</p>
10
<p>Для предоставления перечня хостов надо обозначить список, находящийся в файле инвентаризации (напоминает содержание файла hosts).</p>
11
<p>В самом простом виде он может содержать лишь одну строку:</p>
11
<p>В самом простом виде он может содержать лишь одну строку:</p>
12
35.178.45.231 ansible_ssh_user=ubuntu<h3>Playbooks</h3>
12
35.178.45.231 ansible_ssh_user=ubuntu<h3>Playbooks</h3>
13
<p>Ansible playbooks является способом отправки команд на удалённые компьютеры посредством скриптов. Вместо того, чтобы персонально применять команды Ansible для удалённой настройки компьютеров из командной строки, можно настраивать целые сложные среды и передавать скрипт одной или нескольким системам.</p>
13
<p>Ansible playbooks является способом отправки команд на удалённые компьютеры посредством скриптов. Вместо того, чтобы персонально применять команды Ansible для удалённой настройки компьютеров из командной строки, можно настраивать целые сложные среды и передавать скрипт одной или нескольким системам.</p>
14
<h3>group_vars</h3>
14
<h3>group_vars</h3>
15
<p>Этот файл содержит набор переменных, допустим, имя пользователя и пароль БД.</p>
15
<p>Этот файл содержит набор переменных, допустим, имя пользователя и пароль БД.</p>
16
<h3>Роли</h3>
16
<h3>Роли</h3>
17
<p>Не что иное, как способ сгруппировать ряд задач в один контейнер, дабы эффективно автоматизировать работу посредством понятной структуры каталогов.</p>
17
<p>Не что иное, как способ сгруппировать ряд задач в один контейнер, дабы эффективно автоматизировать работу посредством понятной структуры каталогов.</p>
18
<h3>Обработчики</h3>
18
<h3>Обработчики</h3>
19
<p>Это списки задач, которые, по сути, не отличаются от обычных задач, на которые ссылается глобальное уникальное имя и которые оповещаются уведомителями. Когда ничто не уведомляет обработчик, запускаться он не станет. Вне зависимости от того, сколько именно задач уведомляет обработчик, запускается он лишь один раз после завершения всех задач.</p>
19
<p>Это списки задач, которые, по сути, не отличаются от обычных задач, на которые ссылается глобальное уникальное имя и которые оповещаются уведомителями. Когда ничто не уведомляет обработчик, запускаться он не станет. Вне зависимости от того, сколько именно задач уведомляет обработчик, запускается он лишь один раз после завершения всех задач.</p>
20
<h3>Теги</h3>
20
<h3>Теги</h3>
21
<p>Когда у вас playbook с большим объёмом, бывает полезно иметь возможность запускать лишь определённую часть конфигурации.</p>
21
<p>Когда у вас playbook с большим объёмом, бывает полезно иметь возможность запускать лишь определённую часть конфигурации.</p>
22
<h2>Демо "Реальное приложение"</h2>
22
<h2>Демо "Реальное приложение"</h2>
23
<p>Чтобы показать пример работы Ansible, давайте установим Laravel-приложение в VPS. Задействуем lightsail.</p>
23
<p>Чтобы показать пример работы Ansible, давайте установим Laravel-приложение в VPS. Задействуем lightsail.</p>
24
<p>Последовательность действий при создании и запуске Laravel APP:</p>
24
<p>Последовательность действий при создании и запуске Laravel APP:</p>
25
<ol><li>Создаём экземпляр Ubuntu Lightsail.</li>
25
<ol><li>Создаём экземпляр Ubuntu Lightsail.</li>
26
<li>Устанавливаем зависимости Ansible на VPS.</li>
26
<li>Устанавливаем зависимости Ansible на VPS.</li>
27
<li>Добавляем SSH-ключи в Git.</li>
27
<li>Добавляем SSH-ключи в Git.</li>
28
<li>Выполняем сборку хостов и ansible.cfg.</li>
28
<li>Выполняем сборку хостов и ansible.cfg.</li>
29
<li>Определяем роль в Ansible.</li>
29
<li>Определяем роль в Ansible.</li>
30
<li>Определяем обработчик в Ansible.</li>
30
<li>Определяем обработчик в Ansible.</li>
31
<li>Устанавливаем модули PHP.</li>
31
<li>Устанавливаем модули PHP.</li>
32
<li>Устанавливаем Nginx.</li>
32
<li>Устанавливаем Nginx.</li>
33
<li>Добавляем default-конфигурацию Nginx.</li>
33
<li>Добавляем default-конфигурацию Nginx.</li>
34
<li>Добавляем переменные для управления учётными данными БД, хоста, URL-адресом источника GitHub и переменными .env.</li>
34
<li>Добавляем переменные для управления учётными данными БД, хоста, URL-адресом источника GitHub и переменными .env.</li>
35
<li>Используйем Ansible-Vault.</li>
35
<li>Используйем Ansible-Vault.</li>
36
<li>Создаём БД MySql, имя пользователя и пароль.</li>
36
<li>Создаём БД MySql, имя пользователя и пароль.</li>
37
<li>Клонируем кодовую базу в ваш VPS.</li>
37
<li>Клонируем кодовую базу в ваш VPS.</li>
38
<li>Генерируем .env.</li>
38
<li>Генерируем .env.</li>
39
<li>Создаём playbook.</li>
39
<li>Создаём playbook.</li>
40
</ol><p>Теперь рассмотрим каждый пункт более подробно.</p>
40
</ol><p>Теперь рассмотрим каждый пункт более подробно.</p>
41
<h3>Создаём экземпляр Ubuntu Lightsail</h3>
41
<h3>Создаём экземпляр Ubuntu Lightsail</h3>
42
<p>Переходим в панель управления Lightsail и нажимаем "Создать экземпляр".</p>
42
<p>Переходим в панель управления Lightsail и нажимаем "Создать экземпляр".</p>
43
<p>Выбираем ОС.</p>
43
<p>Выбираем ОС.</p>
44
<p>Выбираем "Добавить скрипт запуска", запускаемый после создания вашего экземпляра. И не забываем получить SSH-ключ.</p>
44
<p>Выбираем "Добавить скрипт запуска", запускаемый после создания вашего экземпляра. И не забываем получить SSH-ключ.</p>
45
<h3>Устанавливаем зависимости Ansible на нашем VPS</h3>
45
<h3>Устанавливаем зависимости Ansible на нашем VPS</h3>
46
<p>Чтобы установить нужные зависимости, добавляем эти sh-команды:</p>
46
<p>Чтобы установить нужные зависимости, добавляем эти sh-команды:</p>
47
sudo add-apt-repository ppa:deadsnakes/ppa -y sudo apt-get update sudo apt-get install -y python2.7 python3 python-pip<p>Теперь у нас уже есть готовый экземпляр, поэтому можем переходить к построению Ansible Project.</p>
47
sudo add-apt-repository ppa:deadsnakes/ppa -y sudo apt-get update sudo apt-get install -y python2.7 python3 python-pip<p>Теперь у нас уже есть готовый экземпляр, поэтому можем переходить к построению Ansible Project.</p>
48
<h3>Добавляем SSH-ключи в Git</h3>
48
<h3>Добавляем SSH-ключи в Git</h3>
49
<p>Нужно добавить свой сервер id_rsa.pub к своим ключам GitHub SSH, предварительно войдя в свой сервер.</p>
49
<p>Нужно добавить свой сервер id_rsa.pub к своим ключам GitHub SSH, предварительно войдя в свой сервер.</p>
50
# Подключаемся к серверу через SSH и запускаем ssh-keygen sudo chmod -R 644 .ssh/id_rsa cat .ssh/id_rsa.pub # Добавляем результат команды в аккаунт Git # github settings=> SSH keys => Add new Key # bitbucket settings=> ssh-keys => Add new Key<h3>Сборка хостов и ansible.cfg</h3>
50
# Подключаемся к серверу через SSH и запускаем ssh-keygen sudo chmod -R 644 .ssh/id_rsa cat .ssh/id_rsa.pub # Добавляем результат команды в аккаунт Git # github settings=> SSH keys => Add new Key # bitbucket settings=> ssh-keys => Add new Key<h3>Сборка хостов и ansible.cfg</h3>
51
<p><em>hosts.ini</em></p>
51
<p><em>hosts.ini</em></p>
52
[aws] # Ваш IP сервера 127.0.0.39<p><em>ansible.cfg</em></p>
52
[aws] # Ваш IP сервера 127.0.0.39<p><em>ansible.cfg</em></p>
53
[defaults] hostfile = hosts.ini # configure log dir log_path= logs/ansible-log.log<h3>Определяем роли в Ansible</h3>
53
[defaults] hostfile = hosts.ini # configure log dir log_path= logs/ansible-log.log<h3>Определяем роли в Ansible</h3>
54
<p>Используя модуль Ping, убедимся, что хост работает, после чего обновляем все пакеты и устанавливаем 2 модуля: git и htop.</p>
54
<p>Используя модуль Ping, убедимся, что хост работает, после чего обновляем все пакеты и устанавливаем 2 модуля: git и htop.</p>
55
--- - ping: ~ ### - name: Update apt packages apt: update_cache: yes ## - name: Install GIT VCS apt: name: git state: latest ## - name: Install htop apt: name=htop<h3>Определение обработчика</h3>
55
--- - ping: ~ ### - name: Update apt packages apt: update_cache: yes ## - name: Install GIT VCS apt: name: git state: latest ## - name: Install htop apt: name=htop<h3>Определение обработчика</h3>
56
--- - name: Restart PHP-FPM service: name: php{{php_version}}-fpm state: restarted #### - name: Restart Nginx service: name: nginx state: restarted<p>Продолжение в следующей части, не пропустите!</p>
56
--- - name: Restart PHP-FPM service: name: php{{php_version}}-fpm state: restarted #### - name: Restart Nginx service: name: nginx state: restarted<p>Продолжение в следующей части, не пропустите!</p>
57
<p><em>Источник - "<a>Ansible In Action</a>".</em></p>
57
<p><em>Источник - "<a>Ansible In Action</a>".</em></p>
58
58