Простейшая настройка php веб-сервера с использованием Ansible
Если вы администрируете несколько серверов, или один сервер, но время от времени вам приходится выполнять одни и те же скучные, рутинные действия, то рано или поздно вам захочется это автоматизировать. Первый шаг - это написание простых, перерастающих в не самые простые, bash скриптов.
Однако если посмотреть дальше, то можно найти более продвинутые средства автоматизации. Одним из которых является Ansible.
Ansible - средство управления конфигурациями, такое же как Chef и Puppet. Однако Ansible имеет несколько ниже порог вхождения и ряд приятных бонусов, таких как отсутствие необходимости расставлять агенты на клиентских машинах (он может сходить по ssh куда надо) и довольно несложное обеспечение идемпотентности операций.
В данной статье я приведу пример самого простого конфига веб сервера, на который мы накатим всё необходимое ПО для запуска php веб-приложения. На голый сервер достаточно установить Ansible (как его установить сказано в документации https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html) и запустить main.yml
Он установит:
- Fail2ban
- Ufw
- Php с нужными расширениями
- Nginx
- MariaDB
- Git
- Composer
- python-mysqldb
И создаст:
- Пользователя с именем webmaster и паролем password (не забудьте сменить пароль)
- Базу данных с именем app_db
- Пользователя БД с именем app_user и паролем app_user_password (не забудьте сменить пароль) и даст все привелегии на базу to app_db
Данного набора ПО достаточно чтобы запустить Laravel приложение. Код можно посмотреть на моем github аккаунте https://github.com/antonov-e-v/ansible-php-webserver-simple
В этом, самом простейшем случае мы только устанавливаем ПО, не конфигурируя его, так что тут появляется-таки простор для монотонной ручной работы. Однако в следующей статье я рассмотрю как сделать такой playbook, который будет содержать еще и необходимые шаблоны конфигов, чтобы настройка сервера превратилась в просто запуск сприпта с передачей стартовых параметров (имя сайта, реквизиты БД, пользователей и т.д.)
{{ 'Comments (%count%)' | trans {count:count} }}
{{ 'Comments are closed.' | trans }}