3Stepで Let’s Encrypt の保護された GitLab を構築する

[Git](https://git-scm.com/) を練習したりコミュニティで使うことができる最低限のGitサーバーの構築しました。
最低限なので [GitLab](https://about.gitlab.com/) のWebサイトはSSL(暗号化通信)で保護はしますが GitLab からのメール送信は構築しません。

**3Step** は **３分** と書きたかったけどスペックより構築に **９分** ほどかかります。 

![image.png](https://qiita-image-store.s3.amazonaws.com/0/8369/39adb8ea-da07-d65e-5c75-5e3c303babfb.png) :heavy_plus_sign: ![image.png](https://qiita-image-store.s3.amazonaws.com/0/8369/43b88dcf-35ad-0dd5-833e-5eaf9326590a.png)

## Operating Systems

* Ubuntu 16.04
    * [さくらのクラウド](https://cloud.sakura.ad.jp/)で動作を確認済み

## Installation

* [Let’s Encrypt](https://letsencrypt.org/) は [Certbot](https://certbot.eff.org/) で取得します。
* [GitLab](https://about.gitlab.com/) は [Omnibus package](https://about.gitlab.com/installation/) で構築します。

### Step 1

* `apt-get` コマンドでパッケージをインストールします。
* ドメインの *gitlab.example.com* は任意に変更してください。

```bash
$ sudo apt-get install -y software-properties-common
$ sudo add-apt-repository -y ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install -y curl openssh-server ca-certificates certbot
$ curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
$ sudo EXTERNAL_URL="http://gitlab.example.com" apt-get install -y gitlab-ce
```

### Step 2

* GitLab のコンフィグを編集します。

```bash
$ sudo vi /etc/gitlab/gitlab.rb
```

```ruby:/etc/gitlab/gitlab.rb
nginx['custom_gitlab_server_config'] = "location ^~ /.well-known { root /var/www/letsencrypt; }"
```

* `gitlab-ctl` コマンドで **GitLab** を再起動します。
* `certbot` コマンドで **Let’s Encrypt** の証明書が取得できます。

```bash
$ sudo mkdir -p /var/www/letsencrypt
$ sudo gitlab-ctl reconfigure
$ sudo certbot certonly --webroot --webroot-path=/var/www/letsencrypt -d gitlab.example.com
```

* 証明書が取得されると `/etc/letsencrypt/live/` にファイルが保存されます。

```bash
IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/gitlab.example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/gitlab.example.com/privkey.pem
```

### Step 3

* GitLab のコンフィグを再び編集します。

```bash
$ sudo vi /etc/gitlab/gitlab.rb
```

```ruby:/etc/gitlab/gitlab.rb
external_url 'https://gitlab.example.com'
nginx['redirect_http_to_https'] = true
nginx['ssl_certificate'] = "/etc/letsencrypt/live/gitlab.example.com/fullchain.pem"
nginx['ssl_certificate_key'] = "/etc/letsencrypt/live/gitlab.example.com/privkey.pem"
```

* `gitlab-ctl` コマンドで GitLab を再び再起動します。

```bash
$ sudo gitlab-ctl reconfigure
```

* `https://gitlab.example.com` にアクセスして `root` ユーザーのパスワードの入力します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/8369/8d204e96-0a58-ee5b-4195-a6bdaf43a676.png)


これで GitLab のサーバー管理者になりました。`Admin Area > Settings` で `Sign-up enabled` のチェックを外すと **Register** が表示されなくなりユーザーの登録を抑制できます。など管理者の力を使いましょう！

**Let’s Administer life**

## Tips

メール送信を構築していないのでパスワードをリセットしたい場合は `rails console` コマンドで編集します。（[Ruby](https://www.ruby-lang.org/) や [Rails](http://rubyonrails.org/) の知識があるといろいろできて便利かも）

```bash
$ sudo gitlab-rails console -e production
Loading production environment (Rails 4.2.8)
irb(main):001:0> User.find_by(username: :root).update!(password: :pass1234, password_confirmation: :pass1234, password_expires_at: Time.now)
```

`password_expires_at` に日付を設定すると仮パスワードの扱いになり **サインイン** をすると *Setup new password* で再設定ができます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/8369/8d3751a1-7e2a-41eb-eb44-6a4e043260af.png)

----

:calendar: 2018年3月10日の[OSS Gate大阪ワークショップ](https://oss-gate.doorkeeper.jp/events/69160)ではGitLabのイベントを開催します。OSS開発に参加してコントリビュートしましょう！