やん事ない理由で Git*.com を使えない日々をオンプレ版 GitLab で乗り切る


そう。[やんごとない](https://www.google.com/search?client=firefox-b-d&q=%E3%82%84%E3%82%93%E3%81%94%E3%81%A8%E3%81%AA%E3%81%84)理由で使えない。  
オンプレ版 GitLab で乗り切った覚書きとして GitLab 構築 (約2h) の一部始終の手順を書いておく。

## 環境
**VirtualBox: 6.0.10r132072**
https://www.virtualbox.org/wiki/Downloads

**GitLab Community Edition 12.1.6**

| 用途                               | OS         | Memory |
|------------------------------------|------------|--------|
| Host OS                            | Windows 10 | 16GB    |
| Guest OS (GitLab サーバとして使用) | CentOS 7.7  | ~~4GB~~ 8GB   |


## ゴール
イントラ内、~~もしくは VPN 経由~~で `http://192.168.100.201` で GitLab にアクセスできること。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134761/1a162bcb-78bf-f5a7-cf71-51f2b9a9467c.png" width="750">


## 構成図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134761/543e8724-5643-0879-914c-dbcb9983ca09.png)


## ４つのステップ
1. [Guest OS に CentOS をインストール](#guest-os-に-centos-をインストール)
2. [GitLab のインストールと初期設定](#gitlab-のインストールと初期設定)
3. [既存 SVN or Git リポジトリがある場合はそれを GitLab にプッシュ](#既存-svn-or-git-リポジトリがある場合はそれを-gitlab-にプッシュ)
4. [チームメンバと GitLab の使い方を一緒に学んでいく](#チームメンバと-gitlab-の使い方を一緒に学んでいくthumbsup)

#### Guest OS に CentOS をインストール

1. GUI はいらないので minimal をダウンロード
  http://ftp.riken.jp/Linux/centos/7.7.1908/isos/x86_64/

1. 仮想マシンを新規作成
  <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134761/675986c4-d41a-2708-6c6d-1dbdbb64362b.png" width="640">

1. ダウンロードした ISO をマウント
  <img width="640" alt="ダウンロードした ISO をマウント" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134761/b40fbc30-a364-07fe-7c1c-732a9f1e0a05.png">

1. ホストオンリーアダプターを追加
  <img width="640" alt="ホストオンリーアダプターを追加" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134761/7afb9cc9-91bd-7794-02ac-716e43cf1957.png">

1. 起動する
  参考: [CentOSのインストール](https://qiita.com/uhooi/items/c41ccaed66e944aa859d#centos%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)

1. NAT の設定を変更する (インターネットに出れるようにするため)
`$ vi /etc/sysconfig/network-scripts/ifcfg-enp0s3`

    ```ini
    TYPE=Ethernet
    PROXY_METHOD=none
    BROWSER_ONLY=no
    BOOTPROTO=none #← 変更元は dhcp
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=no
    IPV6INIT=yes
    IPV6_AUTOCONF=yes
    IPV6_DEFROUTE=yes
    IPV6_FAILURE_FATAL=no
    IPV6_ADDR_GEN_MODE=stable-privacy
    NAME=enp0s3
    UUID=xxx
    DEVICE=enp0s3
    ONBOOT=yes #← 変更元は no
    IPADDR=10.0.2.25 #← 追加
    NETMASK=255.255.255.0 #← 追加
    GATEWAY=10.0.2.2 #← 追加
    DNS1=8.8.8.8 #← 追加
    ```

1. ホストオンリーアダプターの設定を変更する (Host <--> Guest 間で通信するため)
※ VirtualBox GUI でも変更できるが...[^1]
[^1]: バージョンアップで UI が変わったり、そもそも他の仮想化ソフトを使わなければいけないこともあるので設定ファイルを直接変更する

`$ vi /etc/sysconfig/network-scripts/ifcfg-enp0s8`

    ```ini
    TYPE=Ethernet
    PROXY_METHOD=none
    BROWSER_ONLY=no
    BOOTPROTO=none  #← 変更元は dhcp
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=no
    IPV6INIT=yes
    IPV6_AUTOCONF=yes
    IPV6_DEFROUTE=yes
    IPV6_FAILURE_FATAL=no
    IPV6_ADDR_GEN_MODE=stable-privacy
    NAME=enp0s8
    UUID=yyy
    DEVICE=enp0s8
    ONBOOT=yes #← 変更元は no
    IPADDR=192.168.56.101 #← 追加
    NETMASK=255.255.255.0 #← 追加
    DNS1=8.8.8.8 #← 追加
    ```

1. 再起動
`$ reboot`

1. ポートフォワーディングのルールを追加
  <img width="640" alt="ポートフォワーディングのルールを追加" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134761/77541422-e45c-4bbd-cd7f-ea81eae7e56e.png">
  - Rule1: `http://192.168.100.201:80` で `http:192.168.56.101:80` にアクセスできる。
  - Rule2: `$ ssh -l {user-name}@192.168.100.201 -p 22` で `192.168.56.101` に ssh できる。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134761/7e185f42-6b84-2d64-4263-d2c5583e3a6d.png)  

    >  ※ やん事ない理由で80番ポートを使えず、10080番を使う場合

    >   1. `$ vi /etc/gitlab/gitlab.rb`  
    >   
    >     ```rb
    >      #external_url 'http://192.168.100.201'
    >      external_url 'http://192.168.100.201:10080'
    >      ```
    >   1. 再構成 `$ gitlab-ctl reconfigure`
    >   1. ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134761/ad263146-14eb-2e7a-bd15-e75f65d7b43f.png)

1. 通信を確認。
  1. **[Guest OS]** からインターネットに出れること。  
    `$ curl http://www.example.com/`
  1. **[Host OS]** から Guest OS に ssh できること。   
    *$ ssh {ユーザ名}@{前項で設定したホストオンリーアダプターのIPアドレス} -p 22*  
    `$ ssh foo@192.168.56.101 -p 22`  
  1. **[同一 LAN 上のマシン]** から Host OS を経由して Guest OS に ssh できること。  
    *$ ssh {ユーザ名}@{ホストOSのIPアドレス} -p 22*     
    `$ ssh bar@{192.168.100.201} -p 22`

####CentOS の初期設定
1. 最低限の設定とインストール。

```
# 最新化
$ yum -y update

# 開発者ツールのインストール
$ yum -y groupinstall "Development Tools"

# vim インストール
$ yum -y install vim-enhanced
```

#### GitLab のインストールと初期設定

1. インストール  
https://about.gitlab.com/install/#centos-7  
公式の手順を基本にする。**(注: インストールするパッケージは gitlab-ee ではなく gitlab-ce)**  

    ```sh
    $ curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash
    ↓
    $ curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash

    $ sudo EXTERNAL_URL="https://gitlab.example.com" yum install -y gitlab-ee  
    ↓  
    $ sudo EXTERNAL_URL="https://192.168.100.201" yum install -y gitlab-ce
    ```

1. 管理者でサインイン
  Username: `root`
  Password: `5iveL!fe`

1. 初期設定３つ
  - GitLab ユーザの作成
  - グループの作成
  - 新規プロジェクトの作成 `group/project`  

参考:
(基本) https://git-manual.net/gitlab-project-repository-user/
(ロールに付与される権限) https://qiita.com/mikoski01/items/7a7795a8a1e98d9ba6d9

#### 既存 SVN or Git リポジトリがある場合はそれを GitLab にプッシュ。
- Git リポジトリ

```
$ git remote set-url origin git@192.168.56.201/group/project.git
```

- SVN リポジトリの場合は **git-svn** コマンドを使って Git リポジトリに変換してから `git remote set-url` する。   
[Git-svnでSubversionからGitに移行方法](https://www.yoshikinoue.net/2018-09-21-subversion-git-gitsvn)

#### チームメンバと GitLab の使い方を一緒に学んでいく:thumbsup: 
社内勉強会などの啓蒙活動が基本。あとは「習うより慣れるやで～」的なノリで乗り切る。

## 後記
続編も書こうと思う。
 
続編1: [オンプレ版 GitLab で GitLab Pages する](https://qiita.com/hykisk/items/ebff2f7cd2e8100a6bbe ) 
続編2: [Docker outside of Docker (DooD) で GitLab-CI する](https://qiita.com/hykisk/items/30d83cea4e148c79cb87)