Debian jessieでGitLabをRedmineと共存させる

環境

  • debian jessie 8.0
    • debianマシンはすでに用意してあるものとする。
  • gitlab 7.11

手順

GitLabのインストールは 公式の手順 に従えばいい。 ただし、Redmineと衝突してしまうので、nginxの設定によりサブドメインでGitLabを動かすこととする。

以下の手順では公式に書かれているパッケージを導入しているので、すでに入っていてインストールが不要なものも多数あるかもしれない。

準備

まずは必要ツールをインストールする。

% sudo apt-get install build-essential zlib1g-dev libyaml-dev libssl-dev \
libgdbm-dev libreadline-dev libncurses5-dev libffi-dev curl openssh-server \
redis-server checkinstall libxml2-dev libxslt-dev libcurl4-openssl-dev \
libicu-dev logrotate python-docutils pkg-config cmake nodejs git-core ruby

Kerberosを使う場合にはこれもいるらしい。自分は不要なので無視した。

% sudo apt-get install libkrb5-dev

gitlabユーザを設定する。

% sudo adduser --disabled-login --gecos 'GitLab' git

PostgreSQLの設定

ユーザとDBの作成。 password の部分は変更すること。 記号を含むとうまく動かない場合があるので、記号を含まないパスワードの方がいいかもしれない。 セキュリティ的にはアレだが。

% sudo apt-get install postgresql postgresql-client libpq-dev
% sudo -u postgres psql
postgres# CREATE ROLE gitlab WITH CREATEDB LOGIN ENCRYPTED PASSWORD 'password' NOINHERIT VALID UNTIL 'infinity';
postgres# CREATE DATABASE gitlabhq_production OWNER gitlab;
postgres# \q

試しにつないでみる。 先ほど設定したパスワードで接続できればOK。

% psql -h localhost -d gitlabhq_production -U gitlab -W
gitlabhq_production=> \q

Redisサーバの導入

apt-get すればよろし。 設定はそのままでOK。

% sudo apt-get install redis-server

gitをredisグループに追加する。

% sudo vi /etc/group
...
redis:x:113:git   ← ★gitを追加する

2015/06/23追記:

このままでは外部から接続できてしまうので、bindの設定を変えておく。

% cd /etc/redis/
% sudo vi redis.conf
...
bind 127.0.0.1  ← ★コメントアウトされているので、有効化する
...

redis-serverを再起動して完了。

% sudo /etc/init.d/redis-server restart

GitLabの導入

まずはソースを落としてくる。

% cd /home/git
% sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-ce.git -b 7-11-stable gitlab

設定する。 hostportemail 関連を変更するだけでとりあえずはOK。

% cd /home/git/gitlab
% sudo -u git -H cp config/gitlab.yml.example config/gitlab.yml
% sudo -u git -H vi config/gitlab.yml

パーミッションをきちんと設定しろとか。

% sudo chown -R git log/
% sudo chown -R git tmp/
% sudo chmod -R u+rwX,go-w log/
% sudo chmod -R u+rwX tmp/
% sudo chmod -R u+rwX tmp/pids/
% sudo chmod -R u+rwX tmp/sockets/
% sudo chmod -R u+rwX public/uploads

Satelliteとかいうのが必要らしい。

% sudo -u git -H mkdir /home/git/gitlab-satellites
% sudo chmod 750 /home/git/gitlab-satellites

つづいてUnicorn。

% sudo -u git -H cp config/unicorn.rb.example config/unicorn.rb

Rack attack。よく分からん。

% sudo -u git -H cp config/initializers/rack_attack.rb.example config/initializers/rack_attack.rb

Redisの接続設定。 設定の整合性が取れてないので、設定変更が必要。 port 6379を使うように修正する。

% sudo -u git -H cp config/resque.yml.example config/resque.yml
% sudo vi config/resque.yml
production: redis://localhost:6379  ← ★port 6379を使うように修正する。

GitLabのDB設定

DBを設定する。 production以外はコメントアウトしてしまってOK。

