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
設定する。 host
や port
、 email
関連を変更するだけでとりあえずは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 ← ★コメントアウトする
...