Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

自分ドメインの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

宿題

  • データ永続化などは追って
  • すぐに情報が古くなりそう
satzz
Web Engineer 2009-2011 Hatena(part-time) 2011-2015 DeNA
http://satzz.me
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away