GitLab Community EditionをAlibaba Cloudにインストールする 

このチュートリアルでは、オープンソースの**GitLab Community Edition**を**Alibaba Cloud** Elastic Compute Service (ECS)インスタンスにインストールします。

*本ブログは英語版からの翻訳です。オリジナルは[こちら](https://www.alibabacloud.com/blog/version-control-with-gitlab-on-alibaba-cloud_593276)からご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。*

[Alibaba Cloud Tech Share](https://www.alibabacloud.com/campaign/techshare?spm=a2c65.11461447.0.0.18ec5365vhaPJd)執筆者のJeff Cleverleyによるものです。[Tech Share](https://www.alibabacloud.com/campaign/techshare?spm=a2c65.11461447.0.0.18ec5365vhaPJd)は、技術的な知識やベストプラクティスをクラウドコミュニティ内で共有することを奨励するAlibaba Cloudのインセンティブプログラムです。

現代のアプリケーション開発では、特にアジャイル開発やリモートチームなどの現代の開発プラクティスの性質を考えると、バージョン管理システムを使用することが不可欠です。バージョン管理システムにはいくつかの種類がありますが、その中でも、この分野で明確なリーダー的存在となっているものがあります。もちろん、私が言及しているのは、Linuxカーネルの開発を管理するためにLinus Torvaldsによって開発されたバージョン管理システムであるGitのことです。それ以来数年の間に、Git はソフトウェア開発チームの間で爆発的な人気を博し、Git リポジトリのホスティングを提供する有名なオンラインソリューションがいくつかあります。

しかし、独自のGitサービスをホストし、チームがプロジェクトのリポジトリを簡単に管理できる方法を提供したいとしたらどうでしょうか？この質問に対する答えは簡単です。

彼らの言葉を借りるとするならば

「完全なDevOpsライフサイクルのための単一のアプリケーション」です。

今日のチュートリアルでは、オープンソースのGitLab Community EditionをAlibaba Cloud [Elastic Compute Service (ECS)](https://www.alibabacloud.com/product/ecs?spm=a2c65.11461447.0.0.18ec5365vhaPJd)インスタンスにインストールし、HTTPSアクセスとメール通知に必要な設定を行います。また、GitLab の通知メールの SMTP プロバイダとして [Alibaba Cloud DirectMail](https://www.alibabacloud.com/product/directmail?spm=a2c65.11461447.0.0.18ec5365vhaPJd) を使用する予定です。

例題では、コマンドを発行するために 'root' ユーザーを使用します。root ユーザーを使用していない場合は、root 権限が必要な各コマンドの前に 'sudo' コマンドを発行することを忘れないようにしてください。

このデモの目的のために、私はテストドメインである an-example.com を使用します。独自ドメインを使用できるようにしておく必要があります。

GitLab では、2CPU コアで最低 4GB のメモリを持つサーバーを推奨しています。このチュートリアルを進める前に、この仕様のインスタンスを任意の場所にプロビジョニングしておく必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/95ac80a7-54d3-0511-f73c-2efaccda94be.png)


<メモリ4GBを搭載した2CPUサーバ>

サーバのプロビジョニング中に、ssh でサーバにアクセスするので、SSH 公開鍵をアップロードする必要があります。

###ステップ1: ドメインとDNSレコードの設定
**ドメインの追加**

Alibaba Cloud Consoleにログインし、パネルの左側にある水平ナビゲーションのAlibaba Cloud DNSリンクを探してクリックします。

[Alibaba Cloud DNS](https://www.alibabacloud.com/product/dns?spm=a2c65.11461447.0.0.18ec5365vhaPJd)パネルから、パネルの右上にある青い大きなAdd Domain Nameボタンをクリックします。

ポップアップモーダルボックスにドメイン名を入力し、「確認」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/4419874a-f6fb-dc5a-6589-7865ab3de97f.png)

<ポップアップボックスにドメイン名を入力してください>

これでドメイン名がリストに表示されます。

**ドメインのDNSレコードを設定する**

ドメイン名のDNS設定を設定するには、[設定]リンクをクリックする必要があります。

ドメイン名のDNS設定パネルでは、[Alibaba Cloud DNS](https://www.alibabacloud.com/product/dns?spm=a2c65.11461447.0.0.18ec5365vhaPJd)（ドメインネームサーバー）サーバーのアドレスが表示されます。

ドメインがサードパーティのドメインレジストラに登録されている場合は、そのアカウントにログインして、ドメインDNSサーバーをアリババDNSサーバーを指すように変更する必要があります。これは通常、カスタムDNSとしてリストされているドメイン設定の下にあります。

レジストラとして[Alibaba Cloud Domain Names](https://www.alibabacloud.com/domain?spm=a2c65.11461447.0.0.18ec5365vhaPJd)を使用している場合は、すべてがすでに正しく設定されているはずです。

次に、DNSレコードリストの右上にある「レコードの追加」ボタンをクリックする必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/0ac730ca-6dec-3c66-dec4-96a9fe2a72b6.png)

<ドメインDNSサーバーの設定とレコードの追加>

少なくとも2つのレコードを追加する必要があります。
まず、あなたのサーバーのIPアドレスを指すAレコードを以下のように追加します。
タイプ：A - IPV4 address
ホスト：@
ISP回線：デフォルト
値：
TTL：10分

「確認」をクリックしてレコードを追加します。

次に、次のようにドメインを指すホストwwwのCNAMEレコードを追加します。
タイプ：CNAME - 正規名
ホスト：ｗｗｗｗ
ISP回線：デフォルト
値：
TTL：10分

確認をクリックしてレコードを追加します。(代わりに、サーバのIPアドレスを指す'www'ホストを持つ2番目の'A'レコードを追加することもできます)。基本的なレコードが正しく設定されると、ドメインDNSパネルは以下のようになります。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/189d3122-2314-26b3-5b97-44376caa4de8.png)

<ドメインの基本的なDNSレコード>

###ステップ2：GitLab Community Editionをインストールする
GitLabには、無料のオープンソースコミュニティ版と、プレミアムライセンスが必要なエンタープライズ版があります。私たちの目的のためには、GitLab Community Editionはすべての要件を満たすことができるはずです。
まず、サーバーにSSHでログインします。

`# ssh root@<your_server_ip>`

**必要な依存関係のインストールと設定**

さて、GitLabが必要とする依存関係をインストールする必要があります。

```
# sudo apt-get update
# sudo apt-get install -y curl openssh-server ca-certificates
```

[Alibaba Cloud DirectMail](https://www.alibabacloud.com/product/directmail?spm=a2c65.11461447.0.0.18ec5365vhaPJd)や他の SMTP プロバイダを使用しない場合は、 Postfix をインストールしてサーバからメールを送信できるようにする必要があります。以下のようにすればいいでしょう。

```
# sudo apt-get install -y postfix
```

しかし、DirectMailを使うのであれば、それは省略しても構いません。

**GitLab パッケージリポジトリを追加**

次に、GitLab Community Edition のパッケージリポジトリを追加します。

```
# curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | bash
```

(root ユーザを使用していない場合は、bash コマンドの前に sudo を付ける必要があることを覚えておいてください)。

**GitLab Community Edition パッケージのインストール**

では、GitLab Community Editionパッケージをインストールします。URLをドメインのURLに合わせて変更することを忘れないでください。(HTTPSではなくHTTPプロトコルを使用していることを確認してください)

`# EXTERNAL_URL="http://an-example.com" apt-get install gitlab-ce`

GitLabオムニバスパッケージは、Nginxサーバー、PostgreSQLデータベース、Ruby、Node、Go、Let's Encrypt Certbot、Gitなど、あなたのサーバーに必要なものをすべてインストールするのに数分かかります。

完了すると以下のような画面が表示され、GitLabのインストール先を訪問するように指示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/79096849-5410-b943-b0d6-c9465daf1635.png)


[GitLabの初期インストールが完了しました]

あなたのホスト名でGitLabのインストールにアクセスした場合。(ドメイン名を使用することを忘れないでください)

`http://an-example.com`

Gitlabをインストールすると、初期ログイン画面が表示されます。しかし、初期設定ではSSLによるセキュリティが確保されていないため、まだHTTPSプロトコルを使用していません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/5a65bc6a-daf3-f24a-b496-28432a23eb42.png)

[SSLを使わずにGitLabをインストールしている場合]

###ステップ 3: GitLab のインストールを SSL で保護する
GitLab パッケージには、Let's Encrypt SSL のデプロイと設定プロセスが自動化されています。httpsを有効にするのはとても簡単です。

**GitLab用のLet's Encrypt SSL証明書をデプロイする**

サーバー内で GitLab の設定ファイルを開きます。

`# nano /etc/gitlab/gitlab.rb`

まず最初に行う必要があるのは、外部URLを変更することです。設定の場所を探し、URL の HTTP プロトコルを http から https に変更します。

`external_url 'https://an-example.com'`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/8f66a71c-2759-f0d8-0895-91c6cca51c6e.png)

