AWSでマストドンインスタンスを立てる

# マストドンインスタンスを立てた。
筋トレやダイエットに関するコミュニティになれば良いと思って筋肉インスタンスを立てました。
~~[Muscledon](https://muscledon.net/)~~
AWSの無料期間が終わるので閉鎖しました。

# AWSでマストドンを立てる

という記事を書こうかと思ったが既に完璧な手順があった。同じ内容の記事はﾌﾖｳﾗ！

[マストドンAWS構築チュートリアル完全版|初心者から大規模運用まで](http://webfood.info/mastodon-aws-tutorial/)

とはいえこの記事通りに進めているうちにつまったところがあるので解決法を提示する。

## docker-compose buildに失敗する。
apt-getでdockerを入れるとバージョンが古く、buildに失敗してしまう。
新しいバージョンのdocker及びdocker-composeの入れ方は以下の兄貴の記事を参考にしてほしい。
[DockerとDocker Composeをインストール](http://qiita.com/taroshin/items/22bb360b18a0a24871dd)

## docker-compose buildに失敗する。
上記の対応を行っても以下のようなエラーで失敗してしまった。

```
ERROR: https://nl.alpinelinux.org/alpine/edge/main: operation timed out
WARNING: Ignoring APKINDEX.65bdaf85.tar.gz: No such file or directory
OK: 21 MiB in 29 packages
WARNING: Ignoring APKINDEX.65bdaf85.tar.gz: No such file or directory
WARNING: The repository tag for world dependency 'nodejs@edge' does not exist
WARNING: The repository tag for world dependency 'nodejs-npm@edge' does not exist
WARNING: The repository tag for world dependency 'imagemagick@edge' does not exist
ERROR: Not committing changes due to missing repository tags. Use --force to override.
ERROR: Service 'streaming' failed to build: The command '/bin/sh -c echo "@edge https://nl.alpinelinux.org/alpine/edge/main" >> /etc/apk/repositories  && BUILD_DEPS="     postgresql-dev     libxml2-dev     libxslt-dev     python     build-base"  && apk -U upgrade && apk add     $BUILD_DEPS     nodejs@edge     nodejs-npm@edge     git     libpq     libxml2     libxslt     ffmpeg     file     imagemagick@edge     ca-certificates  && npm install -g npm@3 && npm install -g yarn  && update-ca-certificates  && rm -rf /tmp/* /var/cache/apk/*' returned a non-zero code: 255
```

原因としては*.alpinelinux.orgのサーバがダウンしているためだ。
~~この記事を書いている現在2017/05/05 20:00もアクセス出来ない状態になっている。~~
2017/05/05 22:40現在復活している。
https://alpinelinux.org/

リポジトリの向き先をalpineのCDNに変更してやるとよい。
cloneしてきたmastodonディレクトリ直下にあるDockerfileを編集する。

```:Dockerfile
- RUN echo "@edge https://nl.alpinelinux.org/alpine/edge/main" >> /etc/apk/repositories \
+ RUN echo "@edge http://alpine.gliderlabs.com/alpine/edge/main" >> /etc/apk/repositories \
```

## ユーザー数が0人と表示される。
何故か「このインスタンスについて」のユーザー数が0人と表示されていた。
原因はMastodonアプリとDBのタイムゾーンが異なっているためだった。
DBは日本時間だったがEC2インスタンスはUTCだったので日本時間に合わせる。

```:mastodon/config/application.rb
-    # config.time_zone = 'Central Time (US & Canada)'
+    config.time_zone = 'Tokyo'
```

## HTTP/2に対応させる。
nginxでもいじってHTTP/2に対応させてやるか！
と思っていたら既にHTTP/2になっていた。どうやらAWSのロードバランサでapplicationを選択するとHTTP/2になるようだ。

## サイトの管理画面を出す。
[ここ](https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Administration-guide.md)に書いてある通りなのだが、
まずユーザーを作って(ここではaliceというユーザとしよう)メール認証を済ませる。
そして以下のコマンドを打ち込むのだが
```
RAILS_ENV=production bundle exec rails mastodon:make_admin USERNAME=alice
```
では上手くいかなかった。
かわりに

```
sudo docker-compose run --rm web rails mastodon:make_admin USERNAME=alice
```
ならうまくいった。:relaxed:

## mastodonのdaily taskを追加する。
[こちら](http://qiita.com/yuu26/items/bca726f58174641d6b49)の兄貴が書いている通り```mastodon:daily```を実行してやらないと
国交を断絶されてしまうらしい。cronにタスクを追加してｶｲｺｸｼﾃｸﾀﾞｻｰｲ

# Postgres Redis ストレージを切り離す。
## 投稿画像、動画をS3に保存するように変更する。
[こちら](https://hyper-text.org/archives/2017/04/mastodon-instance-with-amazon-s3.shtml)の兄貴のやり方に従って作業すれば良い。
ただしS3を使っているのであれば以下の設定は不要(検証済み)
S3の代わりに別のサーバを使う場合は必要らしい。

```:.env.production
# S3_PROTOCOL=
# S3_ENDPOINT=
```



# mastodonは変化し続ける可能性の獣
mastodonの[Github](https://github.com/tootsuite/mastodon)を見ると最終コミットが数時間前だったりする。
頻繁に変化し続けているのでちょいちょいバグる。二回ほど構築してみたが、一回目は管理画面からサイトの編集が出来なかったが、二回目は出来るようになった。
今のところCloneするタイミングによってかなり挙動が変わるようだ。

とかUCな気持ちに浸っていたら公式にはこう書いていた。
```
Please note: It is highly recommended to run a tagged release of Mastodon and not run off the current master branch.
```
訳：間違ってもMasterのブランチからクローンなんかすんじゃねーぞ。