### 概要 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サーバ用ユーザ)
```sh # ユーザ作成とパスワード設定 $ useradd -m ユーザ名 $ passwd ユーザ名 ```※後で、機能単位で別サーバへ分割できるようにユーザを分けています

#### SSHの設定 以下の設定にしておく。細かい手順や設定内容は省略。
  • 公開鍵認証のみ可能
  • パスワード認証不可
  • ルートログイン不可
#### 今回必要なソフトのインストール ```sh $ yum -y install vim $ yum -y install wget $ yum -y install httpd ```
#### httpdの設定
##### テスト用のAPサーバとJenkinsへのポートをListenするようにする ```sh $ vim /etc/httpd/conf/httpd.conf ```※「Listen 80」の下に、下記3行を追加
  • Listen 50080
  • Listen 50081
  • Listen 50082
その他の設定はおこのみで。
##### 各APサーバのVirtualHostの設定 ```sh $ 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の設定 ```sh $ 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
##### 全体的にベーシック認証する場合は、以下のファイルも ```sh $ 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> ```
#### サービス再起動 ```sh $ apachectl configtest $ service httpd restart ```
#### iptablesの設定
##### 設定ファイルの編集 ```sh $ 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
##### サービス再起動 ```sh $ service iptables restart ```
#### SELinuxの設定
##### リバースプロキシの許可 httpd_can_network_connect を on に変更する ```sh $ setsebool -P httpd_can_network_connect 1 # 確認 $ getsebool httpd_can_network_connect httpd_can_network_connect --> on ```ひとまずサーバの準備はここまで。次回へ続きます。

### 参考URL