Developer Advocate
Автоматизация сервера сегодня играет важнейшую роль в системном администрировании, что вызвано расходной природой современных сред приложений. Инструменты управления конфигурацией, такие как Ansible, обычно используются для оптимизации процесса автоматизации настройки сервера путем создания стандартных процедур для новых серверов, а также снижения количества ошибок, вызванных человеческим фактором при ручной настройке.
Ansible предлагает простую архитектуру, которая не требует установки специального программного обеспечения на узлах. Также он имеет широкий набор функций и встроенные модули, упрощающие написание скриптов автоматизации.
В этом руководстве мы объясняем, как использовать Ansible для автоматизации шагов, описанных в руководстве по установке Linux, Apache, MySQL и PHP (LAMP) в Ubuntu 18.04. Комплект LAMP — это набор программного обеспечения с открытым исходным кодом, которое обычно устанавливается в комплексе для размещения на сервере динамических сайтов и веб-приложений. Этот термин представляет собой аббревиатуру. Операционная система Linux используется с веб-сервером Apache. Данные сайта хранятся в базе данных MySQL, а за обработку динамического контента отвечает PHP.
Чтобы выполнить автоматическую настройку из сценария, который мы обсуждаем в этом руководстве, вам потребуется следующее:
Прежде чем продолжить, вам нужно убедиться, что ваш узел управления Ansible может подключаться и выполнять команды для вашего хоста (или хостов) Ansible. Для проверки подключения ознакомьтесь с шагом 3 руководства по установке и настройке Ansible в Ubuntu 18.04.
Этот сценарий Ansible предоставляет альтернативу ручному запуску в соответствии с процедурой, описанной в нашем руководстве по установке Linux, Apache, MySQL и PHP (LAMP) в Ubuntu 18.04.
При запуске этого сценария будут выполняться следующие действия на ваших хостах Ansible:
aptitude
, инструмента, который в Ansible используется в качестве альтернативы диспетчеру пакетов apt
.VirtualHost
Apache и настройка для него специального корневого каталога документов.VirtualHost
.true
.80
).После выполнения запуска сценария вы получите веб-среду для PHP, запущенную поверх Apache, в соответствии с опциями, которые вы определили внутри переменных конфигурации.
В первую очередь нам нужно получить сценарий LAMP и его зависимости из репозитория do-community/ansible-playbooks. Нам нужно будет клонировать этот репозиторий в локальную папку внутри узла управления Ansible.
Если вы клонировали этот репозиторий ранее, выполняя другое руководство, перейдите к вашей копии ansible-playbooks
и запустите команду git pull
, чтобы убедиться, что репозиторий содержит обновленный контент:
- cd ~/ansible-playbooks
- git pull
Если вы впервые используете репозиторий do-community/ansible-playbooks
, необходимо начать с клонирования репозитория в вашу домашнюю папку с помощью следующей команды:
- cd ~
- git clone https://github.com/do-community/ansible-playbooks.git
- cd ansible-playbooks
Файлы, которые нас интересуют, находятся в папке lamp_ubuntu1804
, которая имеет следующую структуру:
lamp_ubuntu1804
├── 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_ubuntu1804
и откройте файл vars/default.yml
с помощью вашего редактора командной строки:
- cd lamp_ubuntu1804
- nano vars/default.yml
Этот файл содержит несколько переменных, которые требуют вашего внимания:
---
mysql_root_password: "mysql_root_password"
app_user: "sammy"
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
сохраните и закройте этот файл. Если вы используете nano
, нажмите CTRL+X
, Y
, затем ENTER
.
Теперь мы готовы к запуску этого сценария на одном или нескольких серверах. Большинство сценариев настроены для выполнения на каждом сервере в вашем распоряжении по умолчанию. Мы можем использовать флаг -l
, чтобы гарантировать, что только определенный набор серверов или отдельный сервер будут затронуты сценарием. Также мы можем использовать флаг -u
, чтобы указать, какого пользователя на удаленном сервере мы будем использовать для подключения и выполнения команд сценария на удаленных хостах.
Для выполнения сценария только на server1
, подключенном как sammy
, вы можете воспользоваться следующей командой:
- ansible-playbook playbook.yml -l server1 -u sammy
Результат должен выглядеть примерно так:
Output
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
Примечание. Дополнительную информацию о запуске сценариев Ansible см. в нашей шпаргалке по Ansible.
После завершения работы сценария откройте ваш браузер и перейдите на хост или IP-адрес сервера, в соответствии с настройками переменных сценария, добавив /info.php
:
http://server_host_or_IP/info.php
Вы увидите подобную страницу:
Поскольку эта страница содержит чувствительную информацию о вашей среде PHP, рекомендуется удалить ее с сервера с помощью команды rm -f /var/www/info.php
после завершения настройки.
Вы можете найти файлы для установки сервера LAMP, который мы обсуждаем в данном руководстве, в папке lamp_ubuntu1804
внутри репозитория DigitalOcean Community Playbooks. Чтобы скопировать или загрузить содержимое скриптов напрямую, нажмите кнопку Raw сверху каждого скрипта.
Полное содержимое сценария, как и связанные файлы, также представлены здесь для удобства.
Файл переменных default.yml
содержит значения, используемые в задачах сценария, в том числе пароль для учетной записи root MySQL и доменное имя для настройки в Apache.
---
mysql_root_password: "mysql_root_password"
app_user: "sammy"
http_host: "your_domain"
http_conf: "your_domain.conf"
http_port: "80"
disable_default: true
Файл apache.conf.j2
— это шаблон Jinja 2, который выполняет настройку нового VirtualHost в 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
<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>
Файл info.php.j2
— это другой шаблон Jinja, который используется для настройки тестового скрипта PHP в корне документов на новом настроенном сервере LAMP.
<?php
phpinfo();
Файл 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' ]
#Apache Configuration
- name: Install LAMP Packages
apt: name={{ item }} update_cache=yes state=latest
loop: [ 'apache2', 'mysql-server', 'python3-pymysql', 'php', 'php-mysql', 'libapache2-mod-php' ]
- name: Create document root
file:
path: "/var/www/{{ http_host }}"
state: directory
owner: "{{ app_user }}"
mode: '0755'
- name: Set up Apache virtualhost
template:
src: "files/apache.conf.j2"
dest: "/etc/apache2/sites-available/{{ http_conf }}"
notify: Reload Apache
- 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
# MySQL Configuration
- name: Sets the root password
mysql_user:
name: root
password: "{{ mysql_root_password }}"
login_unix_socket: /var/run/mysqld/mysqld.sock
- name: Removes all anonymous user accounts
mysql_user:
name: ''
host_all: yes
state: absent
login_user: root
login_password: "{{ mysql_root_password }}"
- name: Removes the MySQL test database
mysql_db:
name: test
state: absent
login_user: root
login_password: "{{ mysql_root_password }}"
# UFW Configuration
- name: "UFW - Allow HTTP on port {{ http_port }}"
ufw:
rule: allow
port: "{{ http_port }}"
proto: tcp
# PHP Info Page
- name: Sets Up PHP Info Page
template:
src: "files/info.php.j2"
dest: "/var/www/{{ http_host }}/info.php"
handlers:
- name: Reload Apache
service:
name: apache2
state: reloaded
- name: Restart Apache
service:
name: apache2
state: restarted
Вы можете изменить эти файлы в соответствии с требованиями вашего рабочего процесса.
В этом руководстве мы использовали Ansible для автоматизации процесса установки и настройки среды LAMP на удаленном сервере. Поскольку у всех возникают различные потребности при работе с базами данных MySQL и пользователями, мы рекомендуем изучить официальную документацию Ansible для получения дополнительной информации и знакомства с вариантами использования модуля mysql_user
в Ansible.
Если вы хотите включить другие задачи в этот сценарий для дальнейшей настройки сервера, ознакомьтесь с нашим вводным руководством для Ansible Введение в управление конфигурациями: создание сценариев Ansible.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!