EC2で無料タスク管理 〜マイクロインスタンスにRedmine1.1.2をセットアップ その3

この記事は、以下のステップでEC2 マイクロインスタンスRedmineを利用したタスク(プロジェクト)管理システムの構築について説明しています。

  1. EC2 マイクロインスタンス作成
  2. Redmine 1.1.2をインストール
  3. GmailSMTPサーバーを設定
  4. SVNのセットアップとRedmineプロジェクトと連携 (今回ここ)
  5. その他運用設定

前回の記事EC2で無料タスク管理 〜マイクロインスタンスにRedmine1.1.2をセットアップ その2では、EC2のインスタンスRedmineをインストールするところまで解説しました。

今回は、SubversionをセットアップしRedmineプロジェクトとリポジトリの連携するところまで、以下のステップで説明していきます。
(ちなみに、今回はEC2に依存する内容はほぼありません。)

  1. Subversionのインストール
  2. リポジトリの作成
  3. 作成したリポジトリRedmineに設定する
  4. Redmineのアカウント情報でSubversionも認証できるようにする

Subversionのインストール

$ yum install mod_dav_svn subversion

バージョンを確認してみました。

$ svn --version
svn, バージョン 1.6.15 (r1038135)
   コンパイル日時: Jan 25 2011, 21:43:23
・・・

Apacheの設定

Apachesubversionの設定をします。

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

以下の箇所をコメントアウトして。まずは最低限必要な箇所のみ編集しました。

<Location /repos>
   DAV svn
   SVNParentPath /var/www/svn

   # Limit write permission to list of valid users.
   <LimitExcept GET PROPFIND OPTIONS REPORT>
      # Require SSL connection for password protection.
      # SSLRequireSSL

      AuthType Basic
      AuthName "Authorization Realm"
      AuthUserFile /etc/httpd/conf.d/svn_auth ←ここ以外はコメントアウトしただけ
      Require valid-user
   </LimitExcept>
</Location>

最後にRedmineのアカウントで認証を行うように設定しますが、とりあえず、パスワードファイルを作成する手順で動作の確認を進めます。

$ sudo touch /etc/httpd/conf.d/svn_auth
$ sudo htpasswd /etc/httpd/conf.d/svn_auth <アカウント名>
New password: 
Re-type new password: 
Adding password for user <アカウント名>

アカウント名は、Redmineのアカウント名と揃えます。

実際の環境では、RedmineをVirtualHostで設定したので、Subversionは別のHost名でアクセスする必要があるので、SubversionもVirtualHostを設定しました。

<VirtualHost *:80>
  ServerName svn.example.com
  <Location /repos>
   DAV svn
   SVNParentPath /var/www/svn

#   # Limit write permission to list of valid users.
#   <LimitExcept GET PROPFIND OPTIONS REPORT>
#      # Require SSL connection for password protection.
#      # SSLRequireSSL

      AuthType Basic
      AuthName "Authorization Realm"
      AuthUserFile /etc/httpd/conf.d/svn_auth
      Require valid-user
#   </LimitExcept>
  </Location>
</VirtualHost>

Apacheを再起動

$ sudo service httpd restart

リポジトリルートの作成

subversion.confのSVNParentPathに設定したパスのディレクトリを作成します。

sudo mkdir /var/www/svn

リポジトリの作成

/etc/httpd/conf.d/subversion.confの中には、以下の用にコメントでリポジトリの作り方が書いてあります。

# this configuration, run as root:
#
#   # cd /var/www/svn
#   # svnadmin create stuff
#   # chown -R apache.apache stuff
#   # chcon -R -t httpd_sys_content_t stuff
#

これを参考にリポジトリを作成していきます。

$ sudo svnadmin create myproj

ストレージはデフォルトだとfsfsが使用されます。(http://durak.org/sean/pubs/software/version-control-with-subversion-1.6/svn.reposadmin.create.html)

推奨されるディレクトリ構成を用意します。(参考:http://sir2.jugem.jp/?eid=3)

$ sudo svn mkdir file:///var/www/svn/myproj/trunk -m 'setup trunk'
$ sudo svn mkdir file:///var/www/svn/myproj/branches -m 'setup branches'
$ sudo svn mkdir file:///var/www/svn/myproj/tags -m 'setup tags'

myprojディレクトリ以下のオーナーおよびグループをapacheに変更します。
(-uを指定しないでsvn mkdirをすると一部ファイルがrootになってしまうので、後からchownしました。ec2-userのパスワードを設定して、mkdirの際に-u apacheを指定すれば良いと思われますが、とりあえず最小限の手順で進めてみました)

$ sudo chown -R apache.apache myproj

プロジェクトのインポート

ローカルのプロジェクトをSVNサーバーにインポート
(このコマンドはローカルのPCで実行してます)

$ svn import ./myproj http://svn.example.com/repos/myproj/trunk -m 'Initial import of My Project'
認証領域: http://svn.example.com:80 Authorization Realm
'hrendoh' のパスワード: 

プロジェクトをチェックアウトして確認する場合は、以下のように実行します。
(このコマンドはローカルのPCで実行してます)

$ svn co http://hrendoh@svn.example.com/repos/myproj

プロジェクトにリポジトリを設定する

Redmine側のリポジトリ設定については以下のサイトに説明が載っています。
http://redmine.jp/tech_note/subversion/

ここでも一応簡単に説明します。

プロジェクトの[設定]を開き[リポジトリ]タブを開きます。

設定後、プロジェクトの[リポジトリ]タブを開くと以下のように表示されます。

初回は結構時間がかかります。

コミット時にチケットを指定する

以下は、#50のチケットに関連する更新としてコミットする場合の例です。

$ svn commit -m 'test commit1 refs #50'

コミットメッセージは指定したチケットを開くと以下の赤枠の箇所に表示されます。

参照用キーワードの記述例

refs #nnn
references #nnn
IssueID #nnn
#nnn

#nnnで関連付けられるなら、いつも#nnn使えばいいような。

キーワードはRedmineから、[管理]->[設定]->[リポジトリ]
[コミットメッセージ内でチケットの参照/修正]->[参照用キーワード]で確認、変更できます。

チケットのクローズの記述例

fixes #nnn
closes #nnn

こちらは、[管理]->[設定]->[リポジトリ]
[コミットメッセージ内でチケットの参照/修正]->[修正用キーワード]で確認、変更できます。

コミット時にRedmineに変更を反映する

RedmineSVNの更新情報が反映されるタイミングは、プロジェクトの[リポジトリ]タブを開いた時?です。

SVNコミット時に変更をRedmineに反映させる方法については、Redmine.JP Blogに載ってましたので参考にしてください。
http://blog.redmine.jp/articles/redmine-0_9-url-to-fetch-changesets/

今回、インストールしたRedmineのバージョンは1.1.2ですが、このブログの0.9の例を試したところ稼働が確認で来ました。

最低限の、実際に実行した手順を載せておきます。

Redmine側の設定
  1. [管理]->[設定]->[リポジトリ]を開く
  2. [リポジトリ管理用のWebサービスを有効にする]にチェックを入れる
  3. [APIキー]のテキストボックスの右にある[キーの生成]をクリックしてAPIキーを生成
  4. [保存]
Subversion側の設定

post-commit.tmplをrenameして追記してみました。

$ cd /var/www/svn/myrepos/hooks
$ sudo mv post-commit.tmpl post-commit
$ sudo vi post-commit

wgetがあるので末尾に以下を追加

# for redmine
/usr/bin/wget -q -O /dev/null http://www.example.com/sys/fetch_changesets?key=XsTsxFzLVwLrSZRK0sRv
$ chmod +x post-commit

RedmineのユーザーとApacheのユーザーの関連付け

少人数であればパスワードファイルのメンテナンスでも何とかなりますが、あとあと手間を掛けなくてよいように連携できるものは連携して置きたいところです。

mod_auth_mysqlをインストールします。

$ sudo yum -y install mod_auth_mysql

subversion.confを以下のように変更します。

$ sudo vi /etc/httpd/conf.d/subversion.conf
<VirtualHost *:80>
  ServerName svn.example.com
  <Location /repos>
   DAV svn
   SVNParentPath /var/www/svn

#   # Limit write permission to list of valid users.
#   <LimitExcept GET PROPFIND OPTIONS REPORT>
#      # Require SSL connection for password protection.
#      # SSLRequireSSL
      AuthMySQLEnable		On
      AuthMySQLSocket		/var/lib/mysql/mysql.sock
      AuthMySQLHost		localhost
      AuthMySQLUser		user_redmine
      AuthMySQLPassword	        <パスワード>
      AuthMySQLDB		db_redmine
      AuthMySQLUserTable	users
      AuthMySQLNameField	login
      AuthMySQLPasswordField	hashed_password
      AuthMySQLPwEncryption	sha1
      AuthMySQLNoPasswd	Off

      AuthType Basic
      AuthName "Authorization Realm"
#      AuthUserFile /etc/httpd/conf.d/svn_auth   <-コメントアウト
      Require valid-user
#   </LimitExcept>
  </Location>
</VirtualHost>

設定はこちらを参考にさせていただきました。
http://d.hatena.ne.jp/ksaito11/20090924

Apacheを再起動

$ sudo service httpd restart

以上で、RedmineSubversionのインストールと連携の設定は一通り終了です。

次回は、最後にバックアップを取得しそれをS3に保存するところまで説明したいと思います。