目次

Version 7, last updated by Hannes_76 at Dec 02 09:09 UTC

Jetty と PostgreSQL のセットアップ

この記事は、私が実際にセットアップを行って動作させるまでの手順を説明したステップガイドです。使用した環境は次のとおりで、Lift フレームワークはリリース 2.1 を使いました。

開発環境:
Kubuntu 9.10, Jetty 6.1, PostgreSQL 8.3

実働環境:
Ubuntu Server 8.04, Jetty 5.1, PostgreSQL 8.3

実働システム (サーバー) 上で、次の設定を行います。

1. Jetty と PostgreSQL のインストール
まず、Jetty を取得するために /etc/apt/sources.list に Multiverse リポジトリを追加する必要があります。


# apt-get update
# apt-get install jetty
# apt-get install postgresql-8.3

2. ファイアウォールの設定
デフォルトでは、PostgreSQL 8.3 はポート 5432 でクライアントの接続をリスンします。Jetty 5.1 はデフォルトではポート 8280 でリスンします。したがって、これらのポートへの/からの TCP 接続を許可するために、IPTables の設定に 2 つルールを追加する必要があります。PostgreSQL の方は、外部から接続する必要はないので、ローカルルールだけで十分です。


# iptables -A INPUT -s 127.0.0.1/32 -p tcp -m tcp --dport 5432 -j ACCEPT
# iptables -A INPUT -p tcp -m tcp --dport 8280 -j ACCEPT

3. PostgreSQL データベースとユーザーの作成
PostgreSQL が動作していることを確認します。デフォルトでは、PostgreSQL のインストール時に UNIX ユーザー ‘postgres’ が作成されます。このユーザーを使って、データベースの作成と削除や、ローカルデータベースユーザーの作成を行うことができます。作業を始める前に、PostgreSQL が動作していることを確認します。

# /etc/init.d/postgresql-8.3 start

ユーザー postgres になります。

# su postgres

データベースを新規作成します。

# createdb liftdatabase

PostgreSQL のコマンドプロンプトを起動し、新しいユーザーを作成します。


# psql
postgres=# create user george password 'topsecret';
postgres=# \q

PostgreSQL から “CREATE ROLE” という応答が返ってきます。

次のステップは開発用マシンで行う必要があります。

4. PostgreSQL を使うための Lift の設定
PostgreSQL については、こちらにも記事があります。Lift プロジェクトでは、src/main/resources/props/default.props を編集する必要があります。次のエントリを追加します。


db.driver=org.postgresql.Driver
db.url=jdbc:postgresql:liftdatabase
db.user=george
db.password=topsecret

Boot.scala で、次のような部分を探し、適宜編集します。


val vendor = new StandardDBVendor(Props.get("db.driver") openOr "org.postgresql.Driver",
			     Props.get("db.url") openOr "jdbc:postgresql:mydatabase",
			     Props.get("db.user"), Props.get("db.password"))

アプリケーションを起動すると、Lift は default.props から db.driver、db.url などの読み取りを試みます。default.props ファイルが存在しない場合、Lift は openOr で指定されたデフォルト値を使います。

続いて、pom.xml ファイルに PostgreSQL 8.3 の依存関係を追加します。


<dependency>
   <groupId>postgresql</groupId>
   <artifactId>postgresql</artifactId>
   <version>8.3-606.jdbc4</version>
</dependency>

5. WAR ファイルの作成とサーバーへの配置
Lift プロジェクトがあるディレクトリに移動し、次のコマンドを実行します。


# mvn clean install
# mvn package

これで、アプリケーションの新しいクリーンなバージョンがコンパイルされ、target サブディレクトリに (すべての依存関係を含んだ) .war ファイルが作成されます。この .war ファイルをリモートサーバーにコピーします。コピーするには、たとえば SSH2 の sftp エイリアスを使用できます。

元の実働システムに戻ります。

6. WAR ファイルと Jetty
Jetty には、起動時に .war ファイルを探すディレクトリがあります。Ubuntu Server 8.04 ではこのディレクトリは /usr/share/jetty/webapps です。.war ファイルをこの場所にコピーし、続いて次のコマンドを実行します。


# /etc/init.d/jetty stop
# /etc/init.d/jetty start

.war ファイルのあるディレクトリに変更を加えた場合、Jetty を再起動しないと変更内容は認識されません。

Jetty は起動までしばらく時間がかかります。私の設定環境ではたいてい 30 秒以上かかりました。ですから、せっかちにならずに起動するまで待ちましょう。

Jetty が正常に起動したら、http://yourdomain:8280/your-app でアプリケーションにアクセスできます。your-app は、.war ファイルの (.war の部分を取り去った後の) 名前です。

Jetty が起動しない場合には、/var/log/jetty/ にある Jetty のログファイルを調べてください。

7. カスタム CSS
カスタムデザインを盛り込んだ独自の CSS ファイルを使っている場合には、Jetty を使ったときに CSS ファイルが読み込まれないことがあるかもしれません。私はこの問題にぶつかりました。原因は、アプリケーションのルートが変わって、CSS ファイルへのパスが不適切になっていたためでした。私の src/main/webapp/templates-hidden/default.html ファイルでは、CSS ファイルを次のように指定していました。


<head>
...
<link href="/static/design.css" rel="stylesheet" type="text/css" />
...
</head>

このため、design.css ファイルはアプリケーションの static フォルダ内に置かれていました。CSS ファイルが正しく読み込まれるようにするには、Boot クラスの boot() メソッドの中に LiftRule を追加する必要があります。具体的には次のようにします。


LiftRules.fixCSS("static" :: "design" :: Nil, Empty)

説明: メソッド fixCSS の List パラメータは CSS ファイルへのパスを定義します。ここで、“static” はルートフォルダの下のサブフォルダで、“design” はそのフォルダ内にある拡張子が .css のファイルです。このパスは、default.html で定義したパスと一致している必要があります。詳細については、Ligt Book の 229 ページ以降を参照してください。

以上です。