さくらVPS980でjetty/Hudsonを動かす

さくらインターネットVPSサービスが正式稼働となって1ヶ月となりました。これまでは専用サーバのエントリープランを使っていたのですが、用途が変わってきたので乗り換えを行っています。
これまでは、SVN, Trac, Hudson, Wiki(MoinMoin)などを稼働させるのが目的だったのですが、最近はSVN + TracGoogle Codeに移行してしまい、HudsonとWikiが主目的となっています。Wikiだけであればルート権限のないサーバでも良いですが、色々と実験したりするにはルート権限が欲しいですし、なによりHudsonを動かしたいわけです。
不安だったのはマシンパワーであり、Hudson(Appサーバ)を動かすのに耐えられるか?という点です。実際に動かしてみたところ、問題がなさそうなので手順をまとめておきます。
動作しているHudsonはここ

尚、VPS980のスペックは、メモリ512MB・HDD20G・CentOS5です。基本的なSSH等の設定はこちらがよくまとまってます。

JDK

さくらVPSCentOSなので、JDKOracleからrpmパッケージをダウンロードしてインストールするのが簡単です。尚、さくらVPSは64bitのCentOSなので、64bit版を選択してください。インストールはバイナリを実行すればOKです。

$ chmod +x jdk-6u21-linux-x64-rpm.bin
$ sudo jdk-6u21-linux-x64-rpm.bin

JDKは、/usr/java/ の下にインストールされます。JAVA_HOMEを次のように設定しておきましょう。

export JAVA_HOME=/usr/java/default/

確認。

$java -version
java version "1.6.0_21"
Java(TM) SE Runtime Environment (build 1.6.0_21-b06)
Java HotSpot(TM) 64-Bit Server VM (build 17.0-b16, mixed mode)

jettyの設置

Hudsonを稼働させるにはWeb Application Serverが必要です。代表的なWeb Application ServerはTomcatですが、VPSのスペックが高くはないので少しでも軽量なものをと言う事で、jettyを選択しました。jettyは Google App Engineでも採用されており、軽量で立ち上がりが早いのが特徴です。現在は、Eclipseのプロダクトの一部として開発が進められています。

インストールは特に必要なく、アーカイブダウンロードして解凍するだけです。ここでは最新安定版のjetty7.1.6を使います。ダウンロードページが見つけにくいですが、ここです。
設置場所はどこでも良いのですが、管理用のユーザ(例:admin)のホームディレクトリに設置しておきます。

$ cd ~
$ wget http://download.eclipse.org/jetty/7.1.6.v20100715/dist/jetty-distribution-7.1.6.v20100715.zip
$ unzip jetty-distribution-7.1.6.v20100715.zip
$ mv jetty-distribution-7.1.6.v20100715 jetty-7.1.6

設置場所は、/home/admin/jetty-7.1.6 となりました(JETTY_HOME)。

jettyの起動

jettyの起動には、JETTY_HOME/start.jar をjavaコマンドで実行します。

$ cd $JETTY_HOME
$ java -jar start.jar

デフォルトでは8080ポートで起動するので、アクセスして起動を確認してください。終了はCtrl + DでOKです。

Hudsonを設置する

Hudsonはwarでダウンロードできるので、JETTY_HOME/webappsにデプロイ(配置)するだけです。

$ cd $JETTY_HOME/webapps
$ wget http://hudson-ci.org/latest/hudson.war

先ほどと同じようにjettyを起動し、8080ポートのhudsonでアクセスできます(http://hostname:8080/hudson)。

Apacheから80ポートでアクセスさせる

折角なので、http://hudson.hostname/ でアクセスできるようにします。
やることは次の通り。
* ApacheのVirtualHostの設定とajpの設定
* jettyのコネクターにajnを追加(8080を無効化)
* コンテキストルートでHudsonにアクセスさせる設定
* daemonとしてjettyを起動させるスクリプトの作成
まずApacehの設定ですが、/etc/httpd/conf.d/hudson.confを作成し、Virtual HostとProxyの設定をします。


LoadModule proxy_ajp_module modules/mod_proxy_ajp.so


ServerName hudson.hostname:80
ErrorLog logs/hudson.hostname-error_log
CustomLog logs/hudson.hostname-access_log common
ProxyPass / ajp://localhost:8009/

次に、jettyのコネクタの設定ですが、$JETTY_HOME/etc/jetty.xmlを編集します。Ajp13SocketConnectorを追加すればOKですが、8080のSelectChannelConnectorは不要になるのでコメントアウトしても構いません。




8009



< !--





300000
2
false
8443
20000
5000


    • >

ついでにアクセス数がほとんどないので、スレッド数を抑制しておきました。数値に根拠はありません。


< !-- Default queued blocking threadpool -->

< !-- 10 -->
5
< !-- 200 -->
50

次にhudsonをコンテキストルート(ajp://hostname:8009/)でアクセスできるように、hudson.warをroot.warにリネームします。また、test.warとその設定が残っていると上手く動作しないので削除します。

$ mv $JETTY_HOME/webapps/hudson.war $JETTY_HOME/webapps/root.war
$ rm $JETTY_HOME/webapps/test.war
$ rm $JETTY_HOME/contexts/test.xml
$ rm -r $JETTY_HOME/contexts/test.d

最後にjettyをdaemonで起動するスクリプトと停止するスクリプトを書いておきます。

start-jetty.sh

#!/bin/sh
echo "Start jetty server"
cd $JETTY_HOME
java -DSTOP.KEY=jetty -DSTOP.PORT=8070 -jar start.jar OPTIONS=Server,ajp --daemon &

stop-jetty.sh

#!/bin/sh
cd $JETTY_HOME
java -DSTOP.KEY=jetty -DSTOP.PORT=8070 -jar start.jar --stop

STOP.KEYとSTOP.PORTは適当な値を設定してください。オプションの詳細は「 java -jar start.jar --help」で確認できます。

以上で、http://hudson.hostname/ でHudsonにアクセスできるようになります。月々980円で、Hudsonを運用できるってのはいいですね!