HTML Diff
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=&gt; SSH keys =&gt; Add new Key # bitbucket settings=&gt; ssh-keys =&gt; 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=&gt; SSH keys =&gt; Add new Key # bitbucket settings=&gt; ssh-keys =&gt; 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