Автоматизация настройки баз данных и веб‑серверов с помощью Rex
Кратко
Этот материал показывает пошаговую настройку репозиториев, создание Rexfile для базы данных и веб‑сервера, запуск задач «prepare» и простое развертывание приложения. Приведены готовые примеры кода, чек‑листы и рекомендации по валидации развертывания.
Важно: предполагается, что у вас есть доступ к SVN и хосты в инвентаре (db01, web01). Используйте ключи SSH вместо пароля, если в инфраструктуре так принято.
Оглавление
- Подготовка репозиториев
- Создание задач для базы данных
- Создание задач для веб‑сайта
- Развертывание приложения (пример)
- Контроль качества и критерии приёмки
- Чек‑листы ролей и советы по отладке
Подготовка репозиториев
Перейдите в директорию репозитория базы данных и создайте файл Rexfile, если его ещё нет.
wks01 Service# cd ../database
wks01 database# touch Rexfile
Добавим общие репозитории как внешние (svn:externals). Это позволит автоматически подтягивать общие модули.
wks01 database# svn propedit svn:externals .
В редакторе добавьте строки (URL оставьте как в вашей системе):
lib/Common http://svn01/svn/common
lib/Service http://svn01/svn/service
Сохраните, затем выполните обновление и зафиксируйте изменения:
wks01 database# svn up
wks01 database# svn ci -m "added external repositories"
Примечание: команда svn up теперь также проверяет внешние репозитории. Если кто‑то добавит сервисы в общие репозитории, вы получите их после svn up.
Создание задач для базы данных
Откройте Rexfile и добавьте конфигурацию для настройки сервера БД. Пример Rexfile ниже устанавливает NTP и MySQL, настраивает параметры и перезапускает сервис.
set user => "root";
set password => "f00b4r";
include qw/
Common::NTP
Service::MySQL
/;
set group => srvdb => "db01";
task "prepare", group => "srvdb", sub {
# run the common ntp task "prepare"
Common::NTP::prepare();
# install mysql
Service::MySQL::prepare();
# configure mysql
Service::MySQL::configure({
key_buffer => "32M",
max_allowed_packet => "32M",
});
# restart mysql
service mysql => "restart";
};
Пояснения по ключевым моментам:
- set user/password — учётные данные для подключения к целевым хостам (можно заменить на ключи SSH).
- include — подтягивает модули из lib/Common и lib/Service, которые регистрируют задачи как Perl‑функции.
- set group — задаёт группу хостов srvdb; можно указать несколько хостов:
set group => srvdb => "db01", "db02", "db03";
или шаблонset group => srvdb => "db[01..03]";
. - task “prepare” — выполняется на всех хостах группы; вызывает подготовительные задачи модулей и перезапускает MySQL.
После создания Rexfile добавьте и зафиксируйте его в SVN:
wks01 database# svn add Rexfile
wks01 database# svn ci -m "inital commit of Rexfile"
Запуск задачи подготовки сервера БД:
wks01 database# rex prepare
Чтобы увидеть список задач, определённых в Rexfile:
wks01 database# rex -T
Создание задач для веб‑сайта
Перейдите в директорию веб‑проекта и повторите настройку externals и Rexfile.
wks01 database# cd ../website
wks01 website# touch Rexfile
wks01 website# svn propedit svn:externals .
Добавьте те же внешние репозитории:
lib/Common http://svn01/svn/common
lib/Service http://svn01/svn/service
Обновите и зафиксируйте изменения:
wks01 database# svn up
wks01 database# svn ci -m "added external repositories"
Пример Rexfile для веб‑сервера (Apache):
# Rexfile
set user => "root";
set password => "test";
include qw/
Common::NTP
Service::Apache
/;
set group => srvweb => "web01";
task "prepare", group => "srvweb", sub {
# run the common ntp task "prepare"
Common::NTP::prepare();
# install apache
Service::Apache::prepare();
# configure apache
Service::Apache::configure({
timeout => 60,
});
# restart apache
service apache2 => "restart";
};
Добавление в репозиторий и запуск подготовки:
wks01 website# svn add Rexfile
wks01 website# svn ci -m "initial Rexfile"
wks01 website# rex prepare
Важно: параметр timeout указан в секундах.
Пример задачи развертывания приложения
После настройки инфраструктуры добавьте задачу deploy, которая загружает архив, распаковывает и управляет владельцем файлов.
task "deploy", group => "srvweb", sub {
upload "your-web-application.tar.gz", "/tmp";
extract "/tmp/your-web-application.tar.gz",
owner => "www-data",
group => "www-data",
to => "/var/www";
rm "/tmp/your-web-application.tar.gz";
};
Пояснение: upload копирует файл на удалённый хост, extract распаковывает и устанавливает владельца/группу, rm удаляет временный архив.
Контроль качества и критерии приёмки
Критерии приёмки
- Сервис MySQL/Apache установлен и запущен (systemctl status active).
- Веб‑папка /var/www содержит файлы приложения с владельцем www-data.
- Время отклика базового HTTP‑запроса < 2 с (локальная оценка).
- Конфигурации NTP синхронизованы на всех хостах (ntpq -p или timedatectl).
Тестовые шаги (ручная проверка)
- Выполнить
rex prepare
для srvdb и srvweb. - Проверить статус сервисов:
systemctl status mysql
иsystemctl status apache2
. - Сделать curl к веб‑серверу:
curl -I http://web01/
. - Проверить логи: /var/log/mysql/ и /var/log/apache2/.
Чек‑лист ролей
Инженер инфраструктуры
- Проверил externals и обновил SVN.
- Настроил SSH‑ключи или корректные креденшалы.
- Запустил rex prepare и проверил статусы сервисов.
Разработчик/CI
- Подготовил архив приложения и загрузил в артефакт‑хранилище.
- Передал имя архива в задачу deploy.
Операции
- Проверил доступность хостов и сетевые права (firewall, security groups).
- Проверил резервные копии БД перед релизом.
Советы по отладке и альтернативные подходы
- Если инфраструктура использует управление ключами, замените set password на конфигурацию SSH‑агента или указание ключа: set ssh_key => “/path/to/key”.
- Для более крупных проектов рассмотрите использование артефакт‑репозитория (Nexus/Artifactory) вместо загрузки локального архива.
- Если требуется zero‑downtime, добавьте шаги с балансировщиком и по‑этапной перезагрузкой узлов.
Когда это не сработает
- Модули Common::NTP или Service::MySQL отсутствуют в lib/ — убедитесь, что externals настроены и выполнен svn up.
- Неправильные права или SELinux мешают записи в /var/www — проверьте контексты и права.
Мини‑методология развертывания (быстрая последовательность)
- Настройка репозиториев и externals.
- Создание Rexfile и определение групп хостов.
- Запуск
rex prepare
для базовой настройки. - Тестирование доступности сервисов и логов.
- Запуск
rex deploy
для публикации приложений. - Мониторинг и откат при необходимости.
Пример ролей и действия при инциденте
Инцидент: веб‑сайт недоступен после deploy.
- Откат: восстановить последний рабочий архив из резервной копии и выполнить deploy.
- Проверить логи Apache и ошибок PHP.
- Проверить статус файлов и владельцев в /var/www.
- Если причина — база, проверить подключение MySQL и ошибочные запросы.
Шаблон проверки (быстро)
- Проверка сервисов:
systemctl is-active mysql && systemctl is-active apache2
- Проверка прав:
ls -la /var/www | head
- Быстрый curl:
curl -s -o /dev/null -w "%{http_code}" http://web01/
Итог
Это пошаговое руководство даёт рабочие Rexfile‑примеры для базы данных и веб‑сервера, объясняет, как управлять externals в SVN, и предлагает чек‑листы для контроля качества и ролей. Используйте SSH‑ключи, модульную структуру библиотек и автоматизируйте проверки после каждого deploy.
Важно: адаптируйте конфигурации (пользователи, пароли, пути) под вашу политику безопасности.
Похожие материалы

Разные обои для каждого экрана Android

Удаление данных с сайтов брокеров

Разные обои для каждой домашней страницы Android

Мониторинг и управление Apache Tomcat

Как исправить приложение Disney Plus — быстрое решение
