Автоматизация серверов — это безопасный и надежный процесс эффективного и технологичного управления серверами и их мониторинга. В отличие от традиционного стиля управления серверами в дата-центрах, контролируемых выделенной командой экспертов, все серверы управляются с помощью автоматизации. В результате сводятся к минимуму человеческие ошибки.
Инструменты управления конфигурацией, такие как Ansible, Puppet, Terraform, и многие другие, обычно используются для автоматизации серверов. Эти инструменты настраивают серверы с помощью автоматизации, устанавливая стандартные процедуры для новых серверов и исключая потенциальные ошибки, возникающие при ручной настройке.
Ansible — это надежный проект с открытым исходным кодом. Он гибкий, простой в использовании и имеет максимально упрощенную архитектуру. Для использования плейбуков Ansible не требуется опыта программирования, а также не требуется установка программного обеспечения на узлы. Прежде всего, он обладает отличными возможностями, которые позволяют писать скрипты и оптимизировать автоматизацию.
В этом руководстве мы подробно расскажем о шагах по установке и настройке LAMP на Ubuntu 20.04 с помощью Ansible.
Предварительные требования
Чтобы следовать этому руководству, вам понадобятся:
- Установленная Ubuntu на вашей системе.
- Один или несколько хостов Ansible: Изначально необходимо настроить один или несколько удаленных хостов Ansible под управлением последней версии Ubuntu. Для настройки следуйте руководству Автоматизация настройки сервера с помощью Ansible и Ubuntu 20.04.
- Один управляющий узел Ansible: машина с Ubuntu, на которой установлен и настроен Ansible, подключенная к вашим хостам Ansible с помощью ключей SSH:
-
- Управляющий узел должен иметь пользователя с привилегиями sudo и брандмауэр в состоянии ВКЛЮЧЕН.
- Если вам нужна помощь в настройке Ansible, ознакомьтесь с руководством по установке и настройке Ansible на Ubuntu 20.04.
Какова цель плейбука Ansible?
Этот плейбук Ansible представляет собой альтернативный способ выполнения процедуры, описанной в нашем руководстве Настройка стека LAMP – Linux Apache MySQL PHP.
Запуск плейбука Ansible приведет к следующим действиям на ваших хостах Ansible:
-
Установить aptitude, альтернативу менеджеру пакетов apt, предпочитаемому Ansible.
-
Установить все необходимые пакеты LAMP.
-
Создать новый Apache VirtualHost и настроить выделенный корневой каталог документов.
-
Включить ВКЛЮЧЕН новый VirtualHost.
-
Выключить ВЫКЛЮЧЕН веб-сайт Apache по умолчанию, то есть установить переменную disable_default в значение true.
-
Выбрать пароль для пользователя MySQL root.
-
Удалить анонимные учетные записи MySQL и тестовую базу данных.
-
Настроить UFW для разрешения HTTP-трафика на настроенном порту, где по умолчанию используется 80.
-
Настроить тестовый PHP-скрипт.
После завершения работы плейбука Ansible вы увидите веб-среду PHP, работающую поверх Apache в соответствии с заданными нами конфигурациями.
Использование плейбука Ansible
Сначала получите плейбук LAMP и его зависимости из репозитория do-community/ansible-playbooks. Затем клонируйте репозиторий с плейбуком LAMP в локальную папку внутри управляющего узла Ansible.
Запустите команду git pull, чтобы убедиться, что у вас есть доступ к нужному содержимому, которое мы собираемся использовать в этом руководстве:
|
1 2 |
cd ~/ansible-playbooks git pull |
Если вы используете репозиторий do-community/ansible-playbooks впервые, рассмотрите возможность клонирования репозитория в вашу домашнюю папку:
|
1 2 3 |
cd ~ git clone https://github.com/do-community/ansible-playbooks.git cd ansible-playbooks |
Перейдите в папку lamp_ubuntu2004, и вы увидите следующую структуру:
|
1 2 3 4 5 6 7 8 |
lamp_ubuntu2004 ├── files │ ├── apache.conf.j2 │ └── info.php.j2 ├── vars │ └── default.yml ├── playbook.yml └── readme.md |
Вот обзор того, что означают эти файлы:
-
files/info.php.j2: это файл шаблона, в котором вы можете настроить тестовую страницу PHP в корне веб-сервера.
-
files/apache.conf.j2: еще один файл шаблона, используемый для настройки Apache VirtualHost.
-
vars/default.yml: это файл переменных для настройки параметров плейбука.
-
playbook.yml: этот файл содержит все задачи, которые должны быть выполнены на удаленном сервере (или серверах).
-
readme.md: Файл для чтения, содержащий информацию об этом плейбуке.
Давайте настроим конфигурации MySQL и Apache, внеся изменения в файл переменных плейбука. Перейдите в каталог lamp_ubuntu2004 и откройте файл vars/default.yml с помощью редактора nano :
|
1 2 |
cd lamp_ubuntu2004 nano vars/default.yml |
После открытия файла vars/default.yml вы увидите список переменных, которые необходимо изменить:
|
1 2 3 4 5 6 7 |
--- mysql_root_password: "mysql_root_password" app_user: "justin" http_host: "your_domain" http_conf: "your_domain.conf" http_port: "80" disable_default: true |
Давайте подробно разберем каждую из переменных:
-
mysql_root_password: хранит пароль для учетной записи root в MySQL.
-
app_user: это удаленный пользователь без прав root на хосте Ansible, который выступает в качестве владельца файлов приложения.
-
http_host: указывает ваше доменное имя.
-
http_conf: указывает имя конфигурационного файла, созданного в Apache.
-
http_port: это HTTP-порт для этого виртуального хоста, и 80 является значением по умолчанию.
-
disable_default: используется для отмены параметров по умолчанию, поставляемых с Apache.
Затем сохраните и закройте файл vars/default.yml .
После завершения настройки мы готовы запустить этот плейбук на серверах. По умолчанию большинство серверов в плейбуках настроены для выполнения на каждом сервере из инвентаря. Давайте воспользуемся флагом -l, чтобы затронуть только один сервер или выбранную подгруппу, на которую повлияет плейбук. Кроме того, мы можем использовать флаг -u, чтобы получить подробное представление о том, к какому удаленному серверу выполняется подключение и выполнение на удаленных хостах.
Давайте запустим плейбук на одном сервере server1 и подключимся к нему под пользователем justin:
|
1 |
ansible-playbook playbook.yml -l server1 -u justin |
Вы получите вывод, похожий на следующий:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
PLAY [all] ********************************************************************************************************* TASK [Gathering Facts] *********************************************************************************************************ok: [server1] TASK [Install prerequisites] *********************************************************************************************************ok: [server1] => (item=aptitude) ... TASK [UFW - Allow HTTP on port 80] ********************************************************************************************************* changed: [server1] TASK [Sets Up PHP Info Page] ********************************************************************************************************* changed: [server1] RUNNING HANDLER [Reload Apache] ********************************************************************************************************* changed: [server1] RUNNING HANDLER [Restart Apache] ********************************************************************************************************* changed: [server1] PLAY RECAP ********************************************************************************************************* server1 : ok=15 changed=11 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 |
Как только вы увидите, что выполнение плейбука завершено, перейдите в веб-браузер и откройте хост сервера. Не забудьте добавить /info.php в конце IP-адреса:
|
1 |
http://server_host_or_IP/info.php |
При переходе по этому URL-адресу вы увидите страницу следующего вида:
|
Предупреждение: Отображаемая страница содержит конфиденциальную информацию о вашей среде PHP. Поэтому рекомендуется удалить вашу личную информацию с сервера с помощью следующей команды: rm -f /var/www/info.php |
Что находится в плейбуке?
Далее давайте разберем значение и важность файлов, используемых в ansible-playbook содержимом:
-
vars/default.yml
Файл переменных default.yml содержит доменное имя и пароль для учетной записи MySQL root . Это значения по умолчанию, используемые в ansible-playbook задачах:
|
1 2 3 4 5 6 7 |
--- mysql_root_password: "mysql_root_password" app_user: "justin" http_host: "your_domain" http_conf: "your_domain.conf" http_port: "80" disable_default: true |
- files/apache.conf.j2
Файл apache.conf.j2 представляет собой файл шаблона Jinja 2, используемый для настройки нового виртуального хоста Apache VirtualHost. Переменные, используемые в этом шаблоне, должны быть определены в vars/default.yml файле переменных:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<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 <Directory /var/www/{{ http_host }}> Options -Indexes </Directory> <IfModule mod_dir.c> DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm </IfModule> </VirtualHost> |
- files/info.php.j2
Аналогично files/apache.conf.j2, файл info.php.j2 также является шаблоном Jinja. Мы используем этот файл для настройки тестового PHP-скрипта в корневом каталоге документов вновь настроенного сервера LAMP:
|
1 2 |
<?php phpinfo(); |
-
playbook.yml
В файле playbook.yml определяются все задачи этой настройки. В этом файле настраиваются все стеки LAMP. Он начинается с определения целевой группы серверов, для которой установлено значение all. Кроме того, он принимает значение become равным true ( become: true), и определяет все задачи, которые необходимо выполнить. Далее, файл yaml содержит файл по умолчанию, которым является файл переменных vars/default.yml, для загрузки параметров конфигурации:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
--- - hosts: all become: true vars_files: - vars/default.yml tasks: - name: Установка зависимостей apt: name={{ item }} update_cache=yes state=latest force_apt_get=yes loop: [ 'aptitude' ] # Настройка Apache - name: Установка пакетов LAMP apt: name={{ item }} update_cache=yes state=latest loop: [ 'apache2', 'mysql-server', 'python3-pymysql', 'php', 'php-mysql', 'libapache2-mod-php' ] - name: Создание корневой директории документа file: path: "/var/www/{{ http_host }}" state: directory owner: "{{ app_user }}" mode: '0755' - name: Настройка виртуального хоста Apache template: src: "files/apache.conf.j2" dest: "/etc/apache2/sites-available/{{ http_conf }}" notify: Перезагрузка Apache - name: Включение нового сайта shell: /usr/sbin/a2ensite {{ http_conf }} notify: Перезагрузка Apache - name: Отключение стандартного сайта Apache shell: /usr/sbin/a2dissite 000-default.conf when: disable_default notify: Перезагрузка Apache # Настройка MySQL - name: Установка the пароля root password mysql_user: name: root password: "{{ mysql_root_password }}" login_unix_socket: /var/run/mysqld/mysqld.sock - name: Удаление всех анонимных учетных записей пользователей mysql_user: name: '' host_all: yes state: absent login_user: root login_password: "{{ mysql_root_password }}" - name: Удаление тестовой базы данных MySQL mysql_db: name: test state: absent login_user: root login_password: "{{ mysql_root_password }}" # Настройка UFW - name: "UFW - Разрешить HTTP на порту {{ http_port }}" ufw: rule: allow port: "{{ http_port }}" proto: tcp # Информационная страница PHP - name: Настройка информационной страницы PHPPage template: src: "files/info.php.j2" dest: "/var/www/{{ http_host }}/info.php" handlers: - name: Перезагрузка Apache service: name: apache2 state: reloaded - name: Перезапуск Apache service: name: apache2 state: restarted |
Вы можете изменить эти файлы в соответствии с потребностями и требованиями вашего проекта.
Заключение
В этом руководстве мы рассмотрели шаги по установке и настройке LAMP на удаленном сервере с помощью Ansible. Существует множество других вариантов настройки, с которыми вы можете поэкспериментировать. Например, использование официальной документации Ansible и использование кейсов mysql_user из модуля Ansible — отличный способ повысить свой уровень. Также следуйте шагам, описанным в этом руководстве, чтобы попрактиковаться в автоматизации с использованием других инструментов управления конфигурацией и операционных систем для повышения уровня сложности.
Вы новичок в стеке LAMP и хотите глубже погрузиться в эту тему? Изучите следующие руководства в нашем блоге:
- Как установить WordPress с LAMP на Ubuntu 20.04
- Как установить стек Linux, Apache, MySQL, PHP (LAMP) на Centos-7
- Как установить стек LEMP Linux Nginx MySQL PHP на Ubuntu 20.04
Приятной работы!

Комментарии
Комментариев пока нет. Будьте первым.