GitLab をインストールしよう! (omnibus package)

# GitLab をインストールしよう!

[GitLab Advent Calendar](http://qiita.com/advent-calendar/2016/gitlab) の四日目はインストールについて書いてみようと思います。

GitLab を使うだけならサービス版の [GitLab.com](https://gitlab.com/users/sign_in) を使うのがもっとも手っ取り早いです。ですが、会社で使う場合、クラウドサービスはちょっと... という会社も多いのではないでしょうか? GitLab には GitLab CE という OSS の無償で使える製品がありますので、これを社内のサーバーにインストールして使うことができます。

2022/05/27 追記: **この記事は 2016 年のものです。** インストール方法は大きくは変わっていませんが細かい違いがあります。公式ドキュメントを確認してください。また、初期パスワードについては大きく変更がありましたのでその点だけ修正しています。


## インストールの前に
### インストール方法の選択
GitLab CE のインストール方法はいくつか用意されています。公式で推奨とされるやり方は [Omnibus package installation](https://about.gitlab.com/installation/) を使ったインストールです。Omnibus package は GitLab CE に加えて、Ruby/nginx/PostgreSQL などの必要なアプリケーションを同梱しており、手軽にインストールができます。

[Docker Image](https://hub.docker.com/r/gitlab/gitlab-ce/) や [AMI](https://about.gitlab.com/aws/) や、[その他のインストール方法](https://about.gitlab.com/installation/) も用意されていますので、運用形態に合わせて選ぶと良いでしょう。

### インストール要件
インストールに必要な OS やリソースについては、公式サイトの [Requirements](https://docs.gitlab.com/ce/install/requirements.html) に書かれています。

Ruby や PostgreSQL (or MySQL) や Redis などは Omnibus package に同梱されていますので、OS とハードウェア要件だけ気にしておけばよいでしょう。

なお、お試しでインストールする場合でも、メモリは 2GB 程度はあった方がいいと思います。


## インストール
インストールした仮想マシンは以下のとおりです。

| 項目 | 値
| ---- | ----
| OS | Ubuntu 16.04 LTS Server x64 (KVM にインストール) |
| CPU | 2 core |
| Memory | 3GB |
| HDD | 128GB |
| 方法 | Omnibus package |


### GitLab CE のインストール
[Install a GitLab CE Omnibus package on (Ubuntu 16.04 recommended)](https://about.gitlab.com/downloads/#ubuntu1604) に書かれているとおりに進めていきます。

SSH Server や必要なソフトウェアをインストールします。

```text
$ sudo apt-get install curl openssh-server ca-certificates postfix
```

途中、設定について質問されますが、そのまま Enter キーを押してデフォルトのまま進めていきます。

apt line に GitLab CE を登録するためにスクリプトを実行します。

```text
$ curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
Detected operating system as Ubuntu/xenial.
Checking for curl...
Detected curl...
Running apt-get update... done.
Installing apt-transport-https... done.
Installing /etc/apt/sources.list.d/gitlab_gitlab-ce.list...done.
Importing packagecloud gpg key... done.
Running apt-get update... done.

The repository is setup! You can now install packages.
```

apt line に GitLab CE が登録されています。

```text
$ cat /etc/apt/sources.list.d/gitlab_gitlab-ce.list 
# this file was generated by packages.gitlab.com for
# the repository at https://packages.gitlab.com/gitlab/gitlab-ce

deb https://packages.gitlab.com/gitlab/gitlab-ce/ubuntu/ xenial main
deb-src https://packages.gitlab.com/gitlab/gitlab-ce/ubuntu/ xenial main
```

`apt-get install` で GitLab をインストールします。回線速度次第ですが、ダウンロードにちょっと時間がかかります。

```
$ sudo apt-get install gitlab-ce
```

設定を再構成して、起動します。

```
$ sudo gitlab-ctl reconfigure
snip...


Running handlers:
Running handlers complete
Chef Client finished, 233/325 resources updated in 01 minutes 20 seconds
gitlab Reconfigured!
```

なにやらいっぱいメッセージが出てきます。ちょっとだけ待ちましょう。

設定と起動が終わったら、ブラウザーで `http://192.168.122.xxx` にアクセスします。(IP Address はインストールしたサーバーの IP Address を指定してください)

(E10 以前の IE には対応していません。たまに不具合があるようです)

![gitlab1.png](https://qiita-image-store.s3.amazonaws.com/0/103982/cf112de1-2297-7d55-b852-411f59b154fc.png)

~~最初に `root` ユーザーのパスワードを変更するように促されますので、`New password` と `Confirm new password` に新しいパスワードを入れて `Change Your password` ボタンをクリックしてください。~~

2022/05/27 追記: GitLab 14.0 から初期パスワードがランダムになりました。詳しくは[GitLabの初期パスワード](https://www.gitlab.jp/blog/2022/05/27/initial-password/)を参照してください。

![gitlab2.png](https://qiita-image-store.s3.amazonaws.com/0/103982/0f4facba-e6fe-8477-e3f4-fc2213f54fa4.png)

パスワードの変更が完了したら `root` ユーザーでログインします。

![gitlab3.png](https://qiita-image-store.s3.amazonaws.com/0/103982/e706f988-e3bb-0772-2268-d6783e6b3707.png)

これでインストールは完了です! あとは、ユーザーやプロジェクトを作って GitLab を楽しんでください!


### GitLab Mattermost の有効化
Omnibus package には Slack like なチャットアプリ、[GitLab Mattermost](https://gitlab.com/gitlab-org/gitlab-mattermost) も同梱されています。簡単なので、こちらもセットアップしちゃいましょう!

Omnibus package で設定を変更する場合、`/etc/gitlab/gitlab.rb` を変更して `gitlab-ctl reconfigure` を実行する流れになります。

```
$ sudo vim /etc/gitlab/gitlab.rb
```

GitLab Mattermost の設定は 820 行目あたりから始まります。

```ruby
#####################
# GitLab Mattermost #
#####################

# mattermost_external_url 'http://mattermost.example.com'
#
# mattermost['enable'] = false
```

`mattermost_external_url` を変更します。今回は、ポート番号 '5001' 番でアクセスできるように変更します。

```ruby
#####################
# GitLab Mattermost #
#####################

mattermost_external_url 'http://192.168.122.xxx:5001' # サーバーの IP Address を指定
#
# mattermost['enable'] = false
```

VIM の使い方が分からない方は代わりに以下を実行してください。

```
$ echo "mattermost_external_url 'http://192.168.122.xxx:5001'" | sudo bash -c 'cat >> /etc/gitlab/gitlab.rb'
```

`gitlab-ctl reconfigure` を実行します。

```text
$ sudo gitlab-ctl reconfigure
```

完了したらブラウザーで `http://192.168.122.xxx:5001` にアクセスします。

![mattermost1.png](https://qiita-image-store.s3.amazonaws.com/0/103982/a83221ee-a6e9-8b35-15c1-4b52ac8105ab.png)

GitLab の OAuth の連携の設定も完了していますので、すぐに使いはじめることができます。


### GitLab Container Registry の有効化
Omnibus package には [GitLab Container Registry](https://about.gitlab.com/2016/05/23/gitlab-container-registry/) も含まれています。GitLab Container Registry を使うとプロジェクトに Docker Image をアップロードできるようになります。Docker を使っている方には嬉しい機能ではないでしょうか?

有効化は GitLab Mattermost と同じ手順です。

Container Registry の設定は 350 行目あたりにあります。

```ruby
###############################
# Container Registry settings #
###############################
# See https://docs.gitlab.com/ce/administration/container_registry.html
#

# registry_external_url 'https://registry.gitlab.example.com'

## Settings used by GitLab application
# gitlab_rails['registry_enabled'] = true
```

registry_external_url を変更します。ポート番号 5002 番でアクセスできるよう変更します。

```ruby
###############################
# Container Registry settings #
###############################
# See https://docs.gitlab.com/ce/administration/container_registry.html
#

registry_external_url 'https://192.168.122.xxx:5002'

## Settings used by GitLab application
# gitlab_rails['registry_enabled'] = true
```

VIM の使い方がわからない方は代わりに以下を実行してください。

```text
$ echo "registry_external_url 'http://192.168.122.xxx:5002'" | sudo bash -c 'cat >> /etc/gitlab/gitlab.rb'
```

`gitlab-ctl reconfigure` を実行します。

```text
$ sudo gitlab-ctl reconfigure
```

これでプロジェクトに Docker Image がアップロードできるようになります。

プロジェクトを作って `Registry` タブをクリックすると、Docker Image の登録方法が表示されています。

![registry1.png](https://qiita-image-store.s3.amazonaws.com/0/103982/a38bbb67-2225-dcbe-4dc0-540164b9149d.png)

ですが、SSL 化されていないため、`docker push` ができません。(その前に `docker login` できませんが...) GitLab Container Registry に非 SSL で繋がるよう Docker Engine の設定を変更する必要があります。

[GitLab Advent Calendar 2016 九日目の記事、GitLab Container Registry](http://qiita.com/masakura/items/802f4b8ce322d2543c80) の [GitLab CE 編](http://qiita.com/masakura/items/802f4b8ce322d2543c80#gitlab-ce-%E7%B7%A8) に設定方法を書いてありますので参考にしてください。


## 最後に
GitLab CE のインストールはそれほど難しくはありません。GitLab Mattermost や Container Registry も同梱されています。

以前はソースコードからインストールする必要があり、かなり大変だったのですが Omnibus package の登場で手軽にインストールできるようになりました。

チーム内で使ってみるだけなら手軽に始められるので、ぜひインストールしてみてください。


## おまけ
### 名前
今回のインストールではサーバーの IP Address を直接使いました。この方法では GitLab CE/GitLab Mattermost/Container Registry のポート番号を別々にする必要があります。使う上で非常に不便です。

Omnibus package では名前ベースバーチャルホストを使ってポート番号を全て 80 番に統一することができます。

`/etc/gitlab/gitlab.rb` を以下のように変更します。

```ruby
external_url 'http://gitlab.example.com'
mattermost_external_url 'http://mattermost.example.com'
registry_external_url 'http://registry.example.com'
```

`gitlab-ctl reconfigure` で再設定します。

```text
$ sudo gitlab-ctl reconfigure
```

`gitlab.example.com` `mattermost.example.com` `registry.example.com` の三つの名前を DNS に登録してください。

これで、それぞれの URL でアクセスできるようになります。


### アップグレード
GitLab は頻繁にバージョンアップされています。月に一回のバージョンアップ (8.1 -> 8.2) と、月に数回のセキュリティアップデートやバグフィクス (8.1.0 -> 8.1.1) がなされています。

GitLab Omnibus package でインストールした場合は `apt-get upgrade` または `apt-get dist-upgrade` でアップグレードされます。

アップグレード方法もとても簡単でいいですね!