自分ドメインのEC2でMastodonインスタンス構築する手順
環境
-
EC2
-
Ubuntu 16.04
-
Security Group
- Inbound SSH
- Inbound ICMP
- Inbount HTTPS
-
Elastic IPをassign
-
-
その他
-
ドメイン・DNS: GoDaddy
-
メール配信: Mailgun
-
SSL: Let's Encrypt(Certbot)
ドメイン・DNS
レジストラにGoDaddyを使う場合。
DNS設定でAレコードを追加し、Elastic IPへ向けておく。
www.
なども使う場合はCNAMEレコードも追加。
名前解決できることを確認する。
$ dig $DOMAIN @8.8.8.8
メール関連
登録時のメール配信のための設定にMailgunを使う場合。
Mailgunでドメインを追加したら
でDefault SMTP Login
/Default Password
を確認する。(あとで使う)
続いてDomain Verification & DNS
のTXT,MXのレコード設定を確認。
この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
動作確認
作ったドメインからブラウザアクセスすると無事に動いた。
ユーザー登録するとSidekiq、Mailgun経由でメールが送信される。
sidekiq_1 | 2017-04-25T17:06:56.110Z 1 TID-gn57hjjrc ActionMailer::DeliveryJob JID-3d44cf5c8890886aae8fc0b5 INFO: done: 3.322 sec
メールをconfirmするとログインできるようになる。
Toot
宿題
- データ永続化などは追って
- すぐに情報が古くなりそう