dist'ant

an implementation of distributed Ant processor for deployment

インストール

更新配布サーバの基本構成...
Java SE8、Apache Web Server(WebDav、Proxy)、Tomcatのインストール

ここではデモサイトの構成時を例に、公式パッケージでJava SE 8が提供されているCentOS 7 (1503)に更新配布サーバを構成するサンプルを提示します。

また、配布する更新データはWebDavでアップロードするものとし、BASIC認証とWebDavサーバを提供するApache Web Serverの構成も併せて行います。

SELinuxを有効にする場合は下記のパッケージをインストールしておいてください。

# yum install policycoreutils-python

Java SE 8(SDK)をインストールします。

公式パッケージのTomcatを使用する場合は依存関係の都合でopenjdk-1.7.0-openjdk-develのインストールも必要になります。

alternativesの設定ではjava-1.8.0を選択します。

$ sudo yum install java-1.7.0-openjdk-devel
$ sudo yum install java-1.8.0-openjdk-devel
$ sudo alternatives --config jre_openjdk
$ sudo alternatives --config java
$ sudo alternatives --config java_sdk_openjdk
$ sudo alternatives --config javac

続いてTomcatをインストールします。

ここで必要に応じてtcp:8080ポート(BASIC認証なし)のファイアウォール設定(ローカルネットワークからのアクセス許可等)を行ってください。

$ sudo yum install tomcat
$ sudo systemctl enable tomcat
$ sudo systemctl start tomcat

Apache Web Serverをインストールします。

下記の例ではtcp:80ポートを許可していますが、実運用環境ではSSL証明書の設定や80ポートの代わりにtcp:443ポートの許可が必要です。

$ sudo yum install httpd
$ sudo systemctl enable httpd
$ sudo systemctl start httpd
$ sudo firewall-cmd --add-service=http --permanent
$ sudo firewall-cmd --reload

Basic認証用のパスワードファイルを用意します。

$ sudo htpasswd -c /etc/httpd/conf.d/tomcat.distant.htpasswd guest

WebDav用の公開ディレクトリを用意し、権限の設定を行います。

$ sudo mkdir -p /var/www/demo/webdav
$ sudo chown apache:apache /var/www/demo/webdav

SELinuxを有効にする場合はWebDav用ディレクトリへの書込み等を許可しておきます。

$ sudo semanage fcontext -a -t public_content_rw_t '/var/www/demo/webdav(/.*)?'
$ sudo restorecon -R -v /var/www/demo
$ sudo setsebool -P allow_httpd_anon_write on

Apache Web ServerにVirtualHostの設定を行います。

$ sudo vi /etc/httpd/conf.d/tomcat.conf

デモサイトなので特定のユーザ以外には更新できないように設定(<LimitExcept>)を追加しています。

<VirtualHost *:80>
    ServerName distant.pkgs.at

    ProxyRequests Off
    ProxyPass / ajp://localhost:8009/
    ProxyPassReverse / ajp://localhost:8009/

    <IfModule mod_dav.c>
        DavLockDB "/tmp/DavLock"
    </IfModule>

    <Location /demo>
        AuthType Basic
        AuthName "Dist'ant Demo Site"
        AuthUserFile /etc/httpd/conf.d/tomcat.distant.htpasswd

        Require valid-user
    </Location>
    <IfModule mod_dav.c>
        Alias /demo/webdav "/var/www/demo/webdav"
        <Location /demo/webdav>
            ProxyPass !
            DAV On
            AllowOverride None
            Options None
            <LimitExcept GET HEAD OPTIONS PROPFIND>
                Require user ********
            </LimitExcept>
        </Location>
    </IfModule>
</VirtualHost>

VirtualHostの設定を行ったのでApache Web Serverをリスタートします。

$ sudo systemctl restart httpd

以上で更新配布サーバの基本構成が完了しました。

更新配布サーバへのインストール...

更新データディレクトリを作成し、権限を設定します。