% sudo -u git cp config/database.yml.postgresql config/database.yml
% sudo -u git -H chmod o-rwx config/database.yml
% sudo vi config/database.yml
...
production:
...
  username: gitlab
  password: ★自分で設定したもの
  host: localhost
...

Gemを導入してGitLab Shellをインストールする。

% sudo -u git -H bundle install --deployment --without development test mysql aws kerberos
% sudo -u git -H bundle exec rake gitlab:shell:install[v2.6.3] REDIS_URL=unix:/var/run/redis/redis.sock RAILS_ENV=production

必要があれば設定を変更する。

% sudo vi /home/git/gitlab-shell/config.yml

いよいよbundle。

% sudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=production

最後にデフォルトの管理者アカウントが表示されるのでメモしておく。 後で必ず変更すること。

initスクリプトの配置

テンプレートをコピーして使えばいいらしい。 特殊な設定にしていない限りはそのままでOK。 update-rc.d で自動実行登録する。

% sudo cp lib/support/init.d/gitlab /etc/init.d/gitlab
% sudo update-rc.d gitlab defaults 21

logrotateの設定も提供してくれているらしい。 Redmineとはエラい違いだ。

% sudo cp lib/support/logrotate/gitlab /etc/logrotate.d/gitlab

最終チェック。 そしてコンパイル。

% sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production

System information
System:         Debian 8.0
Current User:   git
Using RVM:      no
Ruby Version:   2.1.5p273
Gem Version:    2.2.2
Bundler Version:1.10.3
Rake Version:   10.4.2
Sidekiq Version:3.3.0

GitLab information
Version:        7.11.4
Revision:       b725318
Directory:      /home/git/gitlab
DB Adapter:     postgresql
URL:            http://vegeta.f.ait.kyushu-u.ac.jp
HTTP Clone URL: http://vegeta.f.ait.kyushu-u.ac.jp/some-project.git
SSH Clone URL:  git@vegeta.f.ait.kyushu-u.ac.jp:some-project.git
Using LDAP:     no
Using Omniauth: no

GitLab Shell
Version:        2.6.3
Repositories:   /home/git/repositories/
Hooks:          /home/git/gitlab-shell/hooks/
Git:            /usr/bin/git
% sudo -u git -H bundle exec rake assets:precompile RAILS_ENV=production

試しに起動してみる。

% sudo /etc/init.d/gitlab start

デフォルトでは 127.0.0.1:8080 で起動しているので、サーバ上でブラウザを実行できればアクセスできる。

Nginxに載せる

なにはともあれnginxをインストール。

% sudo apt-get install nginx

nginx用の設定テンプレートも用意してくれている。 素晴らしい。

% sudo cp lib/support/nginx/gitlab /etc/nginx/sites-available/gitlab
% sudo vi /etc/nginx/sites-available/gitlab

Redmineと共存させるため、 server_name は違うものにしておくことが必須。 あとはIPv6でlistenしたくないなら listen [::]:80 default_server はコメントアウトするか削除してしまう。

設定を有効化して、テスト。

% cd /etc/nginx/sites-enabled/
% sudo ln -s ../sites-available/gitlab ./
% sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

OKならnginxを再起動する。

% sudo /etc/init.d/nginx restart

ブラウザからアクセスすれば見えるはず。

見えないときは、どこまで接続できているかによって見るログが変わってくる。 nginxのリバースプロキシでgitlabに接続できないときは、unicorn関連の設定かnginxの設定、gitlabのエラーが見えたときは、gitlabのログを参照してデバッグすると良い。

2015/06/23追記:

GitLab-Shellの設定変更

sshでpushしたときには GitLab-Shell というのが呼ばれるのだが、ここもまたRedis関連の設定の整合性が取れてないので、設定変更が必要。 localhost:6379 を使うように修正する。

% cd /home/git/gitlab-shell
% sudo -u git vi config.yml
...
redis:
  ...
  host: localhost  ← ★追加する
  port: 6379       ← ★追加する
  # socket: /var/run/redis/redis.sock  ← ★コメントアウトする
  ...