CentOSにGitBucketを構築してみた。
リポジトリ管理は、GitHubやBitbucketなどがあるが、自分のサーバでも管理できるGitbucketなるものがあるとのことで導入してみた。
構築時に参考にさせて頂いたページ
- http://homepage1.nifty.com/y-osumi/works/code/tomcat7/
- http://d.hatena.ne.jp/tageo/20140924/1411624128
- http://www.atmarkit.co.jp/ait/articles/0710/11/news121.html
Javaをインストールする。
# yum install jdk-1.8.0 jdk-1.8.0-devel
Tomcatをインストールする。
tomcat.apache.orgからダウンロードして、/usr/localに展開する。
Tomcatのディレクトリ名はtomcatへ変更した。
# cd /usr/local/src
# wget http://ftp.kddilabs.jp/infosystems/apache/tomcat/tomcat-8/v8.0.15/bin/apache-tomcat-8.0.15.tar.gz
# tar zxvf apache-tomcat-8.0.15
# mv apache-tomcat-8.0.15 /usr/local/tomcat
Tomcatの実行ユーザを作成する。
実行ユーザがrootであることがセキュリティ上問題があるため、Tomcat実行用のユーザを作成する。
# useradd -s /sbin/nolog tomcat
# chown -R tomcat:tomcat /usr/local/tomcat
GitBucketのダウンロード
Tomcatのデフォルトアプリケーション配置フォルダへ、ダウンロードする。
# cd /usr/local/tomcat/webapps
# wget https://github.com/takezoe/gitbucket/releases/download/2.3/gitbucket.war -O gitbucket.war
tomcatの起動
Apacheと連携させるため、httpのコネクタポートは無効にし、ajpで連携する。
<!--
<connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443">
-->
<connector port="8009" protocol="AJP/1.3" redirectPort="8443">
Tomcatのサービス開始には下記のシェルスクリプトを実行すればいい。
起動スクリプトは別途掲載予定。
# /usr/local/tomcat/bin/startup.sh
デフォルトであれば、Tomcatの起動に合わせてwarファイルが展開され、下記ディレクトリが作成される。作成されたgitbucketディレクトリの所有者もtomcatに変更しておくように。
# chown -R tomcat:tomcat /usr/local/tomcat/webapps/gitbucket
展開されない場合は、/usr/local/tomcat/conf/server.xmlにあるHOSTタグのunpackWARs要素を確認。
Apacheとtomcatを連携し、静的ファイルの処理Apacheを任せる。
今回は、yum installされたApache上にVirtualHostを用意し、ReverseProxyでTomcatと連携する。
その際に/usr/local/tomcat/webapps/gitbucket/assetsは、ProxyせずにApacheに処理してもらう。
<VirtualHost *:80>
DocumentRoot /usr/local/tomcat/webapps/gitbucket
ServerName gitbucket.test.com
ErrorLog logs/gitbucket-error_log
CustomLog logs/gitbucket-access_log common
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /assets !
ProxyPass /gitbucket ajp://localhost:8009/gitbucket
ProxyPassReverse /gitbucket ajp://localhost:8009/gitbucket
ProxyPreserveHost on
</VirtualHost>
Apacheを再起動する。
# service httpd restart
Gitbucketの起動確認
ブラウザから下記にアクセス!
http://gitbucket.test.com/gitbucket
初回ログインは、下記でOK。
- Username:root
- Password:root
注意点
Gitbucketの静的ファイルのpathは、gitbucket/assetsであるのでProxyPassは/gitbucketでアクセスするようにしなければ、pathの誤りとして判断され、404を返す。
Apacheにファイルを処理される場合は、Apacheからどのように見えるかを考えてProxyPassを設定しなければいけない。
CentOS6系でのGitを使用した際の注意点
git push/cloneするときに「 return code 22 」のエラーでpushやcloneができない事態があった。原因は、CentOS6系のgitの挙動のようで、Basic認証をユーザに問わないでGitBucketへリクエストを投げてしまうことが原因だった。
** 解決方法 **
.git/configのurlにユーザ名を追加する。
[remote "origin"]
url = http://yn0314@hogehoge.com/gitbucket/git/yn0314/fuga.git
これでようやくCentOSからgit pushできる(ノД`)
しかし、ほかにいい方法はないのだろうか・・・