<外部URLをhttpsに変更>

これで、設定でLet's Encryptを有効にすることができます。設定ファイルの中でLet's Encryptの設定を探し、それらの前にある'#'ハッシュ記号を削除してコメントアウトを解除してください。

そして、以下のように設定します。

```
letsencrypt['enable'] = true
letsencrypt['contact_emails'] = ['your-email@your-domain.com']
letsencrypt['group'] = 'root'
letsencrypt['key_size'] = '2048'
letsencrypt['owner'] = 'root'
letsencrypt['wwwroot'] = '/var/opt/gitlab/nginx/www'
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/e3079411-40a3-c812-0aa3-997d5c9e28d0.png)

**GitLabのLet's Encrypt設定**

ファイルを保存して終了します。その後、以下のコマンドを実行してGitLabを再設定し、SSL証明書を有効にします。

`# gitlab-ctl reconfigure`

これで再び GitLab の設定プロセスが実行されますが、今回はもっと短時間で完了します。設定が完了すると、以下のようなメッセージが表示されます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/1591533f-eb81-e9a5-e4d8-310108aac682.png)

[GitLab再設定成功メッセージ]

これで、あなたのドメインの GitLab インストールに https プロトコルを使ってアクセスできるようになりました。

`https://an-example.com`

同じ初期ログイン画面が表示されますが、今回は緑色の南京錠で安全な接続を確認する画面が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/eebd5b04-9eef-b5a5-6373-500c56fb4e6c.png)

