EC2+Dockerで自分ドメインのMastodon構築

  • 3
    いいね
  • 0
    コメント

自分ドメインのEC2でMastodonインスタンス構築する手順

環境

ドメイン・DNS

レジストラにGoDaddyを使う場合。
DNS設定でAレコードを追加し、Elastic IPへ向けておく。
www.なども使う場合はCNAMEレコードも追加。

名前解決できることを確認する。

$ dig $DOMAIN @8.8.8.8

メール関連

登録時のメール配信のための設定にMailgunを使う場合。
Mailgunでドメインを追加したら

Default SMTP Login/Default Passwordを確認する。(あとで使う)
Screen Shot 2017-04-26 at 1.39.24.png

続いてDomain Verification & DNSのTXT,MXのレコード設定を確認。

Screen Shot 2017-04-26 at 1.38.04.png

この4件をレジストラ側で追加する。
完了するとMailgun上でドメインがVerifyされてメールが送れるようになる。

Certbot

Let's Encryptの無料SSL証明書を取得する。

環境(今回はUbuntu16.04 x nginx)に合わせたインストール指示を読む。

$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install certbot
$ certbot --version
certbot 0.11.1

うまくいけば一度しか使わないが、使い方を一応見ておく。

$ certbot -h

次のコマンド実行は何度も設定不備でエラーになると一定時間ロックされてしまうので注意。
ドメインの名前解決ができること,セキュリティグループでポート443番が空いていることを確認する。

ドメインはカンマはさんで複数指定可能。

$ sudo certbot certonly --standalone -d $DOMAIN,$DOMAIN2,...

$ sudo ls -R /etc/letsencrypt/live/

Docker

普通にrails sするだけでも大体の動き確認はできるが、docker-composeを使う。

インストールして起動まで。

$ sudo apt-get update

$ sudo apt install docker.io
$ docker -v
Docker version 1.12.6, build 78d1802

$ sudo apt install docker-compose
$ docker-compose -v
docker-compose version 1.8.0, build unknown

$ sudo service docker start
$ sudo usermod -aG docker $(whoami)
$ exit

ログインし直す。

$ docker ps   
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

Mastodon

本丸のソースコードを取得し、タグ付きバージョンに切り替える。

$ git clone https://github.com/tootsuite/mastodon
$ cd mastodon
$ git tag | tail -1
v1.2.2
$ git checkout v1.2.2

Dockerコンテナ群のビルド

$ cp .env.production.sample .env.production

$ docker-compose pull 
$ docker-compose build

secret生成

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

生成されたsecretたちを控えておく。

設定

$ vim .env.production
  • PAPERCLIP_SECRET,SECRET_KEY_BASE,OTP_SECRET : secretたちを設定する
  • LOCAL_DOMAIN
  • SMTP_LOGIN,SMTP_PASSWORD: Mailgunで表示されたものに修正
  • SINGLE_USER_MODE=true: 自分以外のユーザーを作らない場合はコメント外して有効に
$ docker-compose run --rm web rake db:migrate
$ docker-compose run --rm web rake assets:precompile
$ docker-compose up -d
$ docker-compose logs -f
...
web_1        | => Booting Puma
web_1        | => Rails 5.0.2 application starting in production on http://0.0.0.0:3000
web_1        | => Run `rails server -h` for more startup options

立ち上がったら別シェルで

$ curl localhost:3000
<html><body>You are being <a href="https://localhost/">redirected</a>.</body></html>ubuntu@ip-172-30-xx-xxx:~/mastodon

nginx

いよいよ終盤。

$ sudo apt install nginx-core
$ nginx -v
nginx version: nginx/1.10.0 (Ubuntu)

SSL dhparam

$ sudo cat /etc/nginx/nginx.conf|grep dhparam
          ssl_dhparam         /etc/ssl/certs/dhparam.pem;

$ sudo openssl dhparam 2048 -out /etc/ssl/certs/dhparam.pem

設定

$ sudo cp -p /etc/nginx/nginx.conf /etc/nginx/nginx.conf.original
$ sudo vim /etc/nginx/nginx.conf

Production Guideの設定をいじってhttpディレクティブ内に差し込む。

  • SSL関連 ssl_certificate/ssl_certificate_key
  • ドメイン名 server_name
  • 公開ディレクトリ root

syntax checkして起動。

$ sudo nginx -t -c /etc/nginx/nginx.conf
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

$ sudo service nginx restart
$ sudo service nginx status

動作確認

作ったドメインからブラウザアクセスすると無事に動いた。

Screen Shot 2017-04-26 at 2.05.18.png

ユーザー登録するとSidekiq、Mailgun経由でメールが送信される。

sidekiq_1    | 2017-04-25T17:06:56.110Z 1 TID-gn57hjjrc ActionMailer::DeliveryJob JID-3d44cf5c8890886aae8fc0b5 INFO: done: 3.322 sec

メールをconfirmするとログインできるようになる。

Screen Shot 2017-04-26 at 2.09.34.png

Toot

Screen Shot 2017-04-26 at 2.10.42.png

宿題

  • データ永続化などは追って
  • すぐに情報が古くなりそう