Mastodonのインスタンスを立ててみた
Mastodonとは
mstdn.jpがブレイクしたことで話題になったようで、耳に入ったのでこれは流行りに乗れるのではと思い、サーバーを立てる側に回ってみた。
docker-compose
を使うだけなので、難しくはないが、あとで振り返るためにメモを残しておく。
↓作成したインスタンス
↓執筆時のスコアは629
環境
手順
ドメインを取得する
お名前.comなどでドメインを取得しておく。 今回は良しなに
- mstdn.pics
- mstdn.video
を取っておいた。
サーバーを用意する
AWSのコンソールで、上記の環境を用意する。 今回は、一旦お試しということで、無料枠を使うためにt2.microを使用した。 HTTPSを使用するので、EC2インスタンス作成の際にはセキュリティグループを変更して、
- HTTP
- HTTPS
を追加する必要がある。(デフォルトではSSH用のポートしか開いていない)
次に、Elastic IPでインスタンスのIPアドレスを固定して、Route53でDNSのレコード設定をしておく。
必要なソフトをインストールする
インスタンス作成の際にダウンロードした鍵を使用してインスタンスにSSHできたらまずは必要なソフトをインストールする。
- git
- docker
- docker-compose >= 1.10.0
- lets encrypt
- nginx
それぞれ
git
$ sudo apt-get install git
docker
$ sudo su - $ wget -qO- https://get.docker.com/ | sh $ docker version $ exit $ sudo usermod -aG docker $USER
docker-compose
$ sudo su - $ curl -L https://github.com/docker/compose/releases/download/1.10.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose $ chmod +x /usr/local/bin/docker-compose
lets encrypt
$ git clone https://github.com/letsencrypt/letsencrypt.git $ cd letsencrypt/ $ ./letsencrypt-auto --help
nginx
$ sudo apt-get install nginx
のような感じでインストールした。
Mastodonをインストールする
冒頭に紹介した本家のリポジトリをフォークして、そいつをクローンして以下のように作業する。 (リポジトリのREADMEに書いてある)
$ cd mastodon $ cp .env.production.sample .env.production $ vi .env.production
以下変更点
# Federation LOCAL_DOMAIN=your domain LOCAL_HTTPS=true # 全て同じ PAPERCLIP_SECRET= docker-compose run --rm web rake secret で取得できるキー SECRET_KEY_BASE= docker-compose run --rm web rake secret で取得できるキー OTP_SECRET= docker-compose run --rm web rake secret で取得できるキー # https://sparkpo.st/smtp にアカウント登録してSMTP_SERVER, SMTP_LOGIN, SMTP_PASSWORDを取得しておく # sparkpostで取得したドメインでのメアドをverifyするにはRoute 53でTXTレコード設定をする必要があった。 SMTP_SERVER=sparkpostで手に入るホスト名 SMTP_PORT=587 SMTP_LOGIN=sparkpostで手に入るログイン ID SMTP_PASSWORD=sparkpostで手に入るパスワード SMTP_FROM_ADDRESS=mail@ドメイン名 # 送信元にしたいメアド。domainがsparkpostに登録&verifiedならOK
$ docker-compose build $ docker-compose run --rm web rake secret $ docker-compose run --rm web rails db:migrate $ docker-compose run --rm web rails assets:precompile $ docker-compose up -d # デーモンでの起動が嫌なら -dを消す
ここまでやれば
$ curl localhost:3000
は成功するはず。
これらに外部から80, 443ポートでアクセスしたいので、Lets EncryptとNginxの設定をする。
Lets Encryptの設定
$ cd letsencrypt $ ./letsencrypt-auto certonly --webroot -w /home/mastodon/live/public(適当で良さそう) -d ドメイン名 $ メールアドレスを入力し、利用規約に同意する
すると、 /etc/letsencrypt/live/ドメイン名/
に鍵が生成されているので、nginxの設定の際に使用する。
Nginxの設定
あとはNginxの設定をする。公式リポジトリのREADMEを元に少し変更すればOK
だが、やっていることは
- 80 -> 443ヘリダイレクト
- 443へリダイレクトさせたリクエストを
localhost:3000
へ転送する /api/v1/streaming
へのアクセスはlocalhost:4000
へ転送する
と、その他のチューニング。
公式READMEの設定ファイルをコピーして、以下少しだけ変更する。
$ sudo vi /etc/nginx/conf.d/mstdn.conf server { listen 80; listen [::]:80; server_name ドメイン; return 301 https://$host$request_uri; } server { listen 443 ssl; listen [::]:443 ssl; server_name ドメイン; ... ssl_certificate /etc/letsencrypt/live/ドメイン/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/ドメイン/privkey.pem; ... $ sudo systemctl restart nginx
これで、アクセスできるはず。
気持ち
- 基本的に
docker-compose
するだけだが、その他メールサーバーが必要とか、HTTPSとか、READMEに指示のないところを適宜自分で設定していったので、最初はスラスラできないのではと思った。
知見
- 作成時、上記インスタンス一覧サイトに登録されているものは700ほどで、フォロワー3000以上のTwitterアカウントで拡散などしても意外とインスタンスの登録者は集まらなかった。ので、mstdn.jpがもう日本はほぼ独占している以上、色のないインスタンスを作っても登録者は集まらなそう。
差別化を測るために
.pics
は写真メインのインスタンス、などのように特化していこうかなという戦略も考えられる。 - インスタンスのスコアをあげるにはHTTPS対応を始め、
で診断をすることが有効である。