Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

20170429 jitakurack mastodon

838 views

Published on

自宅ラック勉強会向けMastodon on AWS構成資料

Published in: Internet
  • Be the first to comment

20170429 jitakurack mastodon

  1. 1. 2017/04/29 きりのみなと mastodon.chotto.moe on AWS
  2. 2. 全体構成 1 DBサーバ(RDS) db.t2.micro Mastodon鯖 t2.large Redis(ElastiCache) cache.t2.micro ロードバランサ ACM+ALB メディアファイル S3Bucket+ StaticWebHosting CDN(CloudFront) メール通知 SES 権威DNS Route53 Mastodon ユーザ
  3. 3. 全体構成における考え方  AWSマネージドサービスを活用する – メールサーバを立てずSESを使う  データは腹持ちさせない – PostgreSQLはRDSに任せる – RedisはElastiCacheRedisに外出しする – メディアファイルはS3バケットに保持させる – Docker-composeでMastodon本体をバージョンアップす る時にシビアにデータの保持を考えなくて済むため 2
  4. 4. 全体構成における考え方  ユーザ通信は全て暗号化させる – ALBはAWS Certificate ManagerのSSL証明書を使い、 Mastodonの設定でHTTP to HTTPSリダイレクトさせる – メディアファイルはCloudFront + S3バケット(静的ウェ ブホスティング)でHTTPS上でコンテンツ配信する – ユーザはメールアドレス+パスワードを入力してログ インするのにHTTP通信なのはとてもマズい – HTTPSサイトの中からCSS/Javascript/Websocket等の外 部コンテンツをHTTPで呼び出すとブラウザ側でエラー になるので、全通信をHTTPS化する必要がある 3
  5. 5. Mastodon鯖の構成  DB/Redisを外出ししているので、本家の Docker-compose.ymlを少し修正して利用  一つのインスタンス上に、ポートを分けて以下 3つのMastodon環境を同居させている – jitakurack.chotto.moe – mastodon.chotto.moe – ステージング環境  今のところ冗長化はしていない – なのでMastodonのバージョンアップ中は落ちますw 4
  6. 6. Mastodon鯖のスペック  EC2 t2.largeを利用 – vCPU 2core – Mem 8GB – EBS only  CPUよりはメモリが大事 5
  7. 7. Ubuntu 16.04 LTSへMastodonを導入 1. Docker + Docker Compose の導入 – 公式ドキュメントに沿ってDockerをまず導入  Get Docker for Ubuntu https://docs.docker.com/engine/installation/linux/ubuntu/ – Docker導入後、Docker Composeを配置  Install Docker Compose https://docs.docker.com/compose/install/ 2. Mastodonのリポジトリの取得 – 本家のコードを手元にクローンする  git clone https://github.com/tootsuite/mastodon.git 6
  8. 8. Ubuntu 16.04 LTSへMastodonを導入 3. docker-compose.ymlを編集 – 公式だとPostgreSQL/RedisもDocker Imageを利用する が、RDS / ElastiCacheを利用するので該当部分をコメ ントアウトする 7 version: '2' services: web: restart: always build: . image: gargron/mastodon env_file: .env.production command: bundle exec rails s -p 3000 -b '0.0.0.0' ports: - "3000:3000" volumes: - ./public/assets:/mastodon/public/assets - ./public/system:/mastodon/public/system streaming: restart: always build: . image: gargron/mastodon env_file: .env.production command: npm run start ports: - "4000:4000" sidekiq: restart: always build: . image: gargron/mastodon env_file: .env.production command: bundle exec sidekiq -q default -q mailers -q pull -q push volumes: - ./public/system:/mastodon/public/system
  9. 9. Ubuntu 16.04 LTSへMastodonを導入 4. .env.productionを編集 – ElastiCache Redis周り  REDIS_HOST=${ElastiCacheクラスタエンドポイント名}  REDIS_PORT=${ElastiCacheポート番号(デフォルト6379)} – RDS PostgreSQL周り  DB_HOST=${RDSインスタンスDNS名}  DB_USER=${DBユーザ名}  DB_NAME=${DBスキーマ名}  DB_PASS=${DBパスワード}  DB_PORT=${RDSサービスポート番号(デフォルト5432)} 8
  10. 10. Ubuntu 16.04 LTSへMastodonを導入 4. .env.productionを編集 – SES周り  SMTP_SERVER=${SESエンドポイント名}  SMTP_PORT=587  SMTP_LOGIN=${IAMユーザのSMTP ID (AKIA…)}  SMTP_PASSWORD=${IAMユーザのSMTP Password}  SMTP_FROM_ADDRESS=${SESで登録した送信元メールア ドレス} 9
  11. 11. Ubuntu 16.04 LTSへMastodonを導入 4. .env.productionを編集 – S3バケット周り  S3_ENABLED=true  S3_BUCKET=${S3バケット名}  S3_REGION=ap-northeast-1  以下はIAM Roleを利用しない(出来なかった)場合に設定  AWS_ACCESS_KEY_ID=${IAM Userで作成したAPIキー}  AWS_SECRET_ACCESS_KEY=${IAM Userで作成したシーク レットキー} – CloudFront周り  S3_CLOUDFRONT_HOST=${CloudFront経由のホスト名} 10
  12. 12. Ubuntu 16.04 LTSへMastodonを導入 5. Dockerイメージの取得or作成 – 公式にDockerイメージが定期的に作成されているので それをそのまま利用する  docker-compose pull – 当然、docker buildでビルドすることも出来るが数分~ 10分程度かかってしまうので注意  docker-compose build 11
  13. 13. Ubuntu 16.04 LTSへMastodonを導入 6. DBデータの更新、CSS/Javascriptの最新化 – Railsだから仕方ない  docker-compose run --rm web rake db:migrate  docker-compose run --rm web rake assets:precompile 7. Mastodonの起動 – 作成はup (-dでデーモン化)、破棄はdown  docker-compose up –d – 起動はstart、停止はstop – ログを見たい場合はlogs (-fでtail -fのように追いかけ)  docker-compose logs -f 12
  14. 14. AWS独特の注意事項  同一サーバ上で、Web(Rails)とStreaming (node.js)を同居させる場合は、URLベースで通 信先ポートを変えてあげる必要あり 13 Mastodon鯖 t2.large ロードバランサ ACM+ALB web: 3000 streaming: 4000 defaultは3000番に流す /api/v1/streaming/*は 4000番に流す
  15. 15. AWS独特の注意事項  Webのヘルスチェックは GET /about → レスポ ンスコード 301 が良さそう 14 200番が返ってくる URLがあんまり無い… (静的コンテンツもassets:precompile するとURLが変わる)
  16. 16. AWS独特の注意事項  Streamingのヘルスチェックは GET / → レスポ ンスコード 200-499が良さそう 15 Tokenが無いのでどんなURLを たたいても401が返ってくる悲しみ
  17. 17. AWS独特の注意事項  CloudFrontが使うSSL証明書は us-east-1 で作る  ALBが使うSSL証明書は ALB/EC2 がいるリー ジョンで作る – このドキュメントを見ている人は大抵は ap-northeast-1 で作ることになるはず → ACMの証明書は忘れず2カ所で作成しましょう 16
  18. 18. その他  コンプライアンス的なやつ – ALBアクセスログはS3に忘れず保管しておきましょう – MastodonのログはCloudwatch LogsかFluentdを使って 外部退避しましょう – 一般向けにWebサービスを公開している以上、正しく管 理するのは世間への義務です 17
  19. 19. メモ  本家の最新コードにただ追従する場合は docker-compose buildしなくても良い – git pull – docker-compose pull – docker-compose run --rm web rake db:migrate – docker-compose run --rm web rake assets:precompile – docker-compose up -d  sidekiqは2個以上に増やしておいた方が良い – docker-compose scale sidekiq=2 18
  20. 20. メモ  crontabで必ず1日1回実行すること – docker-compose run --rm web rake mastodon:daily 19

×