mastodonを立ち上げてみた

Cloud On The Beach 2017に向けてドメインを取得してmastodonを立ち上げてみた。

資料はこんな感じ。
もう少し?詳しく説明していくと

ゴールデンウィーク前に構築していたのを今更書くのもあれですが・・・

利用AWSサービス

こんな感じです。
金額は5,000円/月ぐらいで収まるような気がする。(気がしているだけ・・・計算したくない)

実際の利用者は39名^^;;

こんな人数だとEC2だけでも全く問題ないよね^^;;オーバースペックと思うけど・・・
いろいろなサービスを使って癖を学ぶのはいいかなーと思ってはいる。

SSLはELBで受けることでめんどくさい事は逃げました。SSL証明書の発行もAWS Certificate Managerを利用。
Application Load Balancerとの組合せは便利

設定ファイル(.env.production)は下記の通り

# Service dependencies
# You may set REDIS_URL instead for more advanced options
REDIS_HOST=Redisエンドポイント名
REDIS_PORT=6379
# You may set DATABASE_URL instead for more advanced options
DB_HOST=RDSのエンドポイント名
DB_USER=DBユーザ名
DB_NAME=DB名
DB_PASS=パスワード
DB_PORT=5432

# Federation
# Note: Changing LOCAL_DOMAIN or LOCAL_HTTPS at a later time will cause unwanted side effects.
# LOCAL_DOMAIN should *NOT* contain the protocol part of the domain e.g https://example.com.
# Federation
LOCAL_DOMAIN=mastodonサーバFQDN
LOCAL_HTTPS=true

# Application secrets
# Generate each with the `rake secret` task (`docker-compose run –rm web rake secret` if you use docker compose)
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で出てきた謎のキー

# VAPID keys
VAPID_PRIVATE_KEY=docker-compose run –rm web rake mastodon:webpush:generate_vapid_keyで出てきた謎の値
VAPID_PUBLIC_KEY=docker-compose run –rm web rake mastodon:webpush:generate_vapid_keyで出てきた謎の値

# Optionally change default language
DEFAULT_LOCALE=ja

# E-mail configuration
SMTP_SERVER=smtpサーバ名
SMTP_PORT=587
SMTP_LOGIN=mailgunのLogin名
SMTP_PASSWORD=mailgunのパスワード
SMTP_FROM_ADDRESS=Fromのアドレス

# S3 Settings
S3_ENABLED=true
S3_BUCKET=バケット名
AWS_ACCESS_KEY_ID=S3のWrite権限のあるアクセスキー
AWS_SECRET_ACCESS_KEY=S3のWrite権限のあるシーク
レットキー
S3_REGION=ap-northeast-1
S3_PROTOCOL=https
S3_HOSTNAME=https://s3.ap-northeast-1.amazonaws.com

# Optional alias for S3 if you want to use Cloudfront or Cloudflare in front
S3_CLOUDFRONT_HOST=CloudFrontのCNAME

最初はElasticashは使っていなかったけど試行錯誤しているうちにテストサーバで同じデータにアクセスできないのはつらいということでRedis Serverを立ち上げた。
ユーザ情報とトゥート情報はPostgreSQLに保存されていて、ホームの情報がRedisっぽいです。
アイコンは何度も表示されるのでCloudFrontに逃がす。
今回は初めてCloudFrontのEdgeをUS,EU,Asiaに制限してみた。
なるべく皆様画像は上げないでね・・・

メンテナンス

バージョンアップのやりかた

git pull
docker-compose pull # 最新のImageを落としてくる
docker-compose build # buildを実行
docker-compose run –rm web rails db:migrate
docker-compose run –rm web rails assets:precompile #これは時間がかかります。

起動コマンド

docker-compose up -d

Logをみる。

docker-compose logs -f
^Cで終了させる。

おまけ

docker-compose.ymlは下記の通り

version: ‘3’
services:

# db:
# restart: always
# image: postgres:alpine
### Uncomment to enable DB persistance
# volumes:
# – ./postgres:/var/lib/postgresql/data

# redis:
# restart: always
# image: redis:alpine
### Uncomment to enable REDIS persistance
# volumes:
# – ./redis:/data

web:
build: .
image: gargron/mastodon
restart: always
env_file: .env.production
command: bundle exec rails s -p 3000 -b ‘0.0.0.0’
ports:
– “3000:3000”
# depends_on:
# – db
# – redis
volumes:
– ./public/assets:/mastodon/public/assets
– ./public/packs:/mastodon/public/packs
– ./public/system:/mastodon/public/system

streaming:
build: .
image: gargron/mastodon
restart: always
env_file: .env.production
command: npm run start
ports:
– “4000:4000”
# depends_on:
# – db
# – redis

sidekiq:
build: .
image: gargron/mastodon
restart: always
env_file: .env.production
command: bundle exec sidekiq -q default -q mailers -q pull -q push
# depends_on:
# – db
# – redis
volumes:
– ./public/system:/mastodon/public/system

RedisとDBはAmazonのサービスを使っているのでbuildすらしなくていいのでコメントにしています。
depends_onも同様の理由でコメント

yml形式だと読みやすいねー