16/Apr/2017 (Sun) - Diary

@ssig33

最近 Cloud At Cost が猛烈に安定しててかえって心配

09:42

Docker Swarm Mode で Mastodon 立てる

公式に用意されている Docker Image はクソであれを使ってデプロイするのは混乱の元でしかない。ローカルで assets:precompile してそれをボリュームでどうにかしろとかクソすぎる。というわけでわりかし楽に使えるイメージを作った。

一応公式を擁護すると docker build 中にリンクができないみたいな問題があってそれがだるいみたいな話はある。

事前に用意

  • Redis と PostgreSQL をどっかに立てる。 Swarm mode 使って立ててもいい。
  • S3 にバケットを作って静的サイト配信を On にする。またその静的サイトを Cloudfront で配信するようにする。
  • Mailgun にアカウントを作ってクレカ番号を入れる
    • 個人で立てたインスタンスぐらいだと課金されるぐらいにメール配信されないと思う(保証はしない)。
    • やる気があるなら自分で smtp サーバー立ててもいい、俺はやりたくない

デプロイ

Web

$ docker service create \
  -e REDIS_HOST= \
  -e REDIS_PORT= \
  -e DB_HOST= \
  -e DB_USER= \
  -e DB_PASS= \
  -e DB_NAME= \
  -e DB_PORT= \
  -e LOCAL_DOMAIN=Mastodon に割り当てるドメイン名 \
  -e LOCAL_HTTPS=false\
  -e SECRET_KEY_BASE=適当に入れる\
  -e OTP_SECRET=適当に入れる\
  -e PAPERCLIP_SECRET=適当に入れる\
  -e SMTP_SERVER=smtp.mailgun.org\
  -e SMTP_PORT=587\
  -e SMTP_LOGIN=Mailgunの設定 \
  -e SMTP_PASSWORD=Mailgunの設定 \
  -e SMTP_FROM_ADDRESS=Mailgunの設定 \
  -e RAILS_ENV=production \
  -e S3_ENABLED=true \
  -e S3_BUCKET=S3のバケット名 \
  -e AWS_ACCESS_KEY_ID= \
  -e AWS_SECRET_ACCESS_KEY= \
  -e S3_PROTOCOL=https \
  -e S3_REGION=us-east-1 \
  --name mastodon-web\
  -p 30001:3000 公開するポートは適当に決める \
  ssig33/mastodon bundle exec rails s -p 3000 -b 0.0.0.0

WebSocket

基本 Web と同じで最後のほうだけ以下のようにする

$ docker service create\
  (略)
   -p 30002:4000 \
   ssig33/mastodon npm run start

Sidekiq

基本 Web と同じで最後のほうだけ以下のようにする

$ docker service create\
  (略)
  ssig33/mastodon bundle exec sidekiq -q default -q mailers -q pull -q push

nginx

https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Production-guide.md を読んでそのとおりにやる。

雑感

もうちょっと気軽に個人がインスタンス立てられるようになるといいですねとは思うがなかなか簡単ではないな。

20:30