現バージョン(2015/12現在)のgitlabは、DBやWEBサーバーを内包しておりデフォルトではインストール後にすぐ稼働が可能となるが、個人的なお試しではなく実運用で利用するとなるといささか心もとない。(gitlabの稼働のみを行う専用サーバーであれば、もうこれでいい気もするけどね。)そこで、DBにはmysql、WEBサーバーはniginxを利用するように変更を行う。

そこで、まずいじくるのが/etc/gitlab/gitlab.rb。apt-getやyumでのアップデートに対応するために現バージョンでは、各所の設定ファイルを編集するのではなく、gitlab.rbを編集し、gitlab-ctl reconfigureを実行する流れとなっている。個人的な趣味によるが、以前のように設定ファイルが分散していたころの方が、編集すべきものに的が絞れて記憶しておきやすかったが、現状はこの膨大な設定用のrbuyスクリプトを編集しなければいけないのは結構辛いものがある。

まあ、一度gitlab.rbを設定しバックアップをとっておけば、バージョンアップの際もgitlab-ctl reconfigureだけでDBのマイグレートまで含めてすべて実行してくれるのでお手軽ではあるのだが、本記事のようにかなり前に編集した内容を思い出すのは至難の業である(汗)

では、gitlab.rbの編集開始。

1.WEBサーバーの利用停止

gitlabに内包されたnigixの利用を中止する。

nginx['enable'] = false

################
# GitLab Nginx #
################
## see: https://gitlab.com/gitlab-org/omnibus-gitlab/tree/629def0a7a26e7c2326566f0758d4a27857b52a3/doc/settings/nginx.md

 nginx['enable'] = false
# nginx['client_max_body_size'] = '250m'
# nginx['redirect_http_to_https'] = false
# nginx['redirect_http_to_https_port'] = 80
# nginx['ssl_certificate'] = "/etc/gitlab/ssl/#{node['fqdn']}.crt"
# nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/#{node['fqdn']}.key"

2.DBサーバーの利用停止

gitlabに内包されたpostgresqlのDB利用を中止する。

postgresql['enable'] = false

#####################
# GitLab PostgreSQL #
#####################

 postgresql['enable'] = false
# postgresql['listen_address'] = nil
# postgresql['port'] = 5432
# postgresql['data_dir'] = "/var/opt/gitlab/postgresql/data"
# postgresql['shared_buffers'] = "256MB" # recommend value is 1/4 of total RAM, up to 14GB.

3.Unicornのポート変更

Tomcatなどのポートとぶつかる場合があるのでUnicornポートを未使用のポートに変更。

##################
# GitLab Unicorn #
##################
## Tweak unicorn settings.

# unicorn['worker_timeout'] = 60
# unicorn['worker_processes'] = 2

## Advanced settings
 unicorn['listen'] = '127.0.0.1'
 unicorn['port'] = 8181
# unicorn['socket'] = '/var/opt/gitlab/gitlab-rails/sockets/gitlab.socket'

4.Mysqlの設定追加

Mysqlは別途インストールしてあるものを利用。利用するDBスキーマの情報を設定。ちなみにこれは、railsのdatabase.ymlに反映される。テーブルやデータの作成はrailsがやってくれるのでなーんにもする必要は無し。

############################
# GitLab database settings #
############################
## see https://gitlab.com/gitlab-org/omnibus-gitlab/blob/629def0a7a26e7c2326566f0758d4a27857b52a3/doc/settings/database.md#database-settings
## Only needed if you use an external database.

 gitlab_rails['db_adapter'] = "mysql2"
 gitlab_rails['db_encoding'] = "utf8"
 gitlab_rails['db_database'] = "gitlabhq_production"
 gitlab_rails['db_pool'] = 10
 gitlab_rails['db_username'] = "git"
 gitlab_rails['db_password'] = "xxxxx"
 gitlab_rails['db_host'] = nil

5.sshポートの設定

デフォルト22を利用していれば変更の必要はないがそれ以外の場合は以下を変更。

## GitLab Shell settings for GitLab
 gitlab_rails['gitlab_shell_ssh_port'] = sshのポート番号

6.基本URLの設定

external_url 'http://gitlab.bright-l.0am.jp'

7.WEBサーバー実行ユーザーの設定

WEBサーバープロセスに対するパーミッションが必要なディレクトリがソケット絡みであるため、WEBサーバープロセスユーザー/グループを設定。

#####################
# GitLab Web server #
#####################
## see: https://gitlab.com/gitlab-org/omnibus-gitlab/tree/629def0a7a26e7c2326566f0758d4a27857b52a3/doc/settings/nginx.md#using-a-non-bundled-web-server
## When bundled nginx is disabled we need to add the external webserver user to the GitLab webserver group.

# web_server['external_users'] = []
 web_server['username'] = 'www-data'
 web_server['group'] = 'www-data'
# web_server['uid'] = nil

8.mysqlのbundleインストール

この状態では、rails側でmysql2がbundleインストールされていないためインストールを実行する。

# cd /opt/gitlab/embedded/service/gitlab-rails
# bundle install --with=mysql

※サーバー前提であるため、rbenvは利用していない。そのためrootでインストール。

9.コンフィグ反映

# gitlab-ctl reconfigure

10.nginxの設定

/etc/nginx/sites-availableにgitlabの設定を追加する。Unicorn自体は内包されたものをそのまま使っているのでupstreamでソケットのパイプ先を記述すればOK。

/etc/nginx/sites-available/gitlab


upstream gitlab {
  server unix:/var/opt/gitlab/gitlab-rails/sockets/gitlab.socket;
}

server {
  listen *:80;
  server_name gitlab.bright-l.0am.jp gitlab.localhost;
  server_tokens off;
  root /opt/gitlab/embedded/service/gitlab-rails/public;

  # Increase this if you want to upload large attachments
  # Or if you want to accept large git objects over http
  client_max_body_size 250m;

  # individual nginx logs for this gitlab vhost
  access_log  /var/log/nginx/gitlab_access.log;
  error_log   /var/log/nginx/gitlab_error.log;

  location / {
    # serve static files from defined root folder;.
    # @gitlab is a named location for the upstream fallback, see below
    try_files $uri $uri/index.html $uri.html @gitlab;
  }

  # if a file, which is not found in the root folder is requested,
  # then the proxy pass the request to the upsteam (gitlab unicorn)
  location @gitlab {
    # If you use https make sure you disable gzip compression
    # to be safe against BREACH attack
    # gzip off;

    proxy_read_timeout 300; # Some requests take more than 30 seconds.
    proxy_connect_timeout 300; # Some requests take more than 30 seconds.
    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   X-Frame-Options   SAMEORIGIN;

    proxy_pass http://gitlab;
  }

11.問題点の確認

reconfigureは正常に終了したがうまく動かない場合は...

# su - git
$ cd /opt/gitlab/embedded/service/gitlab-rails
$ bundle exec rake gitlab:check RAILS_ENV=production

そして、/var/log/gitlab以下のログを確認。

12.サービスの自動起動

現状バージョンでは、systemctlで自動起動されるようになっているのでここでは割愛。