GitLab を CentOS 6.3 にインストール
GitLab とは
GitLab は、GitHub のクローンで、GitHub みたいにパブリックにしたくない場合、自分のサーバーにプライベートサービスとして使うことができるパッケージ。自分で git のリポジトリ立てる場合、管理が大変になってくるので、ブラウザで管理できるのは非常に楽である。
事前準備
ruby
ruby が必要になるので環境をrvmかrbenvかをインストールしておく。前に rbenv の記事は書いてあるので、参考に。
rbenv を CentOS 6.3 にインストール - 俺の成長日記
DB(MySQL、PostgreSQL, SQLite3 いずれか)
GitLab のアカウント管理に RDB を利用するので、MySQL、PostreSQL、SQLite3 いずれかをインストールしておく。
MySQL のインストールは以前記事に書いてあるので、参考にする。
http://d.hatena.ne.jp/katsuren/20120919/1348067825
Redis
KVS の DB として Redis も利用しているので、これもインストールしておく。
これも以前書いてる。参考:CentOS 6.2 サーバー構築手順 - 俺の成長日記
Apache
今回はApacheを使う。GitLabはRailsで作られているので、Passenger のインストールが必要になる。Apache をコンパイルするときに、mod_proxy を有効にしておく。
Passengerのインストール
rubygems から passenger をインストールしておく。
# gem i passenger ちなみに i は install の略らしい(ドヤァ)gem install 〜 でも同じ挙動になる。 # rbenv rehash # passenger-install-apache2-module
成功したら、conf にこれを書いてね、っていうのがでてくるので、${APACHE_ROOT}/conf.d/passenger.conf あたりに指示されたものを書いとく。
The Apache 2 module was successfully installed. Please edit your Apache configuration file, and add these lines: LoadModule passenger_module /usr/local/rbenv/versions/1.9.3-p286/lib/ruby/gems/1.9.1/gems/passenger-3.0.17/ext/apache2/mod_passenger.so PassengerRoot /usr/local/rbenv/versions/1.9.3-p286/lib/ruby/gems/1.9.1/gems/passenger-3.0.17 PassengerRuby /usr/local/rbenv/versions/1.9.3-p286/bin/ruby After you restart Apache, you are ready to deploy any number of Ruby on Rails applications on Apache, without any further Ruby on Rails-specific configuration!
pip のインストール
# cd /usr/local/src # curl -O https://raw.github.com/pypa/pip/master/contrib/get-pip.py # python get-pip.py
下記のようなエラーがでたら setuptools が入ってない。
An error occured while trying to run get-pip.py. Make sure you have setuptools or distribute installed.
ので、yum から setuptools を入れる。
# yum install -v python-setuptools
ユーザーの作成
git / gitlab で必要なユーザーを作成しておく。あらかじめ作られている httpd ユーザーは apache とする。今回は httpd 経由で色々操作するので、gitlab ユーザーは作成せず、apache ユーザーに必要な権限を与えていく。
# useradd git httpd ユーザーを git グループに追加 # usermod -a -G git apache
# mkdir -p /home/apache/.ssh # chmod 700 /home/apache/.ssh # chmod 700 /home/apache # chown apache:apache -R /home/apache # sudo -H -u apache ssh-keygen -q -N '' -t rsa -f /home/apache/.ssh/id_rsa
※yum パッケージで httpd をインストールしている場合は、apache ホームディレクトリが /var/www なので、上記ではなくて下記のようになる。
# mkdir -p /var/www/.ssh # chmod 700 -R /var/www/.ssh # chown apache:apache -R /var/www # sudo -H -u apache ssh-keygen -q -N '' -t rsa -f /var/www/.ssh/id_rsa
以降、apache のホームディレクトリ関連は /var/www に置き換えて考えること。
gitolite のインストール
git の管理は、gitolite というアプリケーションで行う。
GitHub - sitaramc/gitolite: Hosting git repositories -- Gitolite allows you to setup git hosting on a central server, with very fine-grained access control and many (many!) more powerful features.
# cd /home/git # sudo -H -u git git clone https://github.com/sitaramc/gitolite.git # sudo -u git -H mkdir bin # sudo -u git sh -c 'echo -e "PATH=\$PATH:/home/git/bin\nexport PATH" >> /home/git/.profile' # sudo -u git sh -c 'gitolite/install -ln /home/git/bin'
パス無しで操作できるように、apache ユーザーとのキー交換を行う。
# cp /home/apache/.ssh/id_rsa.pub /home/git/apache.pub # chmod 0444 /home/git/apache.pub # chown git:git /home/git/apache.pub # sudo -u git -H sh -c "PATH=/home/git/bin:$PATH; gitolite setup -pk /home/git/apache.pub" # sudo -u git -H sed -i 's/0077/0007/g' /home/git/.gitolite.rc
それから、なんかこれを編集しないとプロジェクトの追加とかができなかった。
# sudo -u git vim /home/git/.gitolite.rc // この部分を GIT_CONFIG_KEYS => '', // こんな感じに変更 GIT_CONFIG_KEYS => '.*',
パーミッションを変更する。
# chmod -R g+rwX /home/git/repositories/ # chown -R git:git /home/git/repositories/
どうやらリポジトリを直に apache が見ることがあるようで、git のホームディレクトリにグループユーザーの権限も付与しておく。
# chmod g+rx /home/git
ここまできたら、gitolite が動作しているか確認する。ここで、know_hosts に追加してもよいか聞かれるので、yes にしておく。
# cd /tmp # sudo -u apache -H git clone git@localhost:gitolite-admin.git git clone に成功したら # rm -rf gitolite-admin
豆知識。gitolite は変更をすべて git 上で行う。だから、変更を /home/git/.gitolite のディレクトリに対して行っても意味が無いことが多い。上記の gitolite-admin を clone して、その中身を変更、push することで設定が反映される。
GitLab のインストール
必要なパッケージのインストール
# gem i charlock_holmes --version '0.6.8' # pip install pygments # gem i bundler # rbenv rehash
GitLab の公開用のディレクトリを作成して、gitlabhq をダウンロードする。ルートディレクトリは /home/project/gitlab とする。
# mkdir -m 775 -p /home/project/gitlab # chown apache:apache -R /home/project # cd /home/project/gitlab # sudo -H -u apache git clone -b stable https://github.com/gitlabhq/gitlabhq.git . 設定ファイルをコピーする。 # sudo -u apache cp config/gitlab.yml{.example,}
設定ファイルの中身を編集する。(gitlab.yml)
web: host: hoge.example.com port: 443 https: true
この部分を適当なドメインに設定する。今回は自分はSSLを使うので、portとhttpsを変更した。
git_host: admin_uri: git@localhost:gitolite-admin base_path: /home/git/repositories/ hooks_path: /home/git/.gitolite/hooks/ gitolite_admin_key: apache git_user: git upload_pack: true receive_pack: true host: hoge.example.com port: 22
あとはこのgit_hostの項目を変更する。
gitolite_admin_key が gitlab ではなく、今回は apache で設定したので、変更する。
それからhost,portに関してもコメントアウトを外して、適当なドメイン/ポートを設定する。ここに設定したドメインが GitLab に表示される、git@hogehoge:fuga.git のhogehogeの部分に反映される。
そしてデータベースの設定を行う。
データベース設定ファイルは使っている DB のものをコピーする。 MySQL # sudo -u apache cp config/database.yml{.mysql,} PostgreSQL # sudo -u apache cp config/database.yml{.postgres,} SQLite # sudo -u apache cp config/database.yml{.sqlite,} ここでconfig/database.ymlを開いて、適当な値を設定する。
使用するDBに応じたgemをインストールする。
MySQL # bundle install --without development test sqlite postgres --deployment PostgreSQL # bundle install --without development test sqlite mysql --deployment SQLite # bundle install --without development test mysql postgres --deployment
DBをセットアップする。
# sudo -u apache -H -i bundle exec rake gitlab:app:setup RAILS_ENV=production
※apache ユーザーが非アクティブの場合は、環境変数を毎回追加してあげる必要があった。他に良い方法があれば教えてください。以降、apache が非アクティブな場合で、rbenv を使う必要があれば、 'sh -c "PATH=/usr/local/rbenv:$PATH && 〜" を付けて実行してください。
# sudo -u apache -H sh -c "PATH=/usr/local/rbenv:$PATH && bundle exec rake gitlab:app:setup RAILS_ENV=production"
log, tmp ディレクトリを読み書き可能にしておく。
# chmod 777 -R log # chmod 777 -R tmp # chown apache:apache -R log # chown apache:apache -R tmp
ついでに、vendor の所有者を apache にしておく。
# chown apache:apache -R vendor
hook の設定ファイルをコピーする。
# cp -p /home/project/gitlab/lib/hooks/post-receive /home/git/.gitolite/hooks/common/post-receive # chown git:git /home/git/.gitolite/hooks/common/post-receive
このままだと git push するときにエラーでるので、編集する。
# vim /home/git/.gitolite/hooks/common/post-receive
env 〜
っていうコマンドを実行している箇所の、-i オプションを削除する。
ここまでで、環境設定がうまくできているかをチェックする。
# sudo -u apache -i bundle exec rake gitlab:app:status RAILS_ENV=production
ここでチェックが通らない場合は、そのエラー内容を見て適切に対処する。
ここまできたらhttpdを起動する。
# /etc/init.d/httpd start
resque も起動する。
# cd /home/project/gitlab # sudo -u apache -i ./resque.sh
あとは普通に利用出来るようになってるはずなので、ブラウザから上記のvhostなんかにアクセスする。
初期設定がうまくできていれば
ID: admin@local.host
PW: 5iveL!fe
でアクセスできるはず。
ログインしたあとは、Adminのパスワードを変更して、ユーザー作成して、プロジェクト作ったり ssh キーを登録したりする。