CentOS7にRealm Object Serverをインストールする

1.8.3からマイグレーションするために、マイグレーション先のRealm Object Serverを新規セットアップしたときのログです。

### ユーザー作成
```shell-session
# useradd ros
# passwd ros
```
### rosユーザーで作業
```shell-session
# su - ros
```
### ROSインストール（公式サイトより）
```shell-session
$ curl -s https://raw.githubusercontent.com/realm/realm-object-server/master/install.sh | bash
```
### HOGEとしてプロジェクト作成
```shell-session
$ ros init HOGE
```
### 起動確認
```shell-session
$ cd HOGE
$ npm start
```
### デーモン化(公式サイトより)
```shell-session
$ npm install -g pm2
```
* typescriptのインストール（ROSプロジェクトがtypescriptなので）

```shell-session
$ pm2 install typescript
```
* 起動

```shell-session
$ pm2 start src/index.ts --name HOGE
[PM2] Starting /home/ros/HOGE/src/index.ts in fork_mode (1 instance)
[PM2] Done.
┌──────────┬────┬──────┬───────┬────────┬─────────┬────────┬─────┬───────────┬───────┬──────────┐
│ App name │ id │ mode │ pid   │ status │ restart │ uptime │ cpu │ mem       │ user  │ watching │
├──────────┼────┼──────┼───────┼────────┼─────────┼────────┼─────┼───────────┼───────┼──────────┤
│ HOGE     │ 0  │ fork │ 16910 │ online │ 0       │ 0s     │ 99% │ 15.3 MB   │ ros   │ disabled │
└──────────┴────┴──────┴───────┴────────┴─────────┴────────┴─────┴───────────┴───────┴──────────┘
 Use `pm2 show <id|name>` to get more details about an app
```
* 確認

```shell-session
$ pm2 show 0
 Describing process with id 0 - name HOGE
┌───────────────────┬───────────────────────────────────────────────────────────────────────────────────────┐
│ status            │ online                                                                                │
│ name              │ HOGE                                                                                  │
│ restarts          │ 0                                                                                     │
│ uptime            │ 7s                                                                                    │
│ script path       │ /home/ros/HOGE/src/index.ts                                                           │
│ script args       │ N/A                                                                                   │
│ error log path    │ /home/ros/.pm2/logs/HOGE-error-0.log                                                  │
│ out log path      │ /home/ros/.pm2/logs/HOGE-out-0.log                                                    │
│ pid path          │ /home/ros/.pm2/pids/HOGE-0.pid                                                        │
│ interpreter       │ /home/ros/.nvm/versions/node/v8.11.1/lib/node_modules/pm2/node_modules/.bin/ts-node   │
│ interpreter args  │ N/A                                                                                   │
│ script id         │ 0                                                                                     │
│ exec cwd          │ /home/ros/HOGE                                                                        │
│ exec mode         │ fork_mode                                                                             │
│ node.js version   │ 8.11.1                                                                                │
│ watch & reload    │ ✘                                                                                     │
│ unstable restarts │ 0                                                                                     │
│ created at        │ 2018-04-24T06:01:01.630Z                                                              │
└───────────────────┴───────────────────────────────────────────────────────────────────────────────────────┘
 Code metrics value
┌─────────────────┬──────────┐
│ Loop delay      │ 387.33ms │
│ Active requests │ 0        │
│ Active handles  │ 10       │
└─────────────────┴──────────┘
 Add your own code metrics: http://bit.ly/code-metrics
 Use `pm2 logs HOGE [--lines 1000]` to display logs
 Use `pm2 monit` to monitor CPU and Memory usage HOGE
```
* 自動起動化

```shell-session
$ pm2 startup
[PM2] Init System found: systemd
[PM2] To setup the Startup Script, copy/paste the following command:
sudo env PATH=$PATH:/home/ros/.nvm/versions/node/v8.11.1/bin /home/ros/.nvm/versions/node/v8.11.1/lib/node_modules/pm2/bin/pm2 startup systemd -u ros --hp /home/ros

$ sudo env PATH=$PATH:/home/ros/.nvm/versions/node/v8.11.1/bin /home/ros/.nvm/versions/node/v8.11.1/lib/node_modules/pm2/bin/pm2 startup systemd -u ros --hp /home/ros
[sudo] t_shimada のパスワード:

                        -------------

__/\\\\\\\\\\\\\____/\\\\____________/\\\\____/\\\\\\\\\_____
 _\/\\\/////////\\\_\/\\\\\\________/\\\\\\__/\\\///////\\\___
  _\/\\\_______\/\\\_\/\\\//\\\____/\\\//\\\_\///______\//\\\__
   _\/\\\\\\\\\\\\\/__\/\\\\///\\\/\\\/_\/\\\___________/\\\/___
    _\/\\\/////////____\/\\\__\///\\\/___\/\\\________/\\\//_____
     _\/\\\_____________\/\\\____\///_____\/\\\_____/\\\//________
      _\/\\\_____________\/\\\_____________\/\\\___/\\\/___________
       _\/\\\_____________\/\\\_____________\/\\\__/\\\\\\\\\\\\\\\_
        _\///______________\///______________\///__\///////////////__


                          Community Edition

            Production Process Manager for Node.js applications
                     with a built-in Load Balancer.


                Start and Daemonize any application:
                $ pm2 start app.js

                Load Balance 4 instances of api.js:
                $ pm2 start api.js -i 4

                Monitor in production:
                $ pm2 monitor

                Make pm2 auto-boot at server restart:
                $ pm2 startup

                To go further checkout:
                http://pm2.io/


                        -------------

[PM2] Init System found: systemd
Platform systemd
Template
[Unit]
Description=PM2 process manager
Documentation=https://pm2.keymetrics.io/
After=network.target

[Service]
Type=forking
User=ros
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
Environment=PATH=/home/ros/.nvm/versions/node/v8.11.1/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Environment=PM2_HOME=/home/ros/.pm2
PIDFile=/home/ros/.pm2/pm2.pid

ExecStart=/home/ros/.nvm/versions/node/v8.11.1/lib/node_modules/pm2/bin/pm2 resurrect
ExecReload=/home/ros/.nvm/versions/node/v8.11.1/lib/node_modules/pm2/bin/pm2 reload all
ExecStop=/home/ros/.nvm/versions/node/v8.11.1/lib/node_modules/pm2/bin/pm2 kill

[Install]
WantedBy=multi-user.target

Target path
/etc/systemd/system/pm2-ros.service
Command list
[ 'systemctl enable pm2-ros',
  'systemctl start pm2-ros',
  'systemctl daemon-reload',
  'systemctl status pm2-ros' ]
[PM2] Writing init configuration in /etc/systemd/system/pm2-ros.service
[PM2] Making script booting at startup...
>>> Executing systemctl enable pm2-ros
Created symlink from /etc/systemd/system/multi-user.target.wants/pm2-ros.service to /etc/systemd/system/pm2-ros.service.
[DONE]
>>> Executing systemctl start pm2-ros
[DONE]
>>> Executing systemctl daemon-reload
[DONE]
>>> Executing systemctl status pm2-ros
● pm2-ros.service - PM2 process manager
   Loaded: loaded (/etc/systemd/system/pm2-ros.service; enabled; vendor preset: disabled)
   Active: active (running) since 火 2018-04-24 15:07:53 JST; 71ms ago
     Docs: https://pm2.keymetrics.io/
 Main PID: 16359 (PM2 v2.10.2: Go)
   CGroup: /system.slice/pm2-ros.service
           ‣ 16359 PM2 v2.10.2: God Daemon (/home/ros/.pm2)

 4月 24 15:07:53 goro-tsukiyama systemd[1]: Starting PM2 process manager...
 4月 24 15:07:53 goro-tsukiyama.com pm2[17031]: [PM2] Resurrecting
 4月 24 15:07:53 goro-tsukiyama.com pm2[17031]: [PM2] Restoring processes located in /home/ros/.pm2/dump.pm2
 4月 24 15:07:53 goro-tsukiyama.com pm2[17031]: [PM2][ERROR] Failed to read dump file in /home/ros/.pm2/dump.pm2
 4月 24 15:07:53 goro-tsukiyama.com pm2[17031]: [PM2] Restoring processes located in /home/ros/.pm2/dump.pm2
 4月 24 15:07:53 goro-tsukiyama.com pm2[17031]: [PM2][ERROR] Failed to read dump file in /home/ros/.pm2/dump.pm2.bak
 4月 24 15:07:53 goro-tsukiyama.com pm2[17031]: [PM2][ERROR] No processes saved; DUMP file doesn't exist
 4月 24 15:07:53 goro-tsukiyama.com systemd[1]: Started PM2 process manager.
[DONE]
+---------------------------------------+
[PM2] Freeze a process list on reboot via:
$ pm2 save

[PM2] Remove init script via:
$ pm2 unstartup systemd
```
* サービスの有効化

```shell-session
$ sudo systemctl enable pm2-ros.service
```