Руководство по Ansible: создание Ansible Playbook для стека LEMP
На этой странице
- Шаг 1. Настройка проекта Ansible Playbook
- Шаг 2. Создание ролей Ansible для структуры каталогов
- Шаг 3. Настройте hosts и site.yml
- Шаг 3. Настройка общих ролей
- Шаг 4. Настройка веб-ролей
- Шаг 5. Настройка ролей базы данных
- Шаг 6. Запустите Ansible Playbook
- Шаг 7. Тестирование
- Справочник
Ansible — это простой инструмент автоматизации, который автоматизирует развертывание программных приложений, выделение ресурсов в облаке и управление конфигурацией. Это инструмент оркестрации серверов, который помогает вам управлять и контролировать большое количество серверных узлов из единого места, называемого Control Machines. Ansible был создан Майклом ДеХааном в 2012 году и написан на Python и Powershell.
В этом руководстве мы собирались показать вам, как создать базовый Ansible Playbook для подготовки стека LEMP на сервере Ubuntu 18.04. Вы узнаете, как создать базовый Ansible Playbook, который можно масштабировать для других приложений проекта PHP, таких как WordPress, Nextcloud и т. д.
Предпосылка
- 2 ОС Ubuntu.
- 10.5.5.20 доступный
- 10.5.5.26 положение
Что мы будем делать:
- Настройка проекта Ansible Playbook
- Создание структуры каталогов ролей Ansible Playbook
- Настройка hosts и site.yml
- Настройка общих ролей – базовая настройка
- Настройка веб-ролей — конфигурация Nginx и PHP-FPM
- Настройка ролей базы данных — конфигурация базы данных MySQL
- Тестирование
Шаг 1. Настройка проекта Ansible Playbook
Ansible Playbook — это набор инструкций, которые вы отправляете для запуска на одном или группе серверов. Он представляет собой ansible-provisioning, где автоматизация определяется как задачи, и все задания, такие как установка пакетов, редактирование файлов, будут выполняться модулями ansible.
Ansible Playbook содержит некоторую базовую конфигурацию, включая информацию о хостах и пользователях серверов предоставления, список задач, которые будут реализованы на серверах предоставления, шаблоны и пользовательские конфигурации, а также группу переменных, входящих в состав шаблонов и задач.
Во-первых, создайте директорию основного проекта на машине с ansible-control. В главном каталоге проекта будут храниться все наши каталоги, файлы и конфигурации playbook.
Создайте каталог проекта Ansible с именем project-lemp и войдите в него.
mkdir project-lemp/
cd project-lempТеперь создайте новый файл конфигурации hosts и site.yml, затем создайте новый каталог с именем roles.
touch hosts site.yml
mkdir -p roles/Подробно о конфигурациях:
hosts — это файл инвентаризации, который содержит фрагменты информации об управляемых серверах с помощью ansible. Это позволяет вам создать группу серверов, что упрощает управление и масштабирование самого файла инвентаризации. Файл инвентаризации может быть создан в различных форматах, включая форматы INI и YAML.
site.yml — основной файл playbook, в котором содержится информация о том, какая группа хостов будет управляться с использованием наших доступных ролей.
роли — это группа игр Ansible, которые будут использоваться для предоставления сервера. Роли ansible имеют свои собственные структуры каталогов, каждая роль будет содержать каталоги, такие как задачи, обработчики, переменные и т. д.
Шаг 2. Создание ролей Ansible для структуры каталогов
На этом этапе мы собирались создать каталог ролей ansible с помощью команды ansible-galaxy. Мы создадим две роли, называемые общими ролями и веб-ролями.
Внутри каталога project-lemp перейдите в каталог roles.
cd roles/
Создайте каталог структуры ролей и файлы для общих и веб-ролей, выполнив приведенную ниже команду ansible-galaxy.
ansible-galaxy init common
ansible-galaxy init web
ansible-galaxy init dbПосле этого проверьте все доступные структуры каталогов ролей, используя следующую команду.
tree .
Вам будет показан результат, как показано ниже.
Шаг 3 - Настройте hosts и site.yml
Файл hosts будет содержать список и группу серверов, управляемых Ansible. Для этого руководства мы создадим группу с именем lemp с участником с именем server01 и IP-адресом 10.5.5.26.
Отредактируйте файл hosts с помощью редактора vim.
vim hosts
Вставьте конфигурацию ниже.
[lemp]
server01 ansible_host=10.5.5.26Сохранить и закрыть.
Затем отредактируйте файл конфигурации site.yml.
vim site.yml
Вставьте конфигурации ниже.
---
- hosts: lemp
remote_user: hakase
become: yes
roles:
- common
- web
- dbСохранить и закрыть.
Шаг 3. Настройка общих ролей
На этом этапе собирались настроить общие роли. А для этого нам нужно создать список задач, которые мы собираемся делать.
Ниже список задач, которые собирались делать на общих ролях.
- Изменить репозиторий
- Обновить репозиторий
- Обновите пакеты до последней версии
- Настройте часовой пояс сервера
Теперь перейдите в общий каталог и отредактируйте конфигурацию tasks/main.yml.
cd common/
vim tasks/main.ymlСоздайте задачу для изменения репозитория, и мы будем использовать модуль копирования, который скопирует базовый sources.list из каталога файлов на удаленный хост /etc/apt/.
- name: Change repository Ubuntu 18.04Step 4 - Setup 'web' Roles
copy:
src: sources.list
dest: /etc/apt/
backup: yesСоздайте задачу для обновления репозитория и обновите все пакеты до последней версии с помощью модуля apt.
- name: Update repository and Upgrade packages
apt:
upgrade: dist
update_cache: yesТеперь создайте задачу для настройки системного часового пояса с помощью модуля ansible timezone.
- name: Setup timezone to Asia/Jakarta
timezone:
name: Asia/Jakarta
state: latestСохранить и закрыть.
После этого создайте новый репозиторий конфигурации sources.list внутри каталога файлов.
vim files/sources.list
Выберите ближайший к вашему серверу репозиторий, ниже мой.
deb http://buaya.klas.or.id/ubuntu/ bionic main restricted
deb http://buaya.klas.or.id/ubuntu/ bionic-updates main restricted
deb http://buaya.klas.or.id/ubuntu/ bionic universe
deb http://buaya.klas.or.id/ubuntu/ bionic-updates universe
deb http://buaya.klas.or.id/ubuntu/ bionic multiverse
deb http://buaya.klas.or.id/ubuntu/ bionic-updates multiverse
deb http://buaya.klas.or.id/ubuntu/ bionic-backports main restricted universe multiverse
deb http://buaya.klas.or.id/ubuntu/ bionic-security main restricted
deb http://buaya.klas.or.id/ubuntu/ bionic-security universe
deb http://buaya.klas.or.id/ubuntu/ bionic-security multiverseСохранить и закрыть.
наконец, завершена настройка общих ролей.
Шаг 4. Настройка веб-ролей
На этом этапе мы собирались настроить веб-роли. Он выполнит некоторые задачи, включая установку веб-сервера Nginx, PHP-FPM с некоторыми базовыми расширениями и настройку PHP-FPM с Nginx.
Ниже приведены подробные задачи, которые мы будем выполнять на веб-ролях:
- Установите Nginx
- Установить PHP-FPM
- Настроить php.ini
- Создание виртуального хоста
- Добавить файл phpinfo
Перейдите в веб-каталог и отредактируйте файл tasks/main.yml.
cd web/
vim tasks/main.ymlСоздайте первую задачу для установки nginx с помощью модуля apt.
- name: Install Nginx
apt:
name: nginx
state: latestТеперь создайте задачу по установке PHP-FPM с некоторыми базовыми расширениями. А для установки нескольких пакетов мы можем использовать формат списка Python, как показано ниже.
- name: Instal PHP-FPM
apt:
name: ['php','php-fpm','php-common','php-cli','php-curl']
state: latestДалее мы добавим новые строки в конфигурацию php.ini с помощью модуля blockinfile. И в конце строки уведомим ансибл о перезапуске службы php-fpm после настройки файла php.ini.
- name: Configure php.ini
blockinfile:
dest: /etc/php/{{ php_version }}/fpm/php.ini
block: |
date.time = Asia/Jakarta
cgi-fix_pathinfo = 0
backup: yes
notify: restart php-fpmТеперь мы скопируем конфигурацию виртуального хоста nginx, используя модуль шаблона. Модуль шаблона скопирует конфигурацию из каталога шаблонов на удаленный сервер. Мы собираемся скопировать шаблон виртуального хоста jinja2 vhost.j2 в каталог /etc/nginx/sites-enabled/, а последним мы уведомим ansible о перезапуске службы nginx.
- name: Create Nginx virtual host
template:
src: vhost.j2
dest: /etc/nginx/sites-enabled/vhost-{{ domain_name }}
notify: restart nginxПосле этого создадим новые задачи на создание каталога web-root с помощью файлового модуля и скопируем в него шаблон index.php.
- name: Create web-root directory
file:
path: /var/www/{{ domain_name }}
state: directory
- name: Upload index.html and info.php files
template:
src: index.php.j2
dest: /var/www/{{ domain_name }}/index.phpСохранить и закрыть.
Теперь собирались настроить обработчики перезапуска службы nginx и php-fpm. Отредактируйте конфигурацию handlers/main.yml с помощью редактора vim.
обработчики vim/main.yml
Вставьте конфигурации ниже.
- name: restart nginx
service:
name: nginx
state: restarted
enabled: yes
- name: restart php-fpm
service:
name: php{{ php_version }}-fpm
state: restarted
enabled: yesСохранить и закрыть.
Далее мы отредактируем конфигурацию vars/main.yml. В верхней части конфигураций вы увидите переменные конфигурации {{ php_version }} и {{ domain_name }}. Эти переменные представляют нашу настройку среды для версии php и имя домена, которое будет использоваться. Переменная делает ansible более пригодным для повторного использования, потому что нам просто нужно отредактировать конфигурацию переменной vars/main.yml, а не базовую конфигурацию.
Отредактируйте конфигурацию переменных vars/main.yml с помощью редактора vim.
vim vars/main.yml
Вставьте конфигурации ниже.
php_version: 7.2
domain_name: hakase-labs.ioСохранить и закрыть.
Теперь мы создадим конфигурации шаблонов jinja2 index.php.j2 и vhost.j2 в каталоге templates/.
vim templates/index.php.j2
Вставьте конфигурацию ниже.
<html>
<body>
<h1><center>index.html for domain {{ domain_name }}</center></h1>
<p>
<p>
<?php
phpinfo();
?>
</body>
</html>Сохранить и закрыть.
После этого создайте шаблон для конфигурации виртуального хоста nginx vhost.j2.
vim templates/vhost.j2
Вставьте конфигурации ниже.
server {
listen 80;
listen [::]:80;
root /var/www/{{ domain_name }};
index index.php index.html index.htm index.nginx-debian.html;
server_name {{ domain_name }};
location / {
try_files $uri $uri/ =404;
}
# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php{{ php_version }}-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}Сохраните и закройте конфигурацию, и настройка веб-ролей завершена.
Шаг 5 — Настройка ролей базы данных
На этом этапе мы собирались настроить роли db для установки и настройки базы данных MySQL.
Ниже приведены подробные задачи, которые будут выполняться на ролях базы данных.
Перейдите в каталог db и отредактируйте конфигурацию tasks/main.yml.
cd db/
vim tasks/main.ymlТеперь установите пакеты MySQL, используя модуль apt и формат списка python для установки нескольких пакетов.
- name: Install MySQL
apt:
name: ['mysql-server','mysql-client','python-mysqldb']
state: latest
notify: restart mysqlЗатем создайте новые задачи для создания базы данных MySQL и пользователя, затем предоставьте все привилегии пользователя для базы данных.
- name: Create database
mysql_db:
name: '{{ db_name }}'
state: present
- name: Create user for the database
mysql_user:
name: '{{ db_user }}'
password: '{{ db_pass }}'
encrypted: yes
priv: '{{ db_name }}.*:ALL'
state: presentСохранить и закрыть.
Затем отредактируйте конфигурацию handlers/main.yml.
vim handlers/main.yml
Вставьте конфигурацию задачи для перезапуска службы MySQL.
- name: restart mysql
service:
name: mysql
state: restarted
enabled: yesСохранить и закрыть.
После этого отредактируйте конфигурацию переменной vars vars/main.yml.
vim vars/main.yml
Вставьте эти переменные для базы данных MySQL и конфигурации пользователя ниже.
db_name: hakase-db
db_user: hakase
db_pass: '*C960D382DB42E57D3BAC33891CF87900DCB1A869'Сохранить и закрыть.
Переменная db_pass имеет зашифрованный пароль MySQL, и вы можете сгенерировать зашифрованный пароль MySQL с помощью онлайн-инструментов.
Шаг 6 — Запустите Ansible Playbook
Перейдите в каталог проекта Ansible.
cd project-lemp/
Запустите команду ansible-playbook ниже.
ansible-playbook -i hosts site.yml
Теперь ansible будет запускать все роли, которые мы назначаем хосту. Когда он будет завершен, вам будет показан результат, как показано ниже.
Убедитесь, что у вас нет ошибки.
Шаг 7 — Тестирование
Откройте веб-браузер и введите доменное имя в адресной строке http://hakase-labs.io.
И вам будет показана индексная страница с phpinfo, как показано ниже.
PHP-FPM и Nginx работают.
Затем вернитесь к серверному терминалу и войдите на сервер MySQL, используя пользователя и пароль, которые мы создали в переменной ролей mysql.
mysql -u hakase -p
PASSWORD: hakasepassпроверьте список баз данных, принадлежащих пользователю.
show databases;
И вы войдете в оболочку MySQL, и вам будет показана база данных с именем hakase-db в списке.
Наконец, Ansible Playbook для установки и настройки стека LEMP был создан и успешно протестирован.
Ссылка