10分でLinuxのGitLab環境(Docker)を構築してAndroiStudioのソースをPushする

#〇この記事について
Linux(Ubuntu)環境で、Docker-Composeに設定を登録し、Docker（仮想環境ツール）を起動して、簡単にローカルのGitLab環境を構築し、Androidのソースを保存するまでの設定方法を記載します。
別にAndroidだけじゃなくて他のソースだろうと管理できますが、一応AndroidStudioで実際にPushする設定まで含めます。

今回はDockerにGitLab公式のイメージがあり、それを利用します。
Dockerって使わなくても直接OSにGitLabインストールすればいいんじゃない？という人もいるかもしれませんが、両方試してみて、Dockerのほうが明らかに管理が楽でした。
<font color="red">コマンドで簡単にGitLabに適した環境が丸ごとダウンロードできてしまう！ソフトウェアのアップデートが簡単にできてしまう！バックアップも簡単！時代の流れは完全にDocker！</font>と思わせるほどです。

Docker-Composeに関しても、Dockerのコマンドをメモっておいてそれを叩けば利用しなくてもよいのですが、Dockerを管理していくならあると便利です。（というかほぼ必須です）

コマンドと公式URLを書いた10分コースと詳細も追加した3時間コースを用意したので好きなほうを読んでください。

#〇環境
・OS
Ubuntu 18.04.2 LTS
・Docker
18.09.2
・Docker-Compose
1.23.2
・gitlab-ce
11.7.5
・git
2.17.1
・AndroidStudio
3.3

#〇10分で構築する方法
##Dockerの設定
・[公式]Get Docker CE for Ubuntu
https://docs.docker.com/install/linux/docker-ce/ubuntu/

・前提ソフトウェアのインストール
sudo -E apt-get install -y apt-transport-https ca-certificates curl software-properties-common

・GPG公開鍵をインストール
sudo -E curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

・aptリポジトリの設定
\[x86_64\](他のCPUなら公式参照)
sudo -E add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu  $(lsb_release -cs) stable"

・Dockerのインストール
sudo -E apt-get install -y docker-ce

・Docker内プロキシの設定
sudo mkdir /etc/systemd/system/docker.service.d
sudo vi /etc/systemd/system/docker.service.d/http-proxy.conf

```http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://yyyyy:3128/"
```

sudo systemctl daemon-reload
sudo systemctl restart docker

##Docker-Composeの設定
・[公式]Install Docker Compose
https://docs.docker.com/compose/install/

・[公式]Install GitLab using docker-compose
https://docs.gitlab.com/omnibus/docker/#install-gitlab-using-docker-compose

・ダウンロード
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

・権限変更
sudo chmod +x /usr/local/bin/docker-compose

・dockerと連携するGitLabファイルの保存場所作成
mkdir /docker
mkdir /docker/gitlab/
mkdir /docker/gitlab/config
mkdir /docker/gitlab/logs
mkdir /docker/gitlab/data

・docker-compose.ymlの作成

```docker-compose.yml
gitlab:
  image: 'gitlab/gitlab-ce:latest'
  restart: always
  hostname: 'xxxxx.co.jp'
  environment:
    GITLAB_OMNIBUS_CONFIG: |
      external_url 'http://xxxxx.co.jp:10080/gitlab/'
      gitlab_rails['time_zone'] = 'Asia/Tokyo'
  ports:
    - '10080:10080'
    - '10443:443'
    - '10022:22'
  volumes:
    - '/docker/gitlab/config:/etc/gitlab'
    - '/docker/gitlab/logs:/var/log/gitlab'
    - '/docker/gitlab/data:/var/opt/gitlab'
```

・イメージのダウンロード、docker起動
docker-compose up -d gitlab

##GitLabの設定
・初回ログイン
http://xxxxx.co.jp:10080/gitlab/
にアクセス
Username: root
Password: 5iveL!fe

・Registerからアカウント作成

・プロジェクトの作成
(AndroidStudioならInitialize repository with a READMEはしないように)

