島根県石見地方特化マストドン：いわみどんを無料で作った話


#作るまでの経緯

元記事:[島根県石見地方特化マストドン：いわみどんを無料で作った話](http://gamelinks007.hatenablog.com/entry/2017/10/22/143620)

先日、Heokuを使ってのMastodonインスタンス作成できるという記事を書いた(はてなブログで)。

[スクリプト少女のべるちゃんインスタンスを Heroku + Mastodon で作ってみた](http://gamelinks007.hatenablog.com/entry/2017/10/01/202755)

このときは、AWSアカウントなどを使っての画像やアイコン、ヘッダーの保存ができなかった。

保存できなかった原因としては、Heoku CLI コマンドやらMastodon内部の挙動で把握できていない部分があったため
（それと、個人的にAWSアカウントを作りたくなかった＆渋々作ろうとしたら電話認証でコケたのも原因の一部）
 
で、その後も色々調べていると下記の記事を発見

[マストドンのバックエンドに Google Cloud Storage を使う方法 #mastodon - Qiita](https://qiita.com/okumin/items/1b91286412f3912311dc) 

どうやら、Google Cloud Storage を使ってMastodonにアップロードした画像データなどを保存できるそうな。


「よし、面白そうだ！実験的にインスタンス作ってみよう」
と思い、Mastodonインスタンスを作ってみた。
 

というわけで今回立ち上げたインスタンス：いわみどん

[いわみどん](https://iwami-mastodon.herokuapp.com/about) 

いわみどんは島根県石見地方に特化したインスタンスとして運営しています。
 
#以下、ざっくりとしたインスタンス：いわみどん立ち上げまでの流れ

１．まずHeokuにデプロイ

２．デプロイ実行中にGoogle Cloud Storage に登録し必要なアクセスキーなどを取得

３．デプロイ後、Heroku CLI を使って環境変数を設定する。


基本的には、１～３までの流れで基本的なMastodonの機能（TooTや画像のアップロード、アイコンやヘッダーの変更など）が使えるようになる。

より、詳細な流れとしては下記にある。


#より細かいインスタンス制作の流れ

```ruby:使用環境
Heroku
Gmail
Google Cloud Storage
```

##１．Herokuにデプロイ

下記より「`Deploy to Heroku`」を押して、`Heroku`へのデプロイを行う

[tootsuite/documentation](https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Heroku-guide.md) 

で、デプロイ欄の「App name」「LOCAL_DOMAIN」「LOCAL_HTTPS」「S3_ENABLED」を下記のように埋めていく

```ruby:使用環境
App name : iwami-mastodon
LOCAL_DOMAIN : iwami-mastodon.herokuapp.com
LOCAL_HTTPS : true
S3_ENABLED : false
```

「`LOCAL_HTTPS`」を true にすることで`HTTPS` が有効になる。
あと、今回は`Google Cloud Storage` を使う予定なので「`S3_ENABLED`」 は一旦 `false` にしておく。

あとは、「`Deploy app`」 を押すことで自動的に`Mastodon`インスタンスが立ち上がる。

とりあえず、`Heroku` ですることはここで一旦終了。

##２．Google Cloud Storage に登録

こちらより `Google Cloud Storage` にアクセス

[Cloud Storage - オンライン データ ストレージ  |  Google Cloud Platform](https://cloud.google.com/storage/?hl=ja)

Googleアカウントを持っている場合であれば、アカウント名とパスワードを入力するだけ。ない場合は、アカウントを作る必要がある。

ログイン後、コンソール画面内にある「`ストレージ`」から「`Storage`」という項目をクリック。

「バケットを作成」というボタンがあるので、それをクリックして「`iwami-mastodon`」というバケットを作成する。このとき、「デフォルトのストレージクラス」は「`Multi-Regional`」にすること

バケットを作成した後は、画面左側にある設定をクリック。画面が切り替わった後、画面内に「相互運用性」という項目がある。

その中の「デフォルトプロジェクトにする」と「新しいキーを作成」をクリックする。

このとき、生成されたアクセスキーとシークレットアクセスキーは後で使うのでわかるようにしておくこと

これで、`Google Cloud Storage` での設定は終了

##３．Gmailによるメール認証の前準備

いわみどんは`Gmail`でのメール認証を使っており、その前準備としてGoogleアカウントで２段認証を行うように設定を変えておく。

Googleアカウントのアカウント情報内にある「ログインとセキュリティ」を選択。

その中にある２段認証プロセスを選択し、認証を行う。

その後、「ログインとセキュリティ」内の「アプリ パスワード」という項目を選択してパスワードを生成する。

このとき生成したパスワードは後で使うのでわかるようにしておくこと

これでメール認証の前準備は終了。

##４．Heroku CLI を使って各種環境変数を設定。

Heroku CLI 自体のインストールに関してはこちらの記事を参考にしてください。

[コマンドでHerokuを操作する Heroku CLI のインストール](http://hatenablog.com/)
 
インストール後、コマンドプロンプト(多分、PowerShellでも可)を起動して以下のコマンドを入力


heroku config -a iwami-mastodon

 

すると、インスタンスの環境変数一覧が表示される。

そこへ以下のコマンドを入力していく

 
```
heroku config:set S3_ENABLED=true -a iwami-mastodon
heroku config:set S3_BUCKET=iwami-mastodon
heroku config:set S3_CLOUDFRONT_HOST=storage.googleapis.com/iwami-mastodon -a 
iwami-mastodon
heroku config:set S3_ENDPOINT=https://storage.googleapis.com -a iwami-mastodon
heroku config:set S3_HOTNAME=storage.googleapis.com -a iwami-mastodon
heroku config:set S3_PROTOCOL=https -a iwami-mastodon
heroku config:set S3_REGION=EU -a iwami-mastodon (これはなくてもよいかも……)
heroku config:set AWS_ACCESS_KEY_ID=[さっき作ったGoogle Cloud Storage のアクセスキー] -a iwami-mastodon
heroku config:set AWS_SECRET_ACCESS_KEY=[さっき作ったGoogle Cloud Storage のシークレットアクセスキー] -a iwami-mastodon
heroku config:set SMTP_FROM_ADDRESS=[使用するGmailアドレス] -a iwami-mastodon
heroku config:set SMTP_LOGIN=[使用するGmailアドレス] -a iwami-mastodon
heroku config:set SMTP_PASSWORD=[先ほど作ったアプリパスワード] -a iwami-mastodon
heroku config:set SMTP_PORT=587 -a iwami-mastodon
heroku config:set SMTP_SERVER=smtp.gmail.com
```

以上、すべてのコマンドを入力すればMastodonの基本的な機能(メール認証や画像データの保存など)は使用可能になる。

##・以下詰まったところ

Gmailでのメール認証
Google Cloud Storage に保存された画像などをMastodonインスタンスから参照するところ
Gmailでのメール認証は２段認証とアプリパスワードを使うことで比較的簡単に突破できたねー。

一番詰まったのがMastodonインスタンスから Google Cloud Storage に保存された画像データを参照するところだね。

[Images cannot be viewed using Google Storage · Issue #5165 · tootsuite/mastodon](https://github.com/tootsuite/mastodon/issues/5165)

この GitHubのIssue を参考にして下記のコマンドで解決できた。

`
heroku config:set S3_CLOUDFRONT_HOST=storage.googleapis.com/iwami-mastodon -a iwami-mastodon
`
 

#その後
とりあえず、安定して使えるようにはなったから良かった良かった。

あとは、のんびりインスタンス管理しながら色々試してみようかと思う。


#以下、参考記事など
[Herokuをつかって無料でマストドンインスタンスを立ててみた(独自ドメインなしで)](http://pyu666.hatenablog.jp/entry/2017/04/27/122803)
[zunda/mastodon](https://github.com/zunda/mastodon/wiki/CreateInstanceOnHeroku)
[今流行りの #mastodon on Google Container Engine](http://blog.okumin.com/entry/2017/04/19/011732)
[マストドンのバックエンドに Google Cloud Storage を使う方法 #mastodon - Qiita](https://qiita.com/okumin/items/1b91286412f3912311dc)
[Migrating from Amazon S3 to Google Cloud Storage  |  Cloud Storage Documentation  |  Google Cloud Platform](https://cloud.google.com/storage/docs/migrating#migration-simple)
[[Heroku] 無料で Mastodon を動かす(~v1.3.3未満) [マスト丼] - Qiita](https://qiita.com/sho7650/items/290fd3daff28e962e5e3)
[Images cannot be viewed using Google Storage · Issue #5165 · tootsuite/mastodon](https://github.com/tootsuite/mastodon/issues/5165)
[SSLで運用しているmastodonとS3の連携のハマりどころ - Qiita](https://qiita.com/genya0407/items/875bd08579bd76c8c526)
[コマンドでHerokuを操作する Heroku CLI のインストール](http://blog.w-hippo.com/entry/2017/01/29/143550)