$ sudo mkdir -p /var/local/distant/demo
$ sudo chown tomcat:tomcat /var/local/distant/demo

設定ファイルのルートディレクトリを作成し管理者(例ではsysadm)を所有者にしておきます(任意)。

$ sudo mkdir /usr/local/etc/distant
$ sudo chown sysadm:sysadm /usr/local/etc/distant

ビルドファイル(build.xml)の配置先を用意し、ビルドファイルを配置します。

ファイル名はプロジェクト名.xmlにします。

$ mkdir /usr/local/etc/distant/demo.d
$ vi /usr/local/etc/distant/demo.d/webapp.xml

下記はデモサイトのwebappプロジェクトの例です。

<?xml version="1.0" encoding="UTF-8"?>
<project default="build">
	<target name="build">
		<echo>sleep 8 seconds</echo>
		<sleep seconds="8"/>
		<echo>done</echo>
	</target>
	<target name="ok-test">
		<echo>it will be succeed</echo>
	</target>
	<target name="ng-test">
		<echo>it will be aborted</echo>
		<fail />
	</target>
</project>

dist'ant設定ファイルを設置します。

$ vi /usr/local/etc/distant/demo.xml

下記はデモサイトの例です。

詳細は設定をご覧ください。

<?xml version="1.0" encoding="UTF-8"?>
<Site
		build="./demo.d"
		data="/var/local/distant/demo"
		resource="/var/www/demo/webdav">
	<Cluster name="prod.web">
		<Server name="web0" />
		<Server name="web1" />
	</Cluster>
	<Cluster name="test.web">
		<Server name="webx" />
		<Server name="weby" />
	</Cluster>
	<Project name="webapp">
		<Region name="test">
			<Server cluster="test.web" />
		</Region>
		<Region name="prod">
			<Server cluster="prod.web" />
		</Region>
	</Project>
	<Project name="batch">
		<Region name="test">
			<Server name="jobx" />
		</Region>
		<Region name="prod">
			<Server name="job0" />
		</Region>
	</Project>
	<Mail
			hostname="smtp.gmail.com"
			port="465"
			secure="true"
			username="********@gmail.com"
			password="********">
		<From address="********@gmail.com" />
		<ReplyTo address="********@architector.jp" />
		<To address="********@architector.jp" />
	</Mail>
</Site>

続いてTomcatの起動オプションにdist'antが読込む設定ファイルのパスを設定します。

$ sudo vi /etc/sysconfig/tomcat

-Dat.pkgs.distant.site:コンテキストパス=設定ファイルパスの書式になります。

-Dat.pkgs.distant.site:=はルートコンテキスト(/)、-Dat.pkgs.distant.site=はデフォルト値になります。

他のCATALINA_OPTSを渡す場合や複数設定する場合(空白区切り)は、行末に\を使用して行を継続できます。

CATALINA_OPTS= \
        -Dat.pkgs.distant.site:/demo=/usr/local/etc/distant/demo.xml

上記の設定を反映するためにTomcatをリスタートします。

$ sudo systemctl restart tomcat

最後に更新配布サーバのバイナリのダウンロードしwebappsディレクトリへ配備します。