<httpsでGitLabのインストールを確認する>

**Cronjobで自動SSL更新を設定する**

GitLabには、以下のようにLet's Encrypt SSL証明書を更新するコマンドがあります。

`renew-le-certs`

しかし、毎月手動で証明書を更新する必要はありませんので、コマンドを使用してcronjobを設定し、SSL証明書が自動更新されるようにします。

そのためには、ルートユーザー用の新しい「crontab」を開きます。

`# crontab -e`

どのエディタを使うか聞かれるかもしれませんが、私は'nano'が好きです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/356a3c9e-1ff2-8b7d-2d92-03ba01a73d08.png)

<crontab用のエディタを選択>

以下のようにcronjobを追加します。

`0 0 * * * * /opt/gitlab/bin/gitlab-ctl renew-le-certs > /dev/null`

ここで保存してcrontabを終了します。

###ステップ4: GitLab用のDirectMail SMTPメールを設定する
**Alibaba Cloud DirectMailの設定**

Alibaba Cloud Consoleの上部水平ナビゲーションにある「製品」ドロップダウンメニューからDirectMailを選択します。
**

DirectMail Overview Panelで、左の水平ナビゲーションから「Email Domains」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/b543a808-c514-da77-ff12-3b2d59c5f157.png)

[Email Domains]を選択してください。

Emails Domainパネルで、パネルの右上にある大きな青い「New Domain」ボタンをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/d3d8dc46-34ca-41f2-4e8a-d3c702e83cc0.png)

「新規ドメイン」ボタンをクリックしてください。

プライマリドメインのサブドメインとしてメールドメインを追加します。あなたが望む任意のサブドメインを選択することができますが、それは後で任意のドメインレコードの混乱を避けるために、SMTPサービスに関連するドメインを選択することをお勧めします。

私の場合、私のデモドメインはan-example.comなので、私が電子メールドメインに使用しているサブドメインはdirectmail.an-example.comです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/1c4d707f-aa23-cea4-91d3-948e3ed866f2.png)

<自分のメールドメインをサブドメインとして追加>する

**メールドメインDNSレコードの設定**

これで、あなたの電子メールサブドメインが電子メールドメインリストに表示されます。ここで、[設定]をクリックして、メール用にドメインを設定するために必要なDNSレコードを取得します。

これでドメイン設定パネルが開き、Alibaba Cloud DNS設定ページのドメインDNSレコードに設定が必要な4つのDNSレコードが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/e46fae01-8f8a-5276-28f5-38136c6248a6.png)