・CloneボタンのURLをコピー
[http://xxxxx.co.jp:11080/gitlab/user/test.git]

##AndroidStudioの設定
・プロジェクト作成

・バージョンコントロールをGitに設定
VCS → Enable Version Control Integration [Git]

・プロジェクトをadd,commit
ソースツリーを[Android] → [Project]に変更
ルートディレクトリを右クリックして、[Git] → [Add]
同じく[Git] → [Commit Directory]

・プロジェクトをpush
VCS → Git → Push
[Define remote]をクリックするとURLを入力できるので
Cronでコピーした[http://xxxxx.co.jp:11080/gitlab/user/test.git]
を入力。
その際にユーザー登録したIDとパスワードを聞かれるので入力。

##GitLabで表示確認
http://xxxxx.co.jp:10080/gitlab/
にアクセスしてプロジェクトにソースが反映されているのを確認。

#〇3時間で構築する方法

##Dockerについて
Linuxで動作する仮想環境ですが、
バーチャルボックスなどと違いOSはインストールせずに既存のOSの上に乗っかる形になるので、
隔離された環境が、容易に作成、コピー、バックアップができ、
公式が作った環境を簡単にダウンロード、アップデートできるのが魅力です。
公式のイラスト通り、船(OS)の上にコンテナ(仮想環境)を積んでいくという印象ですね。
![doc.png](https://qiita-image-store.s3.amazonaws.com/0/252283/b19e0897-3d1e-eedb-9fb9-07fe824e2bda.png)


##Dockerのインストール
・[公式]Get Docker CE for Ubuntu
https://docs.docker.com/install/linux/docker-ce/ubuntu/

・前提ソフトウェアのインストール
sudo -E apt-get install -y apt-transport-https ca-certificates curl software-properties-common

・GPG公開鍵をインストール
GNU Privacy Guard 暗号化ソフトで生成される公開鍵
パッケージが正しい配布先のものかどうかのチェックなどに利用
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

・aptリポジトリの設定
\[x86_64\](他のCPUなら公式参照)
sudo -E add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu  $(lsb_release -cs) stable"

・Dockerのインストール
sudo -E apt-get install -y docker-ce
ちなみに CE（コミュニティエディション）とEE（エンタープライズエディション）がありCEは無償版です。

sudo mkdir /etc/systemd/system/docker.service.d
sudo vi /etc/systemd/system/docker.service.d/http-proxy.conf

```http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://yyyyy:3128/"
```

sudo systemctl daemon-reload
sudo systemctl restart docker

##Docker-Composeについて
Docker-Composeはファイルに設定した内容で、Dockerのイメージをダウンロード、コンテナを起動でき、管理が容易になるというものです。
複数のDockerが結びつく場合により便利になります。

##Docker-Composeの設定
・[公式]Install GitLab using docker-compose
https://docs.gitlab.com/omnibus/docker/#install-gitlab-using-docker-compose

・ダウンロード
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

・権限変更
sudo chmod +x /usr/local/bin/docker-compose

・Dockerと連携するGitLabファイルの保存場所作成
Dockerは簡単に削除、アップデートすることがあるので、重要ファイルはDocker外に保存します。
mkdir /docker
mkdir /docker/gitlab/
mkdir /docker/gitlab/config
mkdir /docker/gitlab/logs
mkdir /docker/gitlab/data

・docker-compose.ymlの作成

```docker-compose.yml
gitlab:
  image: 'gitlab/gitlab-ce:latest'
  restart: always
  hostname: 'xxxxx.co.jp'
  environment:
    GITLAB_OMNIBUS_CONFIG: |
      external_url 'http://xxxxx.co.jp:10080/gitlab/'
      gitlab_rails['time_zone'] = 'Asia/Tokyo'
  ports:
    - '10080:10080'
    - '10443:443'
    - '10022:22'
  volumes:
    - '/docker/gitlab/config:/etc/gitlab'
    - '/docker/gitlab/logs:/var/log/gitlab'
    - '/docker/gitlab/data:/var/opt/gitlab'
```

保存ディレクトリやymlの作成場所は管理しやすければ、どこでもよいです。
テスト環境が必要でしたらportsやvolumesをずらせば、簡単に複製できます。

・docker-compose.ymlの説明
image:
Dockerのイメージ（元データ）です。
一から自分で作成して、gitlabを入れてもよいのですが、
公式がgitlabを動かすのに最適なイメージを用意してくれています。
https://hub.docker.com/r/gitlab/gitlab-ce/
他にもイメージを利用したければこちらで検索。
https://hub.docker.com/search/?q=&type=image
'gitlab/gitlab-ce:latest'はgitlab-ceの最新版という意味で、イメージを更新すれば、最新版にアップデートしていくことも容易です。

restart:
alwaysにすれば、マシンの再起動時、dockerデーモンの再起動時に再起動してくれます

environment:
gitlabの環境変数を事前に指定できます。
後からでも/etc/gitlab/gitlab.rbを編集して
gitlab-ctl reconfigure
gitlab-ctl restart
でも反映されます。
しかし、手動の変更はコンテナを作り直すたびに初期化されるので、できれば避けたいところです。

ports:
実際のポートとDocerのポートを結び付けています。
10022番ポートに来たら、Docerの22番ポートにつなぎます、という意味です。
なぜGitLabを80で動かさないかというと、GitLabのCronのURLがどうしても80で動かして10080と表示できるように設定できなかったため、
仕方なくDocker内でもHTTPを10080ポートにしました。
HTTPを80で動かしたい人は10080と記載されているところを全部直せばできます。

volumes:
重要フォルダをDocker外に結び付けてDockerを削除しても設定やログがそのまま残るようにしています。
つまりこれらのバックアップさえあればよいということで管理が楽ですね。

・イメージのダウンロード、docker起動
docker-compose up -d gitlab
dockerの起動ですが、イメージがない場合はダウンロードしてきてくれます。

ちなみにDocker-Composeを使わず手動で叩くとこんな感じです。
docker run --detach \
    --hostname XXXXX.co.jp \
    --publish 10443:443 --publish 10080:10080 --publish 10022:22 \
    --name gitlab \
    --restart always \
    --volume /docker/gitlab/config:/etc/gitlab \
    --volume /docker/gitlab/logs:/var/log/gitlab \
    --volume /docker/gitlab/data:/var/opt/gitlab \
    gitlab/gitlab-ce:latest

・イメージ確認
docker images

・コンテナ確認
docker ps -a

・コンテナに入る
docker exec -it gitlab /bin/bash

##GitLabの設定
・初回ログイン
http://xxxxx.co.jp:10080/gitlab/
にアクセス

・パスワード変更
初回パスワードを入力して、適当に変更
Username: root
Password: 5iveL!fe

・Registerからアカウント作成
作成したアカウントの下にプロジェクトを作成していきます。

・プロジェクトの作成
Initialize repository with a READMEをしてしまうと、一度PullしないといけなくなりAndroidStudioの場合は面倒なことになってしまいます。

・CloneボタンのURLをコピー
[http://xxxxx.co.jp:11080/gitlab/user/test.git]

##AndroidStudioの設定
・プロジェクト作成（既存であればそれでよいです）

・バージョンコントロールをGitに設定
VCS → Enable Version Control Integration [Git]

・プロジェクトをadd,commit
ソースツリーを[Android] → [Project]に変更
ルートディレクトリを右クリックして、[Git] → [Add]
同じく[Git] → [Commit Directory]

add,commitする方法は複数あるのでやりやすい方法で行ってください。

・プロジェクトをpush
VCS → Git → Push
[Define remote]をクリックするとURLを入力できるので
Cronでコピーした[http://xxxxx.co.jp:11080/gitlab/user/test.git]
を入力。
その際にユーザー登録したIDとパスワードを聞かれるので入力。
他にもSSHのキーを登録してアクセスする方法もあります。

##GitLabで表示確認
http://xxxxx.co.jp:10080/gitlab/
にアクセスしてプロジェクトにソースが反映されているのを確認。