$ sudo mkdir /usr/local/share/java
$ (cd /usr/local/share/java && \
   sudo curl -L -O http://distant.pkgs.at/download/at.pkgs.distant.site.war)
$ sudo ln -s /usr/local/share/java/at.pkgs.distant.site.war \
             /var/lib/tomcat/webapps/demo.war

以上で更新配布サーバへのインストールが完了しました。

デプロイ対象サーバへのインストール(systemd)...
CentOS 7など

ここではJava SE 6以降のJava実行環境(JRE)が構成済みという前提です。

サービス起動にはsystemdを利用します。

まず、適切なディレクトリに更新配布サーバからデプロイ実行バイナリをダウンロードします。

以降のhttp://localhost:8080/demo/(更新配布サーバのURL)は環境に合わせて読み替えてください。

$ sudo mkdir /usr/local/share/java
$ (cd /usr/local/share/java && \
   sudo curl -L -O http://localhost:8080/demo/control/bundled/at.pkgs.distant.jar)

デプロイユーザとデプロイ実行バイナリのサービス設定を行います。

下記の例ではデプロイ実行用ユーザdistant、サーバ名web0としています。

生成される設定ファイルのサンプルはこちらです。

$ sudo adduser --create-home distant
$ sudo su - distant
$ mkdir ~/web0
$ exit
$ (cd /etc/systemd/system/ && \
   sudo curl -L -O \
   http://localhost:8080/demo/control/configure/systemd/distant-web0.service)
$ sudo systemctl enable distant-web0
$ sudo systemctl start distant-web0

以上でデプロイ対象サーバへのインストールが完了しました。

デプロイ対象サーバへのインストール(upstart)...
CentOS 6など

ここではJava SE 6以降のJava実行環境(JRE)が構成済みという前提です。

サービス起動にはupstartを利用します。

まず、適切なディレクトリに更新配布サーバからデプロイ実行バイナリをダウンロードします。

以降のhttp://localhost:8080/demo/(更新配布サーバのURL)は環境に合わせて読み替えてください。

$ sudo mkdir /usr/local/share/java
$ (cd /usr/local/share/java && \
   sudo curl -L -O http://localhost:8080/demo/control/bundled/at.pkgs.distant.jar)

デプロイユーザとデプロイ実行バイナリのサービス設定を行います。

下記の例ではデプロイ実行用ユーザdistant、サーバ名web0としています。

生成される設定ファイルのサンプルはこちらです。

$ sudo adduser --create-home distant
$ sudo su - distant
$ mkdir ~/web0
$ exit
$ (cd /etc/init/ && \
   sudo curl -L -O \
   http://localhost:8080/demo/control/configure/upstart/distant-web0.conf)
$ sudo initctl start distant-web0

以上でデプロイ対象サーバへのインストールが完了しました。

デプロイ対象サーバへのインストール(その他)...

ここではJava SE 6以降のJava実行環境(JRE)が構成済みという前提です。

まず、適切なディレクトリに更新配布サーバからデプロイ実行バイナリをダウンロードします。

以降のhttp://localhost:8080/demo/(更新配布サーバのURL)は環境に合わせて読み替えてください。

$ sudo mkdir /usr/local/share/java
$ (cd /usr/local/share/java && \
   sudo curl -L -O http://localhost:8080/demo/control/bundled/at.pkgs.distant.jar)

デプロイ実行バイナリは、ビルドが終了するとリソースを開放する目的でプロセスが終了するため、終了ステータスが0であれば再起動するようにスクリプト側でループ処理が必要です。

ただし、Java SE 7以降であれば--daemonizeオプションを使用することでデーモン化できます。

$ java -jar /usr/local/share/java/at.pkgs.distant.jar
Usage: java -jar at.pkgs.distant.jar [OPTION...] CONTROL_URL SERVER

Options
  --daemonize
                       デーモンモードで起動(ワーカを起動し自動再起動する)
                       Java SE 7以降で利用可能
  --directory=DIRECTORY
                       ワーキングディレクトリを指定
  --group=GID_OR_GROUP_NAME
                       プロセスの実行グループを指定
  --user=UID_OR_USER_NAME
                       プロセスの実行ユーザを指定
  --pidfile=FILE
                       指定されたファイルにプロセスIDを書込む

上記のいくつかのオプションは一部環境(Windowsなど)では動作しません。

いくつかのシステムでは下記のように利用できるrcスクリプトが使用できるかもしれません。

生成されるスクリプトのサンプルはこちらです。

$ sudo adduser --create-home distant
$ sudo su - distant
$ mkdir ~/web0
$ exit
$ (cd /etc/rc.d/init.d/ && \
   sudo curl -L -O \
   http://localhost:8080/demo/control/configure/rcscript/distant-web0.conf)

こちらを利用する場合はシステムに応じたスクリプトの書き換えや配置、パーミッションの設定などを行います。