全くの素人がConoHaとS3でMastodonインスタンスを立ててみたお話


これは[Qiita Mastodon Advent Calendar](https://qiita.com/advent-calendar/2017/mastodon)23日目の記事になります。

お一人様インスタンス[mimikun丼](https://mstdn.mimikun.jp)の管理人をしているmimikunと申します。

普段はPythonやJavaでプログラムを書いています。

今回僕がMastodonを立てるにあたって躓いたところなどを書いていきます。

作業内容をメモしていなかったので忘れている部分もありますがご了承ください。

## 環境など
+ macOS 10.13
+ ConoHa VPS 1GB (Ubuntu16.04)
+ Amazon S3
+ Mailgun
+ スタードメイン

## 手順
ちなみに、今回はConoHa公式のMastodonイメージは使っていません。

### 1. ドメインの設定
インスタンスを立てるにあたってドメインが必要なのですが、持っていなかったので取得しました。

whois情報が出ないところが良かったのでスタードメインで取得しました。

### 2. DNSレコードの設定
スタードメインの場合、自分には分かりにくかったのでちょっと詰まりました。

(お名前やムームーはもう少し分かりやすいんでしょうか？)

ドメインのDNSレコード設定

![ドメインレコード設定](https://qiita-image-store.s3.amazonaws.com/0/96264/49461d32-47b0-bd76-b471-745ecb87f5be.png)


上から、例えば自分だったら

| 項目名     | 入力値     |
| :------------- | :------------- |
|    ホスト名    | mstdn.(mimikun.jp)       |
| タイプ | タイプA |
|   コンテンツ   | ConoHaのVPSのIPアドレス       |
| 優先度 | (MXレコードではないので、空白) |

といった感じに設定しました。

### 3. VPSへのSSHログイン設定
ここで1〜2日かかってしまいました。

ファイルのパーミッション周りの設定が分かってなかったことが原因でした。

最終的にはこんな感じになりました。

1. ホスト(Mac)の`~/.ssh/config`ファイルを以下のようにして簡単に接続できるようにする

```
#ConoHa
Host conoha.hogefuga
  HostName 123.456.789.012
  User hogefuga
  Port 22
  IdentityFile ~/.ssh/id_rsa
```

2. パーミッションを適切に設定する

僕の場合はユーザをrootの他にも作ったのでそのユーザのssh鍵に対しても行いました。

```
$ sudo chmod -R 700 ~/.ssh/
$ sudo chmod 600 ~/.ssh/authorized_keys
```

### 4. VPS(Ubuntu)の更新

いつものようにコマンドを入力します。

```
$ sudo apt-get update
```

言語設定も日本語にしておきましょう。僕は後から行ったので英語が読めず、エラーメッセージをその都度Google翻訳にかけるなど無駄な時間を過ごしてしまいました。

(他、certbotを入れる時、python virtualenv作成がうまく行かなかったりしました。)

```
$ sudo apt-get install language-pack-ja
$ sudo update-locale LANG=ja_JP.UTF-8
```

入力後、Cmd+Dでログアウト、再ログインします。

エラー`sudo: unable to resolve host 123-456-789-012` が起きないようにする

`/etc/hosts` に以下のように追記します。

```
127.0.0.1	localhost     # 元からあった
127.0.1.1	ubuntu        # 元からあった
127.0.0.1 123-456-789-012    # 追記した
```


### 5. オブジェクトストレージ(Amazon S3)の設定

ConoHaのオブジェクトストレージを使うという手もありましたが、公式にある通りAmazon S3を使いました。

AWSの設定方法や登録方法はググればたくさん出てくると思うので省きます。

終わったら、`.env.production`のS3の部分を以下のように編集します。

![S3設定](https://qiita-image-store.s3.amazonaws.com/0/96264/c338c09e-89e2-0348-fd30-55f2b343b9e9.png)

### 6. Mailgunの設定

ConoHaのメールサーバを使うという手もありましたが、公式の`.env.production`にある通り、Mailgunを使いました。

Mailgunの設定をします。

1. 登録
2. メール認証
2. ドメイン設定
3. DNSレコード設定
4. 1~2日待機
5. ドメイン認証

という順番で行いました。

DNSレコード設定は以下のような感じにしました。

![mailgunDNSレコード設定](https://qiita-image-store.s3.amazonaws.com/0/96264/b4a714f7-e810-75c8-0707-5c10cb2a442c.png)

そして、`.env.production`のmail部分を以下のように編集します。

![mail部分](https://qiita-image-store.s3.amazonaws.com/0/96264/f58fb728-0259-2247-da6c-adbbde39c2b1.png)

### 7. SSL証明書の取得
certbotで取得しました。

証明書が切れそうになった時、メールで通知が来るのでよく使うメールアドレスを設定しておくといいです。

生成にはこのコマンドを使います。
```
./certbot-auto certonly --standalone -d [Mastodonのドメイン] -m [よく使うメアド] --agree-tos -n
```

### 8. nginxの設定

以下の通り作業します。

```
cd /etc/nginx/sites-available
nano /etc/nginx/sites-available/example.com.conf
```

そして、[公式Productionガイド nginx](https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Production-guide.md#nginx-configuration)のCopy and paste the following and make edits as necessary:以下にあるテキストをコピペします。

この時、serverディレクティブに以下の7行を追加します。何故かProductionガイドから消されていたようです。

```
ssl_protocols TLSv1.2;
ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;

ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
```

詳しくは[公式Productionガイド nginx](https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Production-guide.md#nginx-configuration)の方を見てください。

### 9. dockerイメージ作成

[Mastodon公式のDockerガイド](https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Docker-Guide.md)を見てやりました。

### 終わりに
今回、Mastodonインスタンスを立ててみて、サーバへの理解度が少し深まった気がします。

今度はPleromaインスタンス作成に挑戦してみようと思います。