テクノロジーガイド

Rexでデータベースとウェブサーバーのタスクを作成

2 min read DevOps 更新されました 18 Sep 2025
RexでデータベースとWebサーバーを自動化
RexでデータベースとWebサーバーを自動化

目的と想定読者

このガイドは、Rex(Rexfile)を使ってサーバーのセットアップ自動化タスクを作成する手順を示します。対象はシステム管理者、DevOps エンジニア、リリース担当者です。

重要用語(1行定義)

  • Rexfile:Rex のタスクを定義するファイル。Perl の構文でタスクを記述します。
  • svn:externals:Subversion の外部参照機能。別リポジトリをサブフォルダとして結合します。

データベース用タスクの作成

まずデータベースリポジトリへ移動します。

wks01 Service# cd ../database  
wks01 database# touch Rexfile

共通モジュールを外部リポジトリとして設定します。

wks01 database# svn propedit svn:externals .

エディタに以下を追加し、保存して閉じます。

lib/Common  http://svn01/svn/common
lib/Service http://svn01/svn/service

externals を設定したら、更新とコミットをします。

wks01 database# svn up  
wks01 database# svn ci -m "added external repositories"

svn up は外部リポジトリもチェックするため、共通リポジトリに新しいサービスが追加されると次回の svn up で取得できます。

次に Rexfile を作成してデータベースサーバーをセットアップするタスクを定義します。

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";
};

ポイント解説:

  • 1〜2 行目でターゲットホスト db01 に対する認証情報を設定しています。公開鍵認証も使えます。詳細は Rex のドキュメントを参照してください。
  • include で Common::NTP と Service::MySQL を読み込むと、それらのタスクは Perl 関数としても利用できます。
  • set group でサーバーグループ srvdb を定義し、db01 を割り当てます。複数ホストも可能です。

複数ホストの例:

set group => srvdb => "db01", "db02", "db03";
set group => srvdb => "db[01..03]";

12 行目では “prepare” タスクを定義しています。このタスクは srvdb グループの全サーバーで実行されます。タスク内では NTP の初期化、MySQL のインストール、設定、サービス再起動を行っています。

Rexfile をリポジトリにコミットします。

wks01 database# svn add Rexfile  
wks01 database# svn ci -m "inital commit of Rexfile"

データベースをセットアップするには次のコマンドを実行します。

wks01 database# rex prepare

実行可能なタスク一覧を表示するには次のコマンドを使います。

wks01 database# rex -T

ウェブサイト用タスクの作成

ウェブプロジェクトのディレクトリへ移動します。

wks01 database# cd ../website  
wks01 website# touch Rexfile

ここでも externals を定義します。

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 を作ってウェブサーバーをセットアップします。

# 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

アプリケーションデプロイの例

デプロイ用のタスクを追加すると、アプリケーションアーカイブから自動で配置できます。

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";
};

この例は単純なアップロード/展開フローです。実運用ではバージョニング、検証、ロールバックを考慮してください。


受け入れ基準

  • Rexfile の prepare タスクが対象サーバーでエラーなく完了すること。
  • サービス(mysql / apache2)が起動していること。
  • 設定ファイルが期待どおりに反映されていること(key_buffer や timeout 等)。
  • デプロイタスク実行後、Web コンテンツが /var/www に正しい権限で配置されアクセス可能であること。

役割別チェックリスト

運用管理者(Admin):

  • SVN externals を正しく設定してコミットできること。
  • Rex の実行権限(SSH 認証)を確認すること。
  • 本番環境への変更を適切に記録すること。

DevOps / リリース担当:

  • Rexfile に冪等性(同じコマンドを何度実行しても結果が安定する)を担保する。
  • デプロイ前にステージングで rex prepare を実行して確認する。
  • ロールバック手順を作成しておく。

開発者:

  • 配布アーカイブ(tar.gz)に必要なファイルが含まれていることを確認する。
  • 起動検証用の簡易ヘルスチェックを実装する。

トラブルシュート(よくある問題と対処法)

問題: svn up が externals を取得しない

  • 対処: svn propget svn:externals . で設定を確認する。URL が正しいか、アクセス権があるかをチェック。

問題: rex 実行で認証エラーが出る

  • 対処: user/password を見直す。公開鍵認証を使う場合は ~/.ssh/authorized_keys を確認する。

問題: サービスが再起動しても反映されない

  • 対処: 設定ファイルのパスやテンプレートが正しいか確認。Rex の configure タスクの引数を再確認する。

問題: デプロイ後にファイル権限で 403 が出る

  • 対処: extract の owner/group を確認し、www-data 等の正しいユーザーで配置されているか検証する。

ミニ・メソドロジー(作業手順の簡易フロー)

  1. リポジトリで svn:externals を設定してコミット
  2. Rexfile を作成(認証、include、グループ、タスク定義)
  3. ステージングで rex prepare を実行して検証
  4. 本番で rex prepare を実行
  5. 必要に応じて deploy タスクを実行してアプリ配置

まとめ

  • Rexfile と SVN externals を使えば、共通モジュールを再利用してサーバー構築を自動化できます。
  • prepare タスクで NTP、MySQL、Apache のセットアップをまとめて実行可能です。
  • デプロイタスクを追加することでアプリケーション配置も自動化できます。

重要: 本ガイドのコマンドや設定は例です。運用環境に適用する際はテスト環境で十分に検証してください。

共有する: X/Twitter Facebook LinkedIn Telegram
著者
編集

類似の素材

Androidでホーム画面ごとに別の壁紙を設定する方法
カスタマイズ

Androidでホーム画面ごとに別の壁紙を設定する方法

データブローカーから個人情報を削除する方法
プライバシー

データブローカーから個人情報を削除する方法

Androidでホーム画面ごとに壁紙を設定する方法
Android

Androidでホーム画面ごとに壁紙を設定する方法

Apache Tomcatの監視と管理ガイド
監視

Apache Tomcatの監視と管理ガイド

Disney Plusアプリが動かない時の修正ガイド
ストリーミング

Disney Plusアプリが動かない時の修正ガイド

WindowsでPythonスクリプトをタスクスケジューラで自動実行する方法
自動化

WindowsでPythonスクリプトをタスクスケジューラで自動実行する方法