NASを買い替えて中にGitlabを構築する

#はじめに
研究室内で使用していたNASにGitlabを入れて運用したいとのお告げが入りました．
しかし，購入から10年が経っているNASにそんなことはできなかった．
ということでNASを買い替えて，Dockerを導入・Gitlabを構築することにしました．

#step0.Gitlabに対応したNASを買う
Synology DiskStation DS718を購入しました．
このNASはDiskStation Manager(DSM)というOSを用いて，GUIベースで設定ができるんので楽ちんです．
詳細は省きますが，パッケージセンターからGitlabをインストールすることで，簡単に環境構築ができる**はずでした．**
インストールが終わっていざ設定編集と思いましたが，あれこれ手こずった上に調べてもイマイチ解決法がわかりません．
そこでもっと一般的であろうDockerを使ってGitlabを構築することにしました．

一応DSM内ですべて環境構築する方法は以下に載ってますのでご参考程度に
https://worktoolsmith.com/synology-nas-gitlab/
#step1.NAS間のデータ移行 
Buffalo LinkStation LS-WHGL/R1 -> Synology DiskStation DS718
という流れでデータを移します．
[NAS to NASのデータ移行方法。](https://kshigeyama.dreampresenter.info/2018/04/04/3729/)
を参考に実行しました．ここでは自分が躓いたところの補足説明のみに留めます．

まず，LinkStation側の設定画面にアクセスしてバックアップ設定をします．

```
xxx.xxx.xxx.xxx:5000
```

とWebブラウザのアドレスバーに打ち込んで設定画面から**管理者アカウント**でログインします．

```
user:admin
pass:設定したパスワード
```

で入れます.
続いて，共有フォルダ管理->共有フォルダ設定の順にクリックすると，共有フォルダの一覧が現れます．
フォルダを選択するとこんな感じの画面が現れます．
<img width="512" alt="20170103012008.png" src="https://qiita-image-store.s3.amazonaws.com/0/204315/88a52df9-bbe0-74d7-4a6e-4644d49e7ed2.png">
``画像引用元　http://www.zopfco.de/entry/2017/01/03/233652``

「いやいやそんな設定ないんだけど」と思ったあなた(数時間これが出てこなくて躓いた自分のこと)
それアカウント違いますよ．

あとはバックアップにチェックを入れれば転送元の設定は完了です．
次は転送先となるDiskStationの設定です．

rsyncを有効にしたら，コマンドからSSHでDiskStationにアクセスします．

```console
[hoge@hostPC]$ssh xxx.xxx.xxx.xxx -l admin
```

ここから先はSSH接続したDiskstation内の操作になります．
rootディレクトリから共有フォルダがあるvolumes1に移動します．
**あらかじめ転送元と同じ名前になるように共有フォルダをDSMから作っておきました．**
（ホントはコマンドでフォルダ作成も行いたかったのですが，アクセス権限設定等の問題で出来なかったため煩わしくなっています）

ではrsyncでバックアップしていきましょう．

```console
[admin@diskstationNAS:/volume1]$rsync -avr --progress rsync://admin@LinkStaionIPAddress/array1_共有フォルダ名/ ./共有フォルダ名/
```
rsyncでrootディレクトリを指定すると確認できますが，転送元のLinkStation側の共有フォルダ名は**array1_**が先頭に付与されています．これを忘れるとバックアップが出来ませんので気をつけてください．

あとはちまちま１フォルダずつバックアップを取っていくだけです．(２０フォルダもあったのでめんどくさかった)
rootディレクトリから全部まとめて転送してくれないか調べてみましたがよくわかりませんでした…トホホ．


#step2.Dockerを使ったGitlab環境の構築
移行が完了したら次は本命のGitlab環境の構築です．
Docker上で動かすので，まずはDockerをDSMでインストールします．Dockerもパッケージセンターからインストールできます．(インストール方法は省略します)
まず，Dockerをインストールすると/volume1/dockerが生成されます．この配下にGitlab関連のフォルダ・ファイルを生成します．

```console
[admin@diskstationNAS:/volumes1/Docker]$mkdir -p ./docker-gitlab/{config,data,logs}
[admin@diskstationNAS:/volumes1/Docker]$cd ./docker-gitlab
[admin@diskstationNAS:/volumes1//Docker/docker-gitlab]$curl -O https://gitlab.com/gitlab-org/omnibus-gitlab/raw/master/docker/docker-compose.yml
```
一行目のコマンドは本来不要(docker-compose.ymlの設定に従って自動生成してくれるはず)なのですが，gitlabの初回起動時にパーミッションエラーを起こして起動しなかったため，あらかじめフォルダを作っておきました．
三行目でgitlabのインストールに必要な設定ファイルであるdocker-compose.ymlをダウンロードしています．
続いて，このdocker-compose.ymlを編集します．

```vim

web:
  image: 'gitlab/gitlab-ce:latest'
  restart: always
  hostname: 'localhost'　# <- 'gitlab.example.com'
  environment:
    GITLAB_OMNIBUS_CONFIG: |
      external_url 'http://localhost:10080' # <- 'http://gitlab.example.com'
  ports:
    - '10080:80'  # <- '80:80'
    - '10443:443' # <- '443:443'
    - '1022:22'   # <- '22:22'
  volumes:
    - './config:/etc/gitlab'   # <- '/srv/gitlab/config:/etc/gitlab'
    - './logs:/var/log/gitlab' # <- '/srv/gitlab/logs:/var/log/gitlab'
    -'./data:/var/opt/gitlab'  # <- '/srv/gitlab/data:/var/opt/gitlab'
```

変更前をコメントアウトで示してあります．volumes:以下を指定しないと起動時にファイルが生成されないので要注意みたいです．
今回のGitlabはローカルエリアネットワーク内のみでの運用で外部アクセスを考慮していないため，ドメイン名はlocalhostにしてあります．
この状態だとhttp://{diskstaionNASのIPアドレス}:10080とアドレスバーに打てば同一ネットワーク内に存在するPCのみがアクセスできます．なのでSSL/TLS通信の設定も行っていません．

では設定が終わったのでGitlabを起動しましょう．なお，起動してから動き出すまで結構時間がかかります．

```console
[admin@diskstationNAS:/volumes1//Docker/docker-gitlab]$docker-compose up -d
```

ここで，PC->Docker->Gitlabという通常の運用形態とは異なる点がありまして，バックグランドオプションの-dをつけずに実行してもなにも表示されません．
ホントならターミナルにログが表示されますが．このログはDSM上のDocker管理ウィンドウ->起動させたgitlabのコンソールウィンドウにすべて表示されます．ややこしい
なので，１度起動させたあとは，ホストPC上のターミナルでコマンドを打つ or DSMのDocker管理ウィンドウ or gitlabコンソールウィンドウにコマンド直打ち　のどれからでもGitlabの停止・再起動ができます．

このままだとアクセスできませんので，gitlab.rbを開きましょう．

```console
[admin@diskstationNAS:/volumes1//Docker/docker-gitlab]$sudo vim ./config/gitlab.rb
```
自動生成されたgitlab.rbの必要な個所のコメントを外して編集します．↓

```vim
external_url 'http://localhost'
nginx['listen_port'] = 10080
```
保存したあと，Gitlabを再起動します．これでアクセスできるようになりました．
あとは通常の設定を行えば運用できるはずです．
#あとがき
最初は，DSMのパッケージセンターからGitlabをインストールして動かしてみたんですが，gitlab.rbがどこにもないから必要になったらどこで弄ればいいんじゃ？？？
という話になりまして，結局DockerからGitlabを動かすことになりました．DSMもLinuxベースながら万能ではないので出来ないことが多くてめんどくさかったですね．
（このあと後輩向けに運用マニュアルを書くんですけど，案外Githubと違うところが多そうで四苦八苦する自分の姿が予見できます(;'∀'))