Ansible в действии
Ansible — программное обеспечение с открытым исходным кодом, автоматизирующее настройку и развертывание ПО. Ansible как система имеет следующие ключевые особенности:
Установка и запуск трудностей обычно не вызывает:
# ubuntu sudo apt-get install ansible #mac-OS brew install ansible
Структура Ansible
Модули
Модули представляют собой небольшие программы, которые выполняют определённую работу на сервере. К примеру, вместо запуска этой команды:
sudo apt-get install htop
Можно воспользоваться модулем apt и установить htop:
- name: Install htop apt: name=htop
Плагины
Плагины — фрагменты кода, расширяющие основные функциональные возможности Ansible. В принципе, Ansible изначально поставляется с несколькими удобными плагинами, однако можно написать и свой.
Инвентаризация хостов
Для предоставления перечня хостов надо обозначить список, находящийся в файле инвентаризации (напоминает содержание файла hosts).
В самом простом виде он может содержать лишь одну строку:
35.178.45.231 ansible_ssh_user=ubuntu
Playbooks
Ansible playbooks является способом отправки команд на удалённые компьютеры посредством скриптов. Вместо того, чтобы персонально применять команды Ansible для удалённой настройки компьютеров из командной строки, можно настраивать целые сложные среды и передавать скрипт одной или нескольким системам.
group_vars
Этот файл содержит набор переменных, допустим, имя пользователя и пароль БД.
Роли
Не что иное, как способ сгруппировать ряд задач в один контейнер, дабы эффективно автоматизировать работу посредством понятной структуры каталогов.
Обработчики
Это списки задач, которые, по сути, не отличаются от обычных задач, на которые ссылается глобальное уникальное имя и которые оповещаются уведомителями. Когда ничто не уведомляет обработчик, запускаться он не станет. Вне зависимости от того, сколько именно задач уведомляет обработчик, запускается он лишь один раз после завершения всех задач.
Теги
Когда у вас playbook с большим объёмом, бывает полезно иметь возможность запускать лишь определённую часть конфигурации.
Демо «Реальное приложение»
Чтобы показать пример работы Ansible, давайте установим Laravel-приложение в VPS. Задействуем lightsail.
Последовательность действий при создании и запуске Laravel APP:
- Создаём экземпляр Ubuntu Lightsail.
- Устанавливаем зависимости Ansible на VPS.
- Добавляем SSH-ключи в Git.
- Выполняем сборку хостов и ansible.cfg.
- Определяем роль в Ansible.
- Определяем обработчик в Ansible.
- Устанавливаем модули PHP.
- Устанавливаем Nginx.
- Добавляем default-конфигурацию Nginx.
- Добавляем переменные для управления учётными данными БД, хоста, URL-адресом источника GitHub и переменными .env.
- Используйем Ansible-Vault.
- Создаём БД MySql, имя пользователя и пароль.
- Клонируем кодовую базу в ваш VPS.
- Генерируем .env.
- Создаём playbook.
Теперь рассмотрим каждый пункт более подробно.
Создаём экземпляр Ubuntu Lightsail
Переходим в панель управления Lightsail и нажимаем «Создать экземпляр».
Выбираем ОС.
Выбираем «Добавить скрипт запуска», запускаемый после создания вашего экземпляра. И не забываем получить SSH-ключ.
Устанавливаем зависимости Ansible на нашем VPS
Чтобы установить нужные зависимости, добавляем эти sh-команды:
sudo add-apt-repository ppa:deadsnakes/ppa -y sudo apt-get update sudo apt-get install -y python2.7 python3 python-pip
Теперь у нас уже есть готовый экземпляр, поэтому можем переходить к построению Ansible Project.
Добавляем SSH-ключи в Git
Нужно добавить свой сервер id_rsa.pub к своим ключам GitHub SSH, предварительно войдя в свой сервер.
# Подключаемся к серверу через 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
Сборка хостов и ansible.cfg
hosts.ini
[aws] # Ваш IP сервера 127.0.0.39
ansible.cfg
[defaults] hostfile = hosts.ini # configure log dir log_path= logs/ansible-log.log
Определяем роли в Ansible
Используя модуль Ping, убедимся, что хост работает, после чего обновляем все пакеты и устанавливаем 2 модуля: git и htop.
--- - ping: ~ ### - name: Update apt packages apt: update_cache: yes ## - name: Install GIT VCS apt: name: git state: latest ## - name: Install htop apt: name=htop
Определение обработчика
--- - name: Restart PHP-FPM service: name: php{{php_version}}-fpm state: restarted #### - name: Restart Nginx service: name: nginx state: restarted
Продолжение в следующей части, не пропустите!
Источник — «Ansible In Action».