さくらのVPSでMastodonのインスタンスを立てる（Dockerなし）

このタイミングで立ててみようと思う人が多いかと思うので、悪戦苦闘した内容を備忘録として残しておきます。

さくらのスタートアップスクリプトをつかえばおそらく一瞬で出来上がると思われますが、サブドメインが使いたかったので手動で入れました。
なお私はドメインを取るのも初めてだしサーバを公開するのも初めてだしでやばそうな設定もあるかもなので、ご指摘大歓迎です。

大枠は以下を参考にさせてもらっています。
https://qiita.com/hekki/items/c3f42c31632105389c79
https://qiita.com/motiakoron/items/1e5b0679f7283bfee70b

## 環境
ちなみにこの記事では以下の環境のMastodon鯖になります。
Dockerのほうが主流なんですかね？
イマイチDockerよくわかっていないのと永続化失敗しそうなのとで非Dockerを選択しました。

- さくらのVPS 2コア 1GB HDD 100GB
- Ubuntu 16.04
- 非Docker
- メール送信はSparkPost

## 事前準備
### ドメイン取得
ドメイン取得はよく耳にする [お名前.com](https://www.onamae.com) で取りました。

### VPS契約
スケールアウトとか全然考えてないので [さくらのVPS](https://vps.sakura.ad.jp) にしてみました。
月々固定費っていうのが安心感。
ひとまず2コア 1GB HDD100GBで契約。
1人用を想定しているので一旦は低めのスペックにしてみました。
負荷に耐えられそうになければスケールアップしてみます。

### DNS設定
VPSの契約が完了するとサーバのIPアドレスが送られてくるので、早速DNS設定します。
浸透？伝播？に時間がかかるのでとっととやっておきます。
以下参考にしました。
https://qiita.com/megane42/items/df84f87c0bdcdd015eb6
Mastodon用にサブドメイン切りたい人はここで切ります。
~~自分はここでAレコードを最初に設定して、諸々終わったあとにAAAAレコードを設定してみました。~~
~~AAAAレコードを設定すると無事IPv6対応できます。~~
2018/08/20 追記 他鯖の鯖缶さんより連絡いただきましたが、さくらのVPSはデフォルトでIPv6がオフでした。。。
なのでAレコードのみ登録がよいです。
https://help.sakura.ad.jp/hc/ja/articles/115000066021-IPv6有効化手順-Ubuntu-16-04-

### OSインストール
住所がきまったのでお家の基礎工事をしていきます。
今回は*Ubuntu16.04 amd64*をいれます。

さくらのVPSコントロールパネルのここから
<img width="500" alt="スクリーンショット 2018-08-18 14.43.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/120491/f6135841-224c-0cd8-c5fb-fef7550981d0.png">
*Ubuntu16.04 amd64*を選んで Ubuntuユーザのパスワードをいれる。
<img width="400" alt="スクリーンショット 2018-08-18 14.46.18.png" src="https://qiita-image-store.s3.amazonaws.com/0/120491/414b437f-afc9-de42-b5e3-0ebaa17d718e.png">
スタートアップスクリプトにこれを選んでおくといいかも？
<img width="400" alt="スクリーンショット 2018-08-18 14.49.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/120491/6e79212e-fd23-928e-0bad-7e021486aa73.png">

#### Ubuntu設定
OSインストールが終わったら各種設定を実施。
サーバを立てるのは初めてなので何をやればいいのかよくわからなかったので以下を参考にした。
他やっといたほうがいいのってなんかあるのかな…。
https://vps-news.sakura.ad.jp/tutorials/centos7-initial-settings/
https://qiita.com/higashioji/items/0c2f1484914ac44af705
https://qiita.com/tpywao/items/76899267b9935038d9cd
https://qiita.com/hekki/items/c3f42c31632105389c79#os-の基本的な設定

##### アプリケーションの更新とか
スタートアップスクリプトでアップデートさせておくとここが早い。
でもとりあえずvimは入れとく。

```bash
sudo apt-get install vim
```

sudoめんどうなので以下実施
https://qiita.com/tpywao/items/76899267b9935038d9cd#ついでの設定

##### sshをなんとかする
この辺を参考に
https://qiita.com/mukoya/items/f20def019e25dc162ca8
https://qiita.com/tag1216/items/5d06bad7468f731f590e
パスフレーズがアレなのはこれで解決
https://qiita.com/shao1555/items/9e7a368f495228332a03

- sshを公開鍵認証のみに
- sshのポート変更（iptablesでポート開けないと入れないので注意）
- config書いて簡単にsshできるように

##### iptables
iptablesで任意のsshポート,80,443以外を閉める

## Mastodonをインストール
ここまできてようやく基礎工事がおわったので、お家を建てていきます。
あとは公式ガイド通りにやれば問題ないです。
ただMasterのガイドはすでにUbuntu18.04用になっているので、 [こちら](https://github.com/tootsuite/documentation/blob/f92195ca83333ddea09be2cca2077f43034152a0/Running-Mastodon/Production-guide.md) を参照。
certbotとlibgdbm5がないって言われちゃいます。
16.04だと`certbot`は`letsencrypt`で、`libgdbm5`は`libgdbm3`を使います。

一部ポイントに挙げるとすれば
[ここ](https://github.com/tootsuite/documentation/blob/f92195ca83333ddea09be2cca2077f43034152a0/Running-Mastodon/Production-guide.md#mastodon-application-configuration) の手順実施時に`.env.production`に記載する内容をたくさん訊かれます。
急にDBとRedisがでてきて焦りますが、基本Enter連打でパスワードだけいれます。
メールは後で設定したほうがいいので、一旦Enter連打で設定を飛ばします。

## メール設定
ここを参考にSparkPostを使いました。
https://qiita.com/motiakoron/items/1e5b0679f7283bfee70b#メール設定

ただ、「.tech」ドメインを使っている人はmailgunとかのほうがいいかもです。
登録後急にブロックされたので問い合わせてみたら「.techドメインで悪用がひどいからブロックしてるわ」といわれました。
サイトの運営方法とかメールアドレスどう集めてるのとかいろいろ訊かれて、拙い英語で気合で答えたりしてたら結局開通まで半日ほどかかりました…。

登録できたら
[ここ](https://github.com/tootsuite/documentation/blob/f92195ca83333ddea09be2cca2077f43034152a0/Running-Mastodon/Production-guide.md#email-service)を見つつ、`/home/mastodon/live/.env.production`を書き換えて、mastodonサービスを3つ再起動しちゃいましょう。
メールのテストですが管理ガイドみてもRails consoleとは…っと見つけにくいので書いておきます。
アドレスはご自分に書き換えてください。

```bash
#rails consoleは/home/mastodon/liveで実施
cd /home/mastodon/live/
RAILS_ENV=production bundle exec rails console
m = UserMailer.new.mail to:'email@address.com', subject: 'test', body: 'awoo'
m.deliver
```

## 最後に
こんな感じでなんとかインスタンスを立てられました。
ドメイン取ってから公開までで合計1人日くらいです。
一番詰まったところはUbuntuの最初の設定周りですね…sshのポート変更とか…公開鍵認証とか…。
あとはメール…。
Mastodonをインストールするところはめちゃくちゃ簡単で公式ガイド通りやって1時間くらいで完了しました。

勢いで立てたのはいいけど、どうやってメンテナンスしていけばいいのか調べないとですね。。。。