CentOSにSCLを利用して Growi をインストールする

# はじめに

CentOS + Growiという組み合わせについては，世の中に良記事がたくさん見つかるので，それで十分ならば，そちらを読んだ方が丁寧です．私は以下の記事を参考にしました．良い記事を本当にありがとう．

- [CentOS7\.5にGrowiをインストール \- Qiita](https://qiita.com/yuki476/items/122bd5cc10355ce02b68) (@yuki476 2018年11月14日に更新)
- [CentOS7にGrowi\(旧Crowi\-Plus\)をインストールする方法 \- Qiita](https://qiita.com/SkyLaptor/items/d963157b81a87f3b5726) (@SkyLaptor 2018年04月19日に更新)

## 何が違うの？

各ソフトウェアの公式版や最新版を使いたいならば，上記記事を見たほうが良いです．本当にわかりやすかったです．
が，私はなるべくディストリビューションに近いレベルの方法でやっていきたい．ということで，SCLを使った方法を試してみた．ここでは，その差分を中心に簡単なまとめておこうと思う．

## この記事で説明しないこと

- Growiって何？
- SCLって何？　参考：https://www.softwarecollections.org/en/


# 手順

## 1. CentOS/Redhat Software Collection (SCL) を入れる

``` bash
$ sudo yum install centos-release-scl{,-rh}
```

私は ``yum``コマンドを使うたびに scl を常に参照するのが気になるので，``yum-config-manager``で無効化している．``yum-config-manager``は``yum-utils``に入っている．

``` bash
$ sudo yum install yum-utils
$ sudo yum-config-manager --disable centos-sclo-{sclo,rh} > /dev/null
```

リポジトリを無効化した場合，``yum``コマンドを使うたびに``yum --enablerepo=centos-sclo-rh``とする必要があるので，手間と言えば手間だが，メンテナンスを思うと，こちらの方がいいと思っている．

## 2. gitのインストール（オプション）

最新版（になるべく近い版）が使いたいときもある（よね？）．下記コマンドの`git`のバージョン番号はその時々のSCLのリポジトリをみて書き換える必要がある．ここでは，2.18を入れている．

```bash
$ sudo yum --enablerepo=centos-sclo-rh install rh-git218
```

## 3. mongodbのインストール

バージョン番号への注意はgitをインストールするときと同じ．

```bash
$ sudo yum --enablerepo=centos-sclo-rh install rh-mongodb36
```

なお，systemdのサービスとしては，以下のファイルで定義される．

```
/usr/lib/systemd/system/rh-mongodb36-mongod.service
```

従って，このmongodbの`mongod`をサービスとして起動するのであれば，以下のコマンドとなる．

```bash
$ sudo systemctl start rh-mongodb36-mongod
```

## 4. Node.jsとyarnのインストール

```bash
$ sudo yum --enablerepo=centos-sclo-rh install rh-nodejs10
$ sudo scl enable rh-nodejs10 'npm install -g yarn'
```

2行目を補足すると，`scl`コマンドで環境変数を加えつつ，`npm`でglobalに`yarn`をインストール．（説明できていないような気もするが，雰囲気を感じ取っていただきたく．．．）なお，インストール後のメッセージにも出てくるが，この方法だと `yarn` は `/opt/rh/rh-nodejs10/root/usr/bin/yarn` に設置される．

なお，`scl enable`でコマンドを打つのはメンドクサイと言う人は，このあたりで，以下のコマンドを打っておくのもよろしいかと思われ．

```bash
$ scl enable rh-git218 rh-mongodb36 rh-nodejs10 bash
```

最後の実行コマンド部分を`bash`にすることで，各環境変数を設定したbashが立ち上がる．


## 5. Growi のインストール

個人的な趣味により，`/opt/growi` に入れようと思う．

1行目の`install`コマンドは`mkdir`しつつ，`chown`しているだけである．`-ovagrant`と`-gvagrant`はそれぞれの環境でのユーザとグループに置き換えてほしい．
`git clone`の最後のドット（カレントディレクトリ）も忘れずに．

```bash
$ scl enable rh-git218 bash
$ sudo install -ovagrant -gvagrant -d /opt/growi
$ cd /opt/growi
$ git clone --depth=1 https://github.com/weseek/growi.git .
```

## 6. systemdのサービスとして登録する

前述の@yuki476氏の[Qiita記事](https://qiita.com/yuki476/items/122bd5cc10355ce02b68#3-growi%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)から利用させてもらう．

- `/etc/sysconfig/growi` はそのまま作ればよい
- `/etc/systemd/system/growi.service` はSCLのための手当てが必要．以下のような書き方になる．

```
[Unit]
Description=Growi
After=network.target rh-mongodb36-mongod.service

[Service]
WorkingDirectory=/opt/growi
EnvironmentFile=/etc/sysconfig/growi
ExecStart=/usr/bin/scl enable rh-git218 rh-mongodb36 rh-nodejs10 'npm start'

[Install]
WantedBy=Multi-user.target
```

ちなみに，`growi.service`ファイルは，書き換えるたびに以下のコマンドでリロードする必要がある．

```bash
$ systemctl daemon-reload
```

## 7. 終了（サービス起動）

```bash
$ systemctl start rh-mongodb36-mongod growi
```