Установка и настройка Apache с помощью Ansible в Ubuntu 18.04

Автоматизация серверов в системном администрировании сегодня играет очень важную роль. Инструменты управления конфигурацией, такие как Ansible, обычно используются для упрощения автоматизации настройки сервера. Они автоматически выполняют стандартные процедуры для новых серверов, а также уменьшают вероятность человеческих ошибок, которые могли бы возникнуть при настройке вручную.

Ansible предлагает простую архитектуру, которая не требует установки специального программного обеспечения на всех нодах кластера. Он также предоставляет набор надежных функций и встроенных модулей, которые облегчают написание сценариев автоматизации.

Данный мануал поможет вам автоматизировать все этапы, описанные в мануале Установка веб-сервера Apache в Ubuntu 18.04. Веб-сервер Apache — это самый распространенный веб-сервер в мире. У него много мощных функций, включая динамически загружаемые модули, надежную поддержку медиа, расширенную интеграцию с популярными программами.

Требования

Для запуска такого плейбука вам нужна следующая среда:

  • Главная нода Ansible: машина Ubuntu 18.04, которая может подключаться к хостам Ansible по SSH-ключам. На этой ноде нужен пользователь sudo и включенный брандмауэр (инструкции есть здесь). Настроить Ansible на этой ноде вам поможет этот мануал.
  • Один или несколько хостов Ansible: это удаленные машины Ubuntu 18.04, настроенные по этому мануалу.

Примечание: Прежде чем продолжить, убедитесь, что главная нода Ansible может подключаться к хостам. В этом вам поможет мануал Установка и настройка Ansible в Ubuntu 18.04.

Что делает этот плейбук?

Этот плейбук Ansible автоматизирует все действия по установке, которые выполнялись вручную в мануале Установка веб-сервера Apache в Ubuntu 18.04.

Он делает следующее:

  1. Устанавливает aptitude, который Ansible предпочитает использовать вместо менеджера apt.
  2. Устанавливает Apache.
  3. Создает пользовательскую корневую папку для виртуального хоста Apache и тестовую страницу.
  4. Включает виртуальный хост.
  5. Отключает стандартный сайт Apache, если disable_default имеет значение true.
  6. Настраивает брандмауэр UFW для поддержки HTTP по заданному порту (по умолчанию 80).

Когда плейбук будет выполнен, на целевой ноде будет рабочий веб-сервер, установленный согласно заданным вами переменным.

Как использовать этот плейбук?

Для начала вам нужно загрузить плейбук Apache и его зависимости на главную ноду, это можно сделать по этой ссылке.

Если ранее вы клонировали этот репозиторий, следуя другому мануалу, откройте имеющуюся копию ansible-playbooks и выполните команду git pull, чтобы обновить его:

cd ~/ansible-playbooks
git pull

Если у вас нет копии репозитория, перейдите в домашний каталог и клонируйте его сейчас:

cd ~
git clone https://github.com/do-community/ansible-playbooks.git
cd ansible-playbooks

Нужные нам файлы хранятся в папке apache_ubuntu1804, которая имеет такую структуру:

apache_ubuntu1804
├── files
│   ├── apache.conf.j2
│   └── index.html.j2
├── vars
│   └── default.yml
├── playbook.yml
└── readme.md

Давайте рассмотрим эти файлы подробнее:

  • files/apache.conf.j2: шаблон для настройки виртуального хоста.
  • files/index.html.j2: шаблон для тестовой страницы, которая будет создана в корневом каталоге сайта.
  • vars/default.yml: файл переменных для пользовательской настройки плейбука.
  • yml: плейбук, где хранятся все задачи, которые нужно выполнить на удаленных серверах.
  • md: текстовый файл с информацией о данном плейбуке.

Мы отредактируем файл переменных этого плейбука, чтобы настроить несколько параметров. Откройте каталог apache_ubuntu1804, а в нем откройте файл vars/default.yml:

cd apache_ubuntu1804
nano vars/default.yml

В этом файле есть несколько переменных, на которые нужно обратить внимание:

---
app_user: "8host"
http_host: "your_domain"
http_conf: "your_domain.conf"
http_port: "80"
disable_default: true

Ниже в списке вы найдете краткое объяснение каждой из этих переменных:

  • app_user: пользователь (не root) на хосте Ansible, который будет владельцем файлов приложения.
  • http_host: домен.
  • http_conf: имя конфигурационного файла, который будет создан в Apache.
  • http_port: HTTP-порт для этого виртуального хоста (80 является значением по умолчанию).
  • disable_default: следует ли отключить стандартный сайт, который поставляется с Apache.

Когда вы закончите обновлять переменные в vars/default.yml, сохраните и закройте файл. Если вы использовали nano, нажмите CTRL+X, Y, а затем ENTER.

Теперь вы можете запустить плейбук на одном или нескольких хостах. По умолчанию большинство плейбуков настроено для запуска на всех хостах, перечисленных в инвентаре. Флаг -l позволяет задать определенное подмножество серверов или один сервер, на котором будет запущен плейбук. Также можно использовать флаг -u, чтобы указать пользователя на удаленном сервере, которого нужно использовать  для подключения и выполнения команд плейбука на удаленных хостах.

Чтобы выполнить плейбук только на сервере server1 как пользователь 8host, используйте следующую команду:

ansible-playbook playbook.yml -l server1 -u 8host

Вы получите примерно такой вывод:

PLAY [all] *****************************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************************


ok: [server1]


TASK [Install prerequisites] ***********************************************************************************************************


ok: [server1] => (item=aptitude)


TASK [Install Apache] ******************************************************************************************************************


changed: [server1]


TASK [Create document root] ************************************************************************************************************


changed: [server1]


TASK [Copy index test page] ************************************************************************************************************


changed: [server1]


TASK [Set up Apache virtualhost] *******************************************************************************************************


changed: [server1]


TASK [Enable new site] *****************************************************************************************************************


changed: [server1]


TASK [Disable default Apache site] *****************************************************************************************************


changed: [server1]


TASK [UFW - Allow HTTP on port 80] ****************************************************************************************************


changed: [server1]


RUNNING HANDLER [Reload Apache] ********************************************************************************************************


changed: [server1]


PLAY RECAP *****************************************************************************************************************************

server1                : ok=10   changed=8    unreachable=0     failed=0               skipped=0    rescued=0 ignored=0

Читайте также: Как работать с Ansible: простая и удобная шпаргалка

Когда плейбук будет выполнен, зайдите в браузер и введите хост или IP-адрес сервера, как указано в переменных.

http://server_host_or_IP

Вы увидите такую страницу:

Success! The your_domain virtual host is working!

Это означает, что автоматизация установки веб-сервера полностью сработала, и теперь Apache готов обслуживать статические HTML-страницы и ресурсы, помещенные в корневой каталог документа, который вы настроили в переменных плейбука.

Содержимое плейбука

Давайте рассмотрим содержимое плейбука и связанных с ним файлов.

Файл vars/default.yml

Файл переменных default.yml содержит значения, которые будут использоваться в задачах плейбука, например, порт HTTP и домен для настройки виртуального хоста Apache.

---
app_user: "8host"
http_host: "your_domain"
http_conf: "your_domain.conf"
http_port: "80"
disable_default: true

Файл apache.conf.j2

Файл apache.conf.j2 — это шаблон Jinja 2, который содержит новый виртуальный хост Apache. Переменные, использованные в этом шаблоне, определены файле vars/default.yml.

<VirtualHost *:{{ http_port }}>
ServerAdmin webmaster@localhost
ServerName {{ http_host }}
ServerAlias www.{{ http_host }}
DocumentRoot /var/www/{{ http_host }}
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Файл index.html.j2

Файл index.html.j2 — это тоже шаблон Jinja, он создает тестовую HTML страницу в корневом каталоге веб-сервера.

<html>
<head>
<title>Welcome to {{ http_host }} !</title>
</head>
<body>
<h1>Success! The {{ http_host }} virtual host is working!</h1>
</body>
</html>

Файл playbook.yml

Файл playbook.yml — это плейбук, в нем хранятся все задачи, которые нужно выполнить для установки веб-сервера. Он начинается с определения группы целевых серверов этой установки (all), после чего он использует become: true, чтобы определить, что задачи должны выполняться с повышением привилегий (sudo) по умолчанию. Затем он включает файл vars/default.yml для загрузки параметров конфигурации.

---
- hosts: all
become: true
vars_files:
- vars/default.yml
tasks:
- name: Install prerequisites
apt: name={{ item }} update_cache=yes state=latest force_apt_get=yes
loop: [ 'aptitude' ]
- name: Install Apache
apt: name=apache2 update_cache=yes state=latest
- name: Create document root
file:
path: "/var/www/{{ http_host }}"
state: directory
owner: "{{ app_user }}"
mode: '0755'
- name: Copy index test page
template:
src: "files/index.html.j2"
dest: "/var/www/{{ http_host }}/index.html"
- name: Set up Apache virtuahHost
template:
src: "files/apache.conf.j2"
dest: "/etc/apache2/sites-available/{{ http_conf }}"
- name: Enable new site
shell: /usr/sbin/a2ensite {{ http_conf }}
notify: Reload Apache
- name: Disable default Apache site
shell: /usr/sbin/a2dissite 000-default.conf
when: disable_default
notify: Reload Apache
- name: "UFW - Allow HTTP on port {{ http_port }}"
ufw:
rule: allow
port: "{{ http_port }}"
proto: tcp
handlers:
- name: Reload Apache
service:
name: apache2
state: reloaded
- name: Restart Apache
service:
name: apache2
state: restarted

Вы можете изменить этот файл согласно требованиям вашего рабочего процесса.

Заключение

Теперь вы умеете автоматизировать процесс установки и настройки веб-сервера Apache в Ubuntu 18.04.

Читайте также: Создание плейбука Ansible

Tags: , ,