マストドン構築2日目 on AWS

# 経緯

前回書いた [マストドン構築1日目 on AWS](https://qiita.com/suwa3/items/d5d7da30825339704da3) の続きです。

半年ほど前に AWS ＆ Docker ド素人の状態から
なんとかインスタンスをたてて運用していました。

EC2の上にDockerで本番運用していましたが、だんだん辛くなってきたのでDockerから降ろすことにしました。
その作業ログです。

# 環境 / ツール
macOS Mojavi 10.14.6
AWS

# 参考にしたもの
マストドンGitHub
https://github.com/tootsuite/mastodon
公式ドキュメント
https://docs.joinmastodon.org/admin/install/

# サーバー内での作業

まずサーバーにsshログインします。

```
$ ssh ubuntu@3.112.***.*** -i ~/.ssh/hoge.pem
```

作業に入る前に、とりあえずrootユーザーになります。

```
sudo su -
```

そして、mastodonユーザーに切り替えます。

```
# su - mastodon
```

## マストドンのセットアップ

マストドンのソースをgit cloneして来ます

```
$ git clone https://github.com/tootsuite/mastodon.git live && cd live
```

最新の安定したリリースをダウンロードします。

```
$ git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)
```

ちなみにバージョンを指定する場合は、以下のやり方で指定します。
例：2.9.3を指定する場合。

```
$ git checkout v2.9.3
```

RubyとJavaScriptの依存ファイルをインストールします。

```
$ bundle install -j$(getconf _NPROCESSORS_ONLN) --deployment --without development test
rbenv: version `2.6.1' is not installed (set by /home/mastodon/live/.ruby-version)
```

なんと、マストドン2.9.3はRubyの2.6.1でないと動かないっぽいです。
(以下、最新版をインストールしている方には不要の工程です)
2.6.1をインストールしなおします。

```
$ RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install 2.6.1
$ rbenv global 2.6.1
```

## 設定ファイルの編集

対話型セットアップウィザードを実行します。

```
RAILS_ENV=production bundle exec rake mastodon:setup
```

**対話型セットアップウィザードとは**
一問一答式でmastodonリポジトリの`.env.production`にある設定ファイルの中身をセットアップすることが出来ます。
もし間違えてしまっても、メールサーバーの設定などは後から`.env.production`で編集する事が可能です。

※新規でインスタンスを立てる場合は先にメールサーバーなどの設定が必要です。
ちなみに、わたしはAWSの勉強のために SES（Simple Email Service）を利用しましたが
よほどAWSを使いたいか大規模運営をする予定でなければ、送信制限解除の申請などやることが多くなるためお勧めしません。
無料メールサーバーでは[mailgun](https://www.mailgun.com/)などが良いかもしれません。

以下、聞かれる内容と回答例です。

```
Your instance is identified by its domain name. Changing it afterward will break things.
Domein name : uneune.shiosyakeyakini.info(ドメイン名を入力します)

Single user mode disables registrations and redirects the landing page to your public profile.
Do you want to enabled single user mode? no (お一人様で使う気はないのでno)

Are you using Docker to run Mastodon? no (今回はDockerを使わずに運用するのでno)

PostgreSQL host: /var/run/postgresql (デフォルト)
PostgreSQL port: 5432 (デフォルト)
Name of PostgreSQL database: mastodon_production (デフォルト)
Name of PostgreSQL user: mastodon (さきほど設定したもの。デフォルト)
Password of PostgreSQL user: (パスワード設定している場合は入力)

Database configuration works! 🎆

Redis host: localhost (デフォルト)
Redis port: 6379 (デフォルト)
Redis Password: (パスワード設定していないので空欄)

Redis configuration works! 🎆

Do you want to store upload file on the cloud? No (よくわからないのでno)

Do you want to send e-mails from localhost? No (AWS SESのメールを使いたかったのでNo)
SMTP server: email-smtp.us-west-2.amazonaws.com (SESのメールサーバー)
SMTP port: 587 (SESのメールサーバーのSMTPポート)
SMTP username:  (メールアカウント)`SMTP_LOGIN=`の内容
SMTP password: （ひみつ）
SMTP authentication: plain (デフォルト)
SMTP OpenSSL verify mode: none (デフォルト)
E-mail address to send e-mails from: don.suwa3.me@gmail.com
Send a test e-mail with this configuration right now? Yes (試しに送る=>パスワードを間違えていて送れなかった。)
Send test e-mail to: （よく使うメールアドレス）

E-mail could not be sent with this configuration, try again? : no (あとで再設定します)
Save configuration?: true

Prepare the database now? : true
The final step is compiling CSS/JS assets.
This may take a while and consume a lot of RAM.
Compile the assets now?: Yes (めちゃくちゃ時間かかります)

Do you want to create an admin user straight away? : true (管理者用アカウントを作ります)
Username: suwa3
E-mail: （ひみつ）
You can login with the password: (長いパスワード)=>控えます
```

## おまけ

Compile the assets now?
で、時間がかかりすぎて途中でコケました。
最初から一問一答する気になれないときは
`assets:precompile`と、指定して再開することもできます😃

```
$ RAILS_ENV=production bundle exec rails assets:precompile
```

# 次回予告

3日目はNginxのセットアップです。
作業が進み次第、Qiitaに作業ログを残したいと思います。

[マストドン構築３日目 on AWS](https://qiita.com/suwa3/items/6457f08d27fb32ae81cc)