<メールドメインのDNSレコードをメモしておく>

ドメインのAlibaba Cloud DNS設定に戻り、提供されたレコードごとにドメインの新しいDNSレコードを追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/4a805a59-73da-a117-f471-6ed961f4ae06.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/6ea96b3f-859d-825a-4007-219d9481c474.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/6420b6af-7dbb-46b6-6e2b-ff3205bcf0a8.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/fa5db04e-7e0a-0dd5-6b79-6047b29ecb18.png)

[DirectEmail EmailドメインのDNSレコードの追加]について

あなたのドメインのDNSレコードは現在、このように表示されているはずです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/f19edd5d-2228-daab-7414-302f718a75e6.png)

[DirectMailレコードのあるドメインDNSレコード]について

**メールドメインのDNSレコードを確認する**

DirectMail Email Domainsパネルで、Verifyリンクをクリックすることができるようになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/bbd0a016-ae3d-037b-d4d9-f9bb6620bb0c.png)

<メールドメインの確認リンクをクリックしてください>

コンソールから確認作業の確認を求められます。確認してください。

メールドメインのステータスがオレンジ色の「To be verified」から緑色の「Verification Successful」に変わります。

###ステップ5. 送信者アドレスの設定
メールドメインの確認が完了したら、送信者アドレスを設定することができます。左側のナビゲーションパネルの「送信者アドレス」リンクをクリックします。

**送信者アドレスの作成**

送信者アドレスパネルが開きますので、パネルの右上にある「送信者アドレスの作成」ボタンをクリックします。

モーダルウィンドウがポップアップしますので、いくつかの詳細を追加する必要があります。

メールドメインには、前のステップで作成したメールドメインを選択します。

アカウントには、アカウント名を選択します。このアカウント名は、以下の形式で送信者アドレスを作成するために使用されます。私の場合は gitlab@an-example.com を選択しました。

`<Account-Name@Email-Domain>`

Reply-To-Addressには、アクセスできるアクティブなメールアドレスを入力する必要があります。

このアドレスは、DirectMailから送信されるメールには使用されませんが、送信者アドレスを確認するために必要です。DirectMailはこのアドレスに検証メールを送信しますので、この検証メールのリンクをクリックするまで、SMTPパスワードの設定を完了することはできません。

メールタイプは、トリガーまたはバッチを選択します。CRM の目的のために、私はトリガーを使用しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/be2a0359-d9e5-2b28-5370-c5a77aaf6b18.png)

<差出人アドレスの作成>

**返信先アドレスの確認**

送信者アドレスを作成したら、必要なSMTPパスワードを設定できるようにする前に、Reply-To-Addressを確認する必要があります。これを行うには、Verify the reply-to-addressリンクをクリックします。

別のモーダルがポップアップし、確認を求めます。確認すると、システムは返信先アドレスにメールを送信します。

あなたがアドレスに返信として使用したメールアドレスの受信トレイにアクセスし、DirectMailからのメールを見つけて、あなたのメールアドレスを確認するために内のリンクをクリックします。

このリンクをクリックすると、Alibaba Cloud Console内のパネルが開き、メールアドレスの確認が行われます。

**SMTPパスワードを設定**

これで、送信者アドレスの行のSet SMTP Passwordリンクをクリックして、SMTPパスワードを設定することができます。

ポップアップモーダルに安全なパスワードを入力します。

**DirectMail SMTPサーバの詳細をメモする**

[DirectMailの概要]パネルから、[ドキュメント]リンクをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/65a3f3ba-c1f9-b65f-7edf-857a93dc8212.png)

<DirectMailドキュメントのリンクをクリックしてください>

DirectMail のドキュメントには、Alibaba DirectMail SMTP サーバーのアドレスとポート設定の詳細が記載されています。

###ステップ5: GitLabをSMTP用に設定する
サーバー上で GitLab 設定ファイルを開き、編集します。

`# nano /etc/gitlab/gitlab.rb`

メール設定のセクションを探し、ハッシュ記号 '#' を削除して以下の行のコメントアウトを解除し、DirectMail の設定から適切なメールアドレスを設定します。

```
gitlab_rails['gitlab_email_from'] = '<account-name@your-email-domain>'
gitlab_rails['gitlab_email_reply_to'] = 'noreply@<your-domain.com>'
```

(忘れないでください - gitlab_email_from は、以前 DirectMail の設定で作成したメールアカウントと一致させなければなりません。gitlab_email_reply_to には、標準的な返信用のメールアドレスを指定することができます。)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/2dc12984-62fa-bc1e-712a-d32403600970.png)

[GitLab Emailの設定]について

次に、以下のSMTP設定を行う必要がありますが、これもDirectMailの設定を使用します。

```
gitlab_rails['smtp_address'] = “<aliyun-smtp-server-address>”
gitlab_rails['gitlab_email_from'] = '<account-name@email-domain.com>' 
gitlab_rails['smtp_enable'] = true 
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "<account-name@email-domain.com>" 
gitlab_rails['smtp_password'] = “<your-smtp-password>“ 
gitlab_rails['smtp_domain'] = “<your-email-domain>” 
gitlab_rails['smtp_authentication'] = “login"
gitlab_rails['smtp_openssl_verify_mode' = 'peer'
```

私の場合は以下のような設定になっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/4151ecc6-8026-99ad-37cc-513b6e4d4c6f.png)

<GitLabをSMTP用に設定する>

ファイルを保存して終了します。次に、GitLabをSMTPの設定で再設定します。

`# gitlab-ctl reconfigure`

GitLabは再び設定スクリプトを実行し、それが完了すると、いよいよGitLabのインストール先のドメインにログインすることができるようになります。

`https://an-example.com`

###ステップ: 6 GitLabの設定を完了させる
**ルート（管理者）のパスワードとログインを追加**

GitLab のドメインに最初にアクセスすると、パスワードのリセット画面が表示されます。これで、初期の root ユーザーパスワードが設定されます。安全なパスワードを選択し、「パスワードの変更」ボタンをクリックします。
次にGitLabにログインします。管理者ユーザー名はroot、パスワードは先ほどの手順で設定したパスワードになります。

**ルート（管理者）メールアドレスの変更**

ログインしたら、まずはroot/管理者のメールを変更し、管理者名もrootから変更します。
トップナビゲーションメニューの右にあるドロップダウンを開き、設定を選択します。
メインの設定パネルでは、ルートユーザーのメールアドレスを追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/cb3b9a26-dbea-e306-b9eb-ab110145917d.png)


<ルートユーザーのメールアドレスを追加してください>

プロファイル設定の更新] をクリックすると、指定したアドレスに検証リンクを含む電子メールが送信されます。

これは、DirectMail SMTP 設定が正しく設定されていることを確認するためのテストでもあります。検証メールを受信した場合は、すべてが正常に動作していることを示しています。あなたが検証の電子メールを受信しない場合は、戻って設定を確認してください。

メールアドレスの所有権を確認し、管理者ユーザー設定で電子メールを更新するプロセスを完了するために、検証メールに記載されているリンクをクリックする必要があります。
検証リンクをクリックすると、新しいブラウザウィンドウが開き、GitLab の設定ページに確認の通知が表示されます。

**ルート (管理者) 電子メールのユーザー名を変更する**

ここで、管理者のユーザー名をデフォルトのルートから、より安全で適切なものに変更したいと思います。

画面左の水平方向のユーザー設定ナビゲーションからアカウントをクリックします。

ユーザー名の変更セクションで、ユーザー名を変更して、オレンジ色の大きなユーザー名変更ボタンをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/75cad4ad-e33b-4ce2-0410-a0deb6efe892.png)

<ユーザー名の変更>

これで基本的なセットアップは完了です。リポジトリの設定とユーザー権限をプロジェクトごとに設定してください。

###(オプション) ステップ7: セキュリティ更新通知を購読する
もうひとつやっておいたほうがいいことがあります。それは、GitLab のセキュリティアップデートのためのメールを購読することです。これをしないと、セキュリティ上の問題やそのパッチの通知を受け取ることができません。

購読のページは[こちら](https://page.gitlab.com/SubscriptionCenter.html?spm=a2c65.11461447.0.0.18ec5365vhaPJd)からどうぞ。

*アリババクラウドは日本に２つのデータセンターを有し、世界で60を超えるアベラビリティーゾーンを有するアジア太平洋地域No.1(2019ガートナー)のクラウドインフラ事業者です。
アリババクラウドの詳細は、こちらからご覧ください。
[アリババクラウドジャパン公式ページ](https://www.alibabacloud.com/ja)*