Git+Redmine3+nginxの環境構築②

Git+Redmine3+nginxの環境構築①の続きです。

RedmineとGitをSCM連携させる

GitサーバへのアクセスをRedmineのユーザで認証管理できるようにします。
あと、Redmineでプロジェクトを作成する際に自動でリポジトリを作成できるようにもなります。
SCM CreatorというRedmine用のプラグインがあるので、それを導入します。

SCMプラグインのインストール

まずは、プラグインのダウンロード。

# cd /var/lib/redmine/plugins/
# svn export http://subversion.andriylesyuk.com/scm-creator redmine_scm

お次に、Git(SVN)のリポジトリを管理するディレクトリを作成します。

# mkdir -p /var/www/repos/{svn,git}
# chown -R http:http /var/www/repos/

そして、SCMの設定ファイルを作成します。

# vim /var/lib/redmine/config/scm.yml
production:
  deny_delete: false
  auto_create: true
  svn:
    path: /var/www/repos/svn        ←さっき作成したディレクリト
    svnadmin: /usr/bin/svnadmin
    url: https://hoge.jp/repos/svn  ←自分のURLに合わせてください
  git:
    path: /var/www/repos/git        ←さっき作成したディレクリト
    git: /usr/bin/git
    options: --bare
    url: https://hoge.jp/repos/git  ←自分のURLに合わせてください
    update_server_info: true
    git_ext: true

プラグインの初期設定。

# cd /var/lib/redmine/
# RAILS_ENV=production bundle exec rake db:migrate:plugin


Gitサーバの構築(Redmine連携)

Gitサーバ(リポジトリ)にhttpでアクセスできるようにする為に、apacheをインストールします。
Webサーバはnginxなんじゃ?と思うかもしれませんが、このプラグインがapache用だからです。
#nginx⇒apacheのリバースプロキシするかたちになります。

というわけで、apacheと必要なモジュールをインストール

# yum install httpd
# yum install mod_perl perl-DBI perl-Digest-SHA1 perl-Digest-SHA perl-DBD-MySQL mod_dav_svn

そして、設定。
ポート80はnginxで使用しているので、それ以外を使用するようにします。
あとは起動ユーザをhttpユーザで統一。

# vim /etc/httpd/conf/httpd.conf
Listen 8082
User http
Group http

Redmineで管理しているユーザ/パスワードで認証できるように設定します。

# mkdir -p /usr/lib64/perl5/vendor_perl/Apache/Authn
# ln -s /var/lib/redmine/extra/svn/Redmine.pm /usr/lib64/perl5/vendor_perl/Apache/Authn/Redmine.pm
# vim /etc/httpd/conf.d/scm.conf
PerlLoadModule Apache::Authn::Redmine

# Subversion
<Location /repos/svn>
  DAV svn
  SVNParentPath "/var/www/repos/svn"

  AuthType Basic
  AuthName "Redmine SVN Repository"
  AuthUserFile /dev/null
  Require valid-user

  #PerlAccessHandler Apache::Authn::Redmine::access_handler
  PerlAuthenHandler Apache::Authn::Redmine::authen_handler

  RedmineDSN "DBI:mysql:database=redmine;host=localhost"
  RedmineDbUser "redmine"
  RedmineDbPass "password"  ←パスワードは自分のものに変えてください
</Location>

# Git
SetEnv GIT_PROJECT_ROOT /var/www/repos/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /repos/git/ /usr/libexec/git-core/git-http-backend/
<Location /repos/git>
  AuthType Basic
  AuthName "Redmine Git Repository"
  AuthUserFile /dev/null
  Require valid-user

  #PerlAccessHandler Apache::Authn::Redmine::access_handler
  PerlAuthenHandler Apache::Authn::Redmine::authen_handler

  RedmineDSN "DBI:mysql:database=redmine;host=localhost"
  RedmineDbUser "redmine"
  RedmineDbPass "password"  ←パスワードは自分のものに変えてください
  RedmineGitSmartHttp yes
</Location>

設定したら、起動します。(自動起動設定も)

# service httpd start
# chkconfig httpd on

あとは、nginxにapacheへのリバースプロキシ設定を追加します。

# vim /etc/nginx/conf.d/default.conf
upstream apache_server {
    server 127.0.0.1:8082 fail_timeout=0;
}

server {
    location ~ /repos/ {
        proxy_redirect     off;
        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_set_header   Host              $http_host;
        proxy_set_header   X-Real-IP         $remote_addr;
        proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header   Host $host;

        proxy_pass         http://apache_server$request_uri;
    }
}

あとはnginxとredmineを再起動。

# nginx -t
# service nginx restart
# service redmine restart


確認と使い方

まずは、redmineにログイン(インストール後はadmin/adminですね)します。
管理⇒プラグインと進むと、SCM Createrがプラグインとして認識されているはずです。

あとは、新しいプロジェクトを作成する画面では、SCMの項目が増えているはずです。

scm.png

試しにgit_testというプロジェクトをSCMにGitを選択して作成してみます。

# ll /var/www/repos/git/
total 4
drwxr-xr-x 7 http http 4096 Mar 21 09:41 git_test.git

こんなかんじで、自動でGitリポジトリが作成されるようになります。

次に、Redmineからリポジトリを参照してみます。
Redmineから該当プロジェクトを選択し、リポジトリタブを選択します。

repo_404.png

すると404の表示が出るので、あれ?と思うかもしれませんが、これは正常なのでご安心を。
リポジトリの中身が空なので、この表示になっているだけです。
なので、リポジトリにファイルを登録してみます。

ちなみに、Gitリポジトリにアクセスする際にはRedmineに登録したユーザで認証することになります。
該当プロジェクトへの参照権限、更新権限がそのままGitリポジトリの参照、更新権限になりますので、
アクセスするユーザをプロジェクトへ追加するのを忘れずに行ってください。
↑ではまることが良くありますのでご注意を!(経験者は語るw

リポジトリをクローン、ファイルを追加し、コミット&プッシュします。(このあたりはGitの使い方ですねw)
リポジトリのURLは「http://hoge.jp/repos/git/git_test」こんな感じです。

すると、登録したファイルがRedmineのリポジトリタブに表示されます。

repo.png


以上で構築は完了です。お疲れ様でした!


以下は余談(笑)
さくらのVPS(メモリ1G)に構築した際のメモリ使用量を見てみました。(サーバ再起動後にRedmineを少し表示した後)

# free
             total       used       free     shared    buffers     cached
Mem:       1020064     528196     491868        380      15928     104000
-/+ buffers/cache:     408268     611796
Swap:      2097148          0    2097148

結果、意外と大丈夫そうでした!