概要

CentOS上に、Play Framework2 on JavaのCI環境を構築していきます。
長くなるので分割で。

もくじ

登場人物

  • Play Framework 2.2
  • Jenkins(Jenkins.war)
  • Git
  • CentOS 6.4 i386

コンセプト

  • ポータブルに!
  • 拡張性を持たせる!

構成、アーキテクチャ

構成

公式ドキュメントhttp://www.playframework-ja.org/documentation/2.1.5/HTTPServerにある、Apacheを使用した構成にします。

作成するサーバ群

  • webサーバ・・・Apacheを使用。VirtualHost機能を使って内部サーバを公開。
    • ポート転送設定
      • 80 ← 9001(Play 本番)
      • 50080 ← 8080(Jenkins)
      • 50081 ← 9011(Play リハーサル環境)
      • 50082 ← 9012(Play 開発環境)
  • 内部サーーバ
    • APサーバ(Play 本番環境)・・・Playをprodモードで起動する。ポートは9001。
    • APサーバ(Play リハーサル環境)・・・Playをprodモードで起動する。ポートは9011。
    • APサーバ(Play 開発環境)・・・Playをprodモードで起動する。ポートは9012。
    • Jenkins ・・・jenkins.war を起動。ポートはデフォルトの8080。
    • Gitサーバ(git+ssh) ・・・Gitコマンドのみ。ポートは22。
絵的にはこんな感じ。(雑な絵ですが)

手順その①:サーバ準備

今回はまず、ユーザアカウントの作成~httpdの設定まで。Git・Play・Jenkinsの設定は次回以降。

CentOSのインストール

CentOS-6.4-i386-minimal.iso からセットアップしました。最小構成。

ユーザの作成

作りたてなのでrootで入り、以下のユーザを作成。

  • 管理用アカウント( -G wheel)
  • playapp (本番アプリケーション起動ユーザ)
  • playapp.master (リハーサルアプリケーション起動ユーザ)
  • playapp.develop (開発アプリケーション起動ユーザ)
  • ciuser (Jenkins用ユーザ)
  • gituser (Gitサーバ用ユーザ)
1
2
3
4
# ユーザ作成とパスワード設定
$ useradd -m ユーザ名
$ passwd ユーザ名

※後で、機能単位で別サーバへ分割できるようにユーザを分けています

SSHの設定

以下の設定にしておく。細かい手順や設定内容は省略。

  • 公開鍵認証のみ可能
  • パスワード認証不可
  • ルートログイン不可

今回必要なソフトのインストール

1
2
3
4
$ yum -y install vim
$ yum -y install wget
$ yum -y install httpd

httpdの設定

テスト用のAPサーバとJenkinsへのポートをListenするようにする
1
2
$ vim /etc/httpd/conf/httpd.conf

※「Listen 80」の下に、下記3行を追加

  • Listen 50080
  • Listen 50081
  • Listen 50082
その他の設定はおこのみで。
各APサーバのVirtualHostの設定
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
$ cd  /etc/httpd/conf.d
$ vim httpd.playapp.conf
<VirtualHost *:80>
    ProxyPreserveHost On
    ServerName hogehoge.com
    ProxyPass / http://127.0.0.1:9001/
    ProxyPassReverse / http://127.0.0.1:9001/

    CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/playapp.access_log.%Y%m%d 86400" combined
    ErrorLog  "|/usr/sbin/rotatelogs /var/log/httpd/playapp.error_log.%Y%m%d 86400"
</VirtualHost>

# ポート番号やログファイル名などを『作成するサーバ群』のメモに合わせて、上記と同様に作成
$ vim httpd.playapp.master.conf
$ vim httpd.playapp.develop.conf

JenkinsのVirtualHostの設定
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
$ cd  /etc/httpd/conf.d
$ vim httpd.jenkins.conf
<VirtualHost *:50080>
    ProxyPreserveHost On
    ServerName hogehoge.com
    ProxyPass / http://127.0.0.1:8080/
    ProxyPassReverse / http://127.0.0.1:8080/

    RequestHeader unset Authorization

    CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/jenkins.access_log.%Y%m%d 86400" combined
    ErrorLog  "|/usr/sbin/rotatelogs /var/log/httpd/jenkins.error_log.%Y%m%d 86400"
</VirtualHost>

※「RequestHeader unset Authorization」の記述を抜かすとJenkinsのリモートホスト側でBasic認証が発生してハマるので注意。(ハマりました・・・)
参考:http://d.hatena.ne.jp/akuwano/20130128/1359373111

全体的にベーシック認証する場合は、以下のファイルも
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
$ cd  /etc/httpd/conf.d
$ vim BasicAuth.conf
<Location "/">
    AuthType Basic
    require valid-user
    AuthName "Play Apps"
    AuthUserFile /etc/httpd/conf.d/.htpasswd

    Order allow,deny
    Allow from all
</Location>

サービス再起動

1
2
3
$ apachectl configtest
$ service httpd restart

iptablesの設定

設定ファイルの編集
1
2
$ vim /etc/sysconfig/iptables

以下の行を、設定ファイルの真ん中あたりに追加(ポート22用の行をコピーしてポート番号のみ変更)

  • -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
  • -A INPUT -m state --state NEW -m tcp -p tcp --dport 50080 -j ACCEPT
  • -A INPUT -m state --state NEW -m tcp -p tcp --dport 50081 -j ACCEPT
  • -A INPUT -m state --state NEW -m tcp -p tcp --dport 50082 -j ACCEPT
サービス再起動
1
2
$ service iptables restart

SELinuxの設定

リバースプロキシの許可

httpd_can_network_connect を on に変更する

1
2
3
4
5
6
$ setsebool -P httpd_can_network_connect 1

# 確認
$ getsebool httpd_can_network_connect
httpd_can_network_connect --> on

ひとまずサーバの準備はここまで。次回へ続きます。

参考URL