さくらVPS(Cent OS6.7)上にLoopBackアプリをデプロイする

フレームワークの意図をつかむまでにちょっ混乱した
前回作成したbookアプリをもとにアプリ公開まで行う

なお、Loopbackについての概要はこちら
[Parseがサービス終了する今、選ぶべきはオープンソースBaaS！探し求めていたのはLoopBackだった…！](http://qiita.com/Mr_Y/items/efc6e946efc057d08f9e)

# ローカルとサーバで使用するツールの違い
LoopBackはStrongLoop Process Manager（PM）というツールを使ってアプリの公開を行う
こちらには開発用のコマンドはない
一方、前回、ローカル（Mac）で構築した環境には開発用ツールも同梱されている
こちらはサーバ側にインストールしなくてよい

前回の記事
[LoopBackをサクッと触ってみた（環境構築からAPIまで）＋おまけでUnity](http://qiita.com/Mr_Y/items/fca1f711c78644f9436a)


# StrongLoop Process Manager(PM)とは？
サーバ上にLoopBack作業用ユーザを作り、サーバに必要な機能をいろいろとやってくれるツール
・slc deploy、slc ctlの受け口となる
・サービスが落ちないようにしてくれる
・複数アプリを管理してくれる
参考：[StrongLoop Process Manager](http://strong-pm.io/)

# アプリを公開するまでの簡単なフロー
1.ローカルに開発環境を構築（[前回](http://qiita.com/Mr_Y/items/fca1f711c78644f9436a)やった）
2.サーバにPMをインストール
3.ローカルでアプリを作る
4.ローカルでサーバに配置するアプリの設定を行う
5.ローカルでビルド
6.ローカルでサーバにデプロイ

見てもらってわかるようにサーバ側は環境構築のみで完結した
よく出来ている

この切り分けさえ分かれば迷わない
それではサーバの環境構築をする

# これから環境構築する色々
ここにまとめておくので適宜読み替えてほしい
ホスト名：111.222.333.444
アプリが使用するポート：3030
Strong PMユーザ名：myuser
Strong PMパスワード:password
Strong PMの（デプロイ等で使用する）ポート：7070
アプリ名：sampleapp
アクセスURL：/api/books
※使用するポートはiptablesで許可設定をする

#さくらVPSの設定
[これらの設定](https://help.sakura.ad.jp/app/answers/detail/a_id/2429/~/%E3%81%95%E3%81%8F%E3%82%89%E3%81%AEvps%E3%80%80%E3%82%B5%E3%83%BC%E3%83%90%E3%81%AE%E5%88%9D%E6%9C%9F%E8%A8%AD%E5%AE%9A%E3%82%AC%E3%82%A4%E3%83%89)を問題なく終えていると想定

# npmのインストール
[公式サイト](https://nodejs.org/en/download/package-manager/#enterprise-linux-and-fedora)に従ってやった


```lang:Node.jsの4系の場合
curl --silent --location https://rpm.nodesource.com/setup_4.x | bash -
yum -y install nodejs
```

終わったら下記で確認

```
node -v
```

# StrongLoop Process Manager（PM）の環境構築
[参考：公式サイトの説明](https://docs.strongloop.com/display/SLC/Setting+up+a+production+host)
**※最新版である5.2系では正しく動作しなかったので5.1.0を指定**

```
sudo npm install -g strong-pm@5.1.0
```

PMを扱うユーザをサーバ上に作成する
PMのユーザ名、パスワード、ポートをパラメータとして指定する

```
sudo sl-pm-install --upstart=0.6 --http-auth myuser:password -p 7070
sudo /sbin/initctl start strong-pm
sudo /sbin/initctl status strong-pm
```
※--upstart=0.6はCentOS6等で必要なオプション

これでサーバが起動している間は7070ポートでLISTEN状態となる

# 使用するDBの構築（MongoDB）
前回ローカルでMongoDBを構築した
サーバ側でも必要になるのでMongoDBをインストールする
[Mongo公式から](https://docs.mongodb.org/manual/tutorial/install-mongodb-on-red-hat/)

###設定ファイルを作成

```
sudo touch /etc/yum.repos.d/mongodb-org-3.2.repo
sudo vi /etc/yum.repos.d/mongodb-org-3.2.repo
```

ファイルに以下を書き込む

```
[mongodb-org-3.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.2.asc
```

### 設定ファイルを使用してインストールとサービス起動

```
sudo yum install -y mongodb-org
sudo service mongod start
```

# LoopBackアプリの設定
slc ctlコマンドを使うことで、PMを通じてサーバ側のアプリ設定を行える

### アプリ名作成

```
slc ctl -C http://myuser:password@111.222.333.444:7070 create sampleapp
```

###本番環境用として設定
 
この設定により、config.production.json、datasources.production.json等の本番環境用ファイルを使用できる

```
slc ctl -C http://myuser:password@111.222.333.444:7070 env-set sampleapp NODE_ENV=production
```

###アプリが使用するポートを設定

アプリが使用するポートを設定

```
slc ctl -C http://myuser:password@111.222.333.444:7070 env-set sampleapp PORT=3030
```

# アプリ設定の確認

```
slc ctl -C http://myuser:password@111.222.333.444:7070
```

# アプリのビルド

git管理をしていれば自動でdeployブランチが作成される

```
slc build
```

# アプリのデプロイ

```
slc deploy -s sampleapp http://myuser:password@111.222.333.444:7070 deploy
```

アップロード先のパスがログに出るが、特に意識する必要はない
何かあればローカルからslc ctlコマンドで操作(再起動や停止など)をしてやればいい

# アプリにアクセス
疎通確認する（200が返ってくるか？）
```
http://111.222.333.444:3030/api/books
```


# productionの設定
productionに設定するとAPI Explorerはオフになる

# 開発用と本番用に分けたい場合
アプリの設定で開発用も作成する
独自設定にはなるがNODE_ENV=developmentを設定して、config.development.jsonを定義すれば読み込んでくれる（…はず、まだやってない）

# 複数のアプリの管理
アプリの設定で別のアプリを作成する
本番用と開発用を切り分けるのと大差はない

#ログは？
var/log/messagesに残る

#まとめ
サクッと書いたけど要所要所でハマる
また後日読み返して追記できるところは追記します