Гид по технологиям

Автоматизация настройки баз данных и веб‑серверов с помощью Rex

5 min read DevOps Обновлено 18 Sep 2025
Rex: настройка БД и веб‑сервера
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).

Тестовые шаги (ручная проверка)

  1. Выполнить rex prepare для srvdb и srvweb.
  2. Проверить статус сервисов: systemctl status mysql и systemctl status apache2.
  3. Сделать curl к веб‑серверу: curl -I http://web01/.
  4. Проверить логи: /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 — проверьте контексты и права.

Мини‑методология развертывания (быстрая последовательность)

  1. Настройка репозиториев и externals.
  2. Создание Rexfile и определение групп хостов.
  3. Запуск rex prepare для базовой настройки.
  4. Тестирование доступности сервисов и логов.
  5. Запуск rex deploy для публикации приложений.
  6. Мониторинг и откат при необходимости.

Пример ролей и действия при инциденте

Инцидент: веб‑сайт недоступен после deploy.

  1. Откат: восстановить последний рабочий архив из резервной копии и выполнить deploy.
  2. Проверить логи Apache и ошибок PHP.
  3. Проверить статус файлов и владельцев в /var/www.
  4. Если причина — база, проверить подключение 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.

Важно: адаптируйте конфигурации (пользователи, пароли, пути) под вашу политику безопасности.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

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

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

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

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

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

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

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

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

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

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

Запуск Python-скриптов по расписанию в Windows
Автоматизация

Запуск Python-скриптов по расписанию в Windows