GitLabの構築(インストール編)

Githubを使って、オープンな環境でいろんな人と交流をもって開発するのが一番良い刺激になるとは思うものの、クローズドなソース管理がしたいとなると、自前で用意する必要がある。

以下のサイトで非常に詳しく丁寧に比較・紹介されており、GitLabを使ってみることに決定。構築手順などの備忘録を残しておく。

GitHubのようなサイトを独自に運用できる「GitLab」や「GitBucket」を使ってみよう

GitLabのインストール

以下のサイトで、プラットフォームを選択して手順どおりに進めば、最新版のGitLabをダウンロードしてインストールまで完了できる。

GitLab Download

=="3. Configure and start GitLab"==を実行する前に、インストール環境に合わせた
設定が必要になる。

GitLabの設定

Omnibus GitLab Documentation

とりあえず基本設定として、以下の環境構築を目指す。

  1. https、ポート番号8080番で起動させる。
  2. 稼働中のプロキシサーバーからポートフォワードによって、外部からは== https://server.hoge.com ==からアクセスして上記URLへ転送されるようにする。
  3. Gitリポジトリ、PostgresのDB、各種アップロードファイルなどの配置先を変更して、/home/gitlabとする。(ほかはデフォルトの/var/opt/gitlab)

ポートフォワードに関しては、過去の投稿を参照

https, http両対応のproxyサーバー(ポートフォワード)

https通信するための証明書発行は、

Let's Encryptによる無料のサーバー証明書取得

設定ファイルの場所

> /etc/gitlab/gitlab.rb

外部URLの設定 (external_url)

external_url 'https://hoge.com:8080'

証明書の設定

HTTPSで接続するためには、Ngnixで使用する証明書(中間証明書を含む)と秘密鍵を設定する。以前の投稿で無料の証明書を取得しているので、これを流用する。 注意点としては、ドメイン証明書に中間証明書が含まれているfullchain.pemを指定する。

Let's Encryptによる無料のサーバー証明書取得

nginx['ssl_certificate'] = "/etc/letsencrypt/live/hoge.com/fullchain.pem"
nginx['ssl_certificate_key'] = "/etc/letsencrypt/live/hoge.com/privkey.pem"

Gitリポジトリ、DBデータ、バックアップの配置先

gitlab-ctl reconfigureの注意点

gitlab.rbを編集した後、後述するgitlab-ctl reconfigureを実行すると、設定内容をもとにGitlabを構成する各種サーバーアプリの設定を変更し、再起動まで実施してくれる。なので設定を変更した場合は、つどgitlab-ctl reconfigureを実施するだけで良い。

ただし、リポジトリの場所やDBデータの配置先などを、初回のreconfigure後にgitlab.rbを変更して、再度reconfigureを実施しても、PostgresのDBファイルの移動などは行ってもらえなかった。(そのまま動作させるとどうなるかは不明)なので、gitリポジトリの場所やPostgresのDBイメージの場所などは、初回reconfigureの前に決定&設定しておくようにする。
(もちろん手順を踏めば稼動後の移動はもちろんできる)

Option Location Purpose
git_data_dirs() /home/gitlab/git-data Git repositories directory
gitlab_rails['shared_path'] /home/gitlab/gitlab-rails/shared Large object directories
gitlab_rails['uploads_directory'] /home/gitlab/gitlab-rails/uploads User attachments
postgresql['data_dir'] /home/gitlab/postgresql/data DB data
gitlab_rails['backup_path'] /home/gitlab/backups Backup data store

GitLabのメールユーザ追加

システムからお知らせメールなどを飛ばしたり、その他のGitLab内部で動作するための専用ユーザを作成しておく。どうもデフォルトだとgitというユーザで動作するようだが、別のユーザーを作成しておく。

> useradd sysadmin
> mkdir /home/sysadmin

Gitlabメール設定

公式サイトやその他を参考に設定

GitLab 8.2 + HTTPS 設定メモ(CentOS7)

smtp settings

### Email Settings
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = 'sysadmin@usagi1975.com'
gitlab_rails['gitlab_email_display_name'] = 'GitLab'
gitlab_rails['gitlab_email_reply_to'] = 'sysadmin@usagi1975.com'

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.usagi1975.com"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "sysadmin"
gitlab_rails['smtp_password'] = "sysadmin"
gitlab_rails['smtp_domain'] = "usagi1975.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false

gitlab_rails['smtp_openssl_verify_mode'] = 'peer'

GitLab 運用ユーザの設定

Changing the name of the Git user / group

基本変更しないほうがよさそう。ユーザ変更はやめておく。インストールした時点で各サーバー用のユーザは自動作成されてはいる。

データのホームディレクトリ

デフォルトでは、/var/opt/gitlab以下にDBデータなどが作成される設定になっている。運用管理上、保存データは/home以下に変更しておく。




設定の再構築 (gitlab-ctl reconfigure)

以下のコマンドで設定を構築する。変更があった場合も以下を実行すれば反映される。
最初の実行では、何も設定されていない状態なので、DBの構築などいろいろ実行される。

> sudo gitlab-ctl reconfigure
:
Running handlers:
Running handlers complete
Chef Client finished, 233/332 resources updated in 01 minutes 54 seconds
gitlab Reconfigured!

reconfigureを実行すると、デーモンも起動される。
ちゃんと起動したかどうかは、statusコマンドで確認する。すべてのサーバーが"run"になっていればとりあえず全部起動している。また"down"だとそのサーバーだけ起動していないことになる。設定など見直す必要がある。

> sudo gitlab-ctl status
run: gitlab-workhorse: (pid 1064) 165328s; run: log: (pid 1058) 165328s
run: logrotate: (pid 682) 3325s; run: log: (pid 1059) 165328s
run: nginx: (pid 6204) 735s; run: log: (pid 1061) 165328s
run: postgresql: (pid 1065) 165328s; run: log: (pid 1057) 165328s
run: redis: (pid 1063) 165328s; run: log: (pid 1055) 165328s
run: sidekiq: (pid 4054) 1473s; run: log: (pid 1060) 165328s
run: unicorn: (pid 4105) 1461s; run: log: (pid 1056) 165328s

gitlab-ctl reconfigureを実行した直後の/home/gitlab/var/opt/gitlabのフォルダ構成を示す。設定ファイルで指定したディレクトリ構成で作成されている。

/home/gitlab$ sudo du . -h --total
4.0K    ./backups
4.0K    ./git-data/repositories
8.0K    ./git-data
4.0K    ./gitlab-rails/shared/artifacts
4.0K    ./gitlab-rails/shared/pages
4.0K    ./gitlab-rails/shared/lfs-objects
16K     ./gitlab-rails/shared
4.0K    ./gitlab-rails/uploads
24K     ./gitlab-rails
12K     ./postgresql/data/pg_clog
68K     ./postgresql/data/pg_stat_tmp
4.0K    ./postgresql/data/pg_serial
12K     ./postgresql/data/pg_notify
12K     ./postgresql/data/pg_subtrans
4.0K    ./postgresql/data/pg_xlog/archive_status
17M     ./postgresql/data/pg_xlog
4.0K    ./postgresql/data/pg_snapshots
456K    ./postgresql/data/global
4.0K    ./postgresql/data/pg_tblspc
12M     ./postgresql/data/base/16385
6.0M    ./postgresql/data/base/12037
6.1M    ./postgresql/data/base/1
6.1M    ./postgresql/data/base/12042
30M     ./postgresql/data/base
12K     ./postgresql/data/pg_multixact/offsets
12K     ./postgresql/data/pg_multixact/members
28K     ./postgresql/data/pg_multixact
4.0K    ./postgresql/data/pg_twophase
47M     ./postgresql/data
47M     ./postgresql
47M     .
47M     合計

こちらがデフォルトの/var/opt/gitlabのディレクトリ。

/var/opt$ sudo du . -h --total
4.0K    ./gitlab/nginx/proxy_temp
4.0K    ./gitlab/nginx/fastcgi_temp
4.0K    ./gitlab/nginx/scgi_temp
4.0K    ./gitlab/nginx/client_body_temp
4.0K    ./gitlab/nginx/proxy_cache
4.0K    ./gitlab/nginx/uwsgi_temp
16K     ./gitlab/nginx/conf
48K     ./gitlab/nginx
12K     ./gitlab/postgresql
8.0K    ./gitlab/gitlab-shell
28K     ./gitlab/logrotate/logrotate.d
36K     ./gitlab/logrotate
8.0K    ./gitlab/gitlab-workhorse
4.0K    ./gitlab/gitlab-ci/builds
8.0K    ./gitlab/gitlab-ci
64K     ./gitlab/redis
4.0K    ./gitlab/.ssh
4.0K    ./gitlab/gitlab-rails/sockets
4.0K    ./gitlab/gitlab-rails/working
4.0K    ./gitlab/gitlab-rails/tmp
52K     ./gitlab/gitlab-rails/etc
8.0K    ./gitlab/gitlab-rails/upgrade-status
88K     ./gitlab/gitlab-rails
292K    ./gitlab
296K    .
296K    合計

ログイン

本来は、external_urlで設定したURLでブラウザからアクセスできればOKだが、自身の環境ではプロキシサーバー経由でアクセスしてみる。

> https://server.hoge.com

最初に以下のような画面が表示されて、root(管理者)ユーザーのパスワード
を変更する画面が表示される。(8文字以上)

変更が成功したら、とりあえずrootユーザーでログインできるか確認する。

login root user

下記の画面がでれば、とりあえずOKとする。

Welcome to GitLab

状態、再起動

再起動後、"OK"と出てもすぐにはアクセスできない。
しばらくしてからログインできるようなる。

> sudo gitlab-ctl status
run: gitlab-workhorse: (pid 31083) 6973215s; run: log: (pid 804) 9154596s
run: logrotate: (pid 26980) 3489s; run: log: (pid 806) 9154596s
run: nginx: (pid 31099) 6973214s; run: log: (pid 801) 9154596s
run: postgresql: (pid 31142) 6973213s; run: log: (pid 799) 9154596s
run: redis: (pid 31144) 6973213s; run: log: (pid 803) 9154596s
run: sidekiq: (pid 31156) 6973211s; run: log: (pid 800) 9154596s
run: unicorn: (pid 31193) 6973190s; run: log: (pid 805) 9154596s

> sudo gitlab-ctl restart
ok: run: gitlab-workhorse: (pid 2680) 1s
ok: run: logrotate: (pid 2689) 0s
ok: run: nginx: (pid 2696) 1s
ok: run: postgresql: (pid 2707) 0s
ok: run: redis: (pid 2716) 0s
ok: run: sidekiq: (pid 2722) 0s
ok: run: unicorn: (pid 2727) 0s

その他:GitLabのアンインストール

再度クリーンインストールするときは以下のように手動操作も加えて削除する。中途半端な状態で再インストールしようとすると、インストールスクリプトでエラーになるケースがあるので注意。

> sudo apt remove gitlab-ce
> sudo apt purge gitlab-ce
> sudo rm -rf /etc/gitlab
> sudo rm -rf /opt/gitlab
> sudo rm -rf /var/opt/gitlab
> sudo rm -rf /var/log/gitlab
> sudo rm -rf /home/gitlab