Mastodonインスタンス構築（鯖：AWS EC2、ドメイン：お名前.com、SSL：Let's Encrypt）

# まずは
QiitaはROM専（死語？）だったので初投稿。
こちらの記事に勇気付けられた。

>「僕が書いたことはみんな書いている、ハマっていることは共有しなくてもいい」という考えも浮かぶと思うが...
・情報鮮度の観点で出す価値あり

http://qiita.com/hinom77/items/dfa9e0c734e47271edb7

たしかにググって記事がたくさん出てくると学んでて損はない技術なんだろうと思えてくる。
ビッグウェーブに乗りたいというのもある。
というわけで何番煎じかわからないがマストドンのインスタンス構築記録を書く。
見せ方、引用の仕方など作法があればご容赦。
Qiitaのマークダウンすらままならず...。

# 基本的な軸
基本的には↓↓を参考にさせていただきました。
私の環境で違ったところだけ横道に反れたりしながら追記してます。
基本は参考URLを見ていただき、たまにこっちに戻ってくるという感じがよいかと。
※以降【】でかこっている中項目は下記参考先の中項目タイトルに準じています。

■マストドンAWS構築チュートリアル完全版|初心者から大規模運用まで　5.お手軽な手順
http://webfood.info/mastodon-aws-tutorial/#section-5

## 【EC2インスタンスの作成】
インスタンススペックはt2.microを選択。
無料枠で選択できたので。

## 【Route53でHosted Zoneを作る】
丸々飛ばし。
DNSはお名前.comに任せる。

### AWS EC2のインスタンスに固定グローバルIPを付与
AWSでは固定グローバルIP＝Elastic IPと呼ばれている。
↓↓に書かれている通りに沿って進める。

■AWS EC2インスタンスにElastic IP(固定グローバルIPアドレス)を割り当てる
https://ac-5.net/aws/aws_elasticip_allocation

### AWSのElastic IPを独自ドメインと関連付ける
DNSの設定。関連付ける、という言葉が正しいのかどうか。

■(お名前.com)ネームサーバーのAレコード設定
http://rensrv.com/domain/onamae-com/a_record-setting-onamae-com/

## 【SSHでログインする】
そのまま。

## 【Let’s EncryptでSSL証明書を取得する】
`$ ./certbot-auto`の箇所で途中、エラーで正常終了しなかった。

```
Requesting root privileges to run certbot...
  /home/ubuntu/.local/share/letsencrypt/bin/letsencrypt
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Failed to find executable apache2ctl in PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
Certbot doesn't know how to automatically configure the web server on this system. However, it can still get a certificate for you. Please run "certbot-auto certonly" to do so. You'll need to manually configure your web server to use the resulting certificate.
```

apache2の起動コマンド（？）が見つからないようだ。
そもそもデフォルトでインストールされていないぽい。
↓↓
●対応：apache2インストール→再度実行

```
$ sudo apt-get update
$ sudo apt-get install apache2
$ ./certbot-auto
```
結果としてこれで成功したが、完了までにいろいろ聞かれたので参考までに記載。

●ドメイン名を入力してくれー
No names were found in your configuration files. Please enter in your domain
name(s) (comma and/or space separated)  (Enter 'c' to cancel):

自前のドメイン名を入力して、エンター。


●HTTPSのみの接続にする？
Please choose whether HTTPS access is required or optional.
\-------------------------------------------------------------------------------
1: Easy - Allow both HTTP and HTTPS access to these sites
2: Secure - Make all requests redirect to secure HTTPS access
\-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

2の方が無難かと考え、2を入力してエンター。


●成功の確認
\-------------------------------------------------------------------------------
Congratulations! You have successfully enabled https://(設定したドメイン)

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=(設定したドメイン)
\-------------------------------------------------------------------------------

一応言われている通りにアクセスしたら、A評価（多少時間かかる）。

## 【ミドルウェアの設定】
t2.microなのでスワップ設定は飛ばし。

と思ったら後ほど出てくるdocker-composeでひっかかった。
処理が途中で止まってしまうのだが、どうやらメモリ不足が原因らしい...。

```
$docker-compose run --rm web rails assets:precompile
```

http://uyamazak.hatenablog.com/entry/2017/05/22/151210

たしかにスワップの設定後、再トライしたら処理が完了できた。

あと、念のためnginxの編集前の設定ファイルをコピーして残しておく。

```
 cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.ort
```

## 【マストドンのセットアップ】
ここでだいぶ時間を食った...。
### Docker動いてない？
ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?

●いろいろ対応：
・鯖再起動←たぶん関係ない。
・pip3のupgrade←アップグレードは成功したがたぶん関係ない。
　ただ、一応やったことなので残しておく。

```
$sudo pip3 install --upgrade pip
```

・インストール済かの確認

```
$pip3 list
docker-compose (1.13.0)
```

結局よくわからず↓↓を参考に入れ直す。

■今何かと話題のマストドン(mastodon)鯖を自分用に無料で立てる方法
【必要なものをインストールする】のセクション
http://jtwp470.hatenablog.jp/entry/2017/04/15/174036

その後、再度実行→成功！

```
$ sudo docker-compose build
```

以降、

```
$ sudo docker-compose run --rm web rake secret
```

から続行。
以降、assetsのdocker-composeで躓くも何とかAbout画面表示までこぎ着けた...。
まずは一旦の達成感。

# 【メールの設定】
今回はとりあえず自分のテスト用鯖なのでSESの制限は解除しない。
他はそのまま。

# 【cronの設定】
今回参照させていただいているところはマストドンのインストールディレクトリを指定しているのでcron内のパスを修正。
/home/ubuntu/mastodon→/home/ubuntu/live
他はそのまま。

# ログインと管理画面
最後に、今回はとりあえず個人用インスタンスということにしているのでユーザ認証は手動で実行。
ということで↓↓を参考にさせていただきました。

■今何かと話題のマストドン(mastodon)鯖を自分用に無料で立てる方法
【初期登録と管理画面をだす方法】【管理画面の出し方】
http://jtwp470.hatenablog.jp/entry/2017/04/15/174036

なぜか手動認証のコマンドを打っても自前のgmailアカウントが見つからないと言われたので、適当な捨てアドを作り、登録し、管理画面から認証するという手順を踏みました。

# さいごに
最初は探り探りだったので時間としては朝から晩までかかりました。
2回目はこの手順を残しておいたので2時間強くらいでできました。
1回目構築終わったあと、疲れなのか何なのかAWSのインスタンを消去してしまい、朝起きたときは絶望しましたが逆にこの手順が間違ってなかったことを自分で証明できてよかったよかった（？）
インスタンス構築にあたり最近の技術も勉強できたのでそれもよかった。
Dockerのことがまだはっきりと理解しきれていないので引き続き勉強ですね。

最後になりましたが、参考にさせていただいた先人たちには多大なる感謝を。
またこの記事がこれからの誰かの役に立てれば幸いです。

# 参考サイトまとめ
■マストドンAWS構築チュートリアル完全版|初心者から大規模運用まで
http://webfood.info/mastodon-aws-tutorial/
■AWS EC2インスタンスにElastic IP(固定グローバルIPアドレス)を割り当てる
https://ac-5.net/aws/aws_elasticip_allocation
■(お名前.com)ネームサーバーのAレコード設定
http://rensrv.com/domain/onamae-com/a_record-setting-onamae-com/
■今何かと話題のマストドン(mastodon)鯖を自分用に無料で立てる方法
http://jtwp470.hatenablog.jp/entry/2017/04/15/174036