IoT Agency PlatformをHeroku上にデプロイする

>※IoT Agency Platfromは2020年12月31日をもってサービス終了予定となります。
※[GitHubリポジトリ](https://github.com/IoT-Makers/sigfox-platform.git)は引き続きご利用いただけます。

Sigfoxが提供していたIoT Agency PlatformがGNU Affero General Public Licenseに基づくオープンソースとなりました。ここでは、IoT Agency PlatformをHeroku上にデプロイする方法を説明します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172313/023e93de-86d8-6276-1a69-41c0c4e319e2.png)

IoT Agency Platformは、SigfoxやMQTT、Webhookに対応したIoTデバイスからデータを取得し、グラフや地図形式でダッシュボード化できるアプリケーションです。使い方に関しては、[こちら](https://qiita.com/ghibi/items/91f6880a4820c49cad5d)を参考にしてください。

#全体の流れ
Sigfox IoT Agency PlatformをHeroku上にデプロイする方法は下記の通りの流れとなります。
1. sigfox platformのGithubからHerokuにアプリケーションをデプロイする
2. MongoDBを立ち上げ、データベースを紐づける

#sigfox platformのGitHubからHerokuにアプリケーションをデプロイする
デプロイ方法は2種類あります。下記ボタンをクリックして、UIウィザードに従いデプロイする方法と
[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172313/20497483-ac4b-4170-8d50-836bcad3ad2b.png)](https://dashboard.heroku.com/new?button-url=https%3A%2F%2Fgithub.com%2Fluisomoreau%2Fsigfox-platform&template=https%3A%2F%2Fgithub.com%2Fluisomoreau%2Fsigfox-platform)
Heroku CLIで下記のようにデプロイする方法です。

```
git clone https://github.com/IoT-Makers/sigfox-platform.git my-project
cd my-project
heroku apps:create my-project
git push heroku master
```
ここでは、前者の方法で説明します。

##新しいアプリケーションを生成する
先程の"Deploy to Heroku"ボタンをクリックしApp nameとregionを選択します。App nameはユニークな名前になるように設定してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172313/d06420d0-7068-0035-ada8-1a78ec5d1881.png)
設定後、**Deploy app**ボタンをクリックすると、デプロイが開始します。数分かかりますが、完成すると下記のような画面になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172313/68158002-794d-8584-aa80-50c98454063c.png)
Manage Appボタンをクリックし、アプリケーションの管理画面に遷移します。

#MongoDBを立ち上げ、データベースを紐づける
ここでは、MongoDBのアドオンをアプリケーションにアタッチします。mLabはMongoDBをDBaaS(Database-as-a-Service)として提供するものです。

>mLabはmongoDB.Altasに統合されたため、mongoDB.Altasでも同じようなことができると思いますが、ここでは、mLabで進めます。

##mLab MongoDBアドオンの追加
Heroku管理画面のResourcesタグ内にある**Quickly add add-ons from Elements**検索フィールドで"MongoDB"をキーに検索すると**mLab MongoDB**というアドオンが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172313/263fdb76-f3f6-b852-4684-6527ca38aef7.png)
mLab MongoDBを選択すると、下図の画面になりますので、有償版でも結構ですが、まずの動作確認としては、無償版（Sandbox - Free)を選択し、**Provision**ボタンをクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172313/6eba4d73-5075-f76e-f435-5862244f1925.png)

##mLab MongoDBとの接続
追加された"mLab MongoDB"をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172313/552810d2-e09d-b04c-0111-d203304983df.png)
mLabの管理画面が表示されます。
画面上に、MongoDB URIで接続する（To connect using a driver via the standard MongoDB URI)と書かれた下にmongodB://からはじまるURIが表示されています。このURIをHeroku側に設定してあげればOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172313/aad3b20e-c392-8cd5-87b7-27e268443b5b.png)
HerokuのSettingタグに遷移し、Config Vars（環境変数設定）をします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172313/a01f1df0-518e-9ae1-0f51-67f93116f068.png)
新たに、**MONGODB_URI**をキーとし、先程のURI（下記）を貼り付けます。ただし、dbuserとdbpassword、dbnameのところは、データベースの接続アカウントに置き換える必要があります。（MONGOLAB_CYAN_URIの値をコピー＆ペーストしても良いかも）
`mongodb://<dbuser>:<dbpassword>@ds253348.mlab.com:53348/<dbname>`

##アプリケーションの再起動
Herokuの"More"のところにある**Restart all dynos"を選択し、アプリケーションを再起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172313/3d47f888-d4bb-100b-4ee9-bf13f3aee1c7.png)
再起動は1，2分内で終わると思いますので、再起動後、"Open app"をクリックし、アプリケーションを表示します。
下図のようなログイン及びサインアップ画面が表示されれば成功です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172313/4d299661-a0dd-229b-d221-25fd22914063.png)

なお、ソースコードは、`[リポジトリ名]\frontend\src`の中にあります。

#補足
ちなみに、下記のフレームワークを使っているようです。

- Backend: Loopback 3+
- Frontend: Angular 6+
- Real-time: Primus
- Database: MongoDB
- Pub-sub & queuing: RabbitMQ

>なお、本投稿に当たっては、[Antoine de Chassey](https://github.com/AntoinedeChassey)、[Louis Moreau](https://github.com/luisomoreau)そして、[Guillaume Noel](https://github.com/guy-noel)に感謝します。

[Sigfox Japan KCCS](https://qiita.com/organizations/sigfox)
[Twitter @ghibi](https://twitter.com/ghibi)