Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

Mastdonインスタンス立ててみた in Azure #ssmjp

2.545 visualizaciones

Publicado el

20170529 #ssmjp mastodon
Azure上でマネージドサービスを使って
クラウドっぽくMastodonを動かしてみた話

Publicado en: Tecnología
  • Inicia sesión para ver los comentarios

Mastdonインスタンス立ててみた in Azure #ssmjp

  1. 1. Mastodonインスタンス 立ててみた in Azure Aki@nekoruri 2017-05-29 #ssmjp
  2. 2. Mastodon • Twitterっぽいアレ • 高頻度で短文が更新されるマイクロブログ • 添付ファイル(画像や動画)が付いたりする • 「フォロー」に基づいた購読・通知と雑なアクセスコントロール • 分散SNS(Federated Social Web) • 「Twitterっぽいアレ」をブログ更新通知などの仕組みで分散化を実現 • 割と死に体だったプロトコルも流用採用している • Rails上に教科書通りに分散システムを実装(非同期処理の多用) • 微妙な言い換え(ツイート⇒トゥート、等)
  3. 3. 日本におけるMastodon • 4月中旬に過剰とも言える流行の波 • 猫も杓子もといった流行期は脱出 • PixivのPawooやドワンゴのfriends.nico など、CGMサイトに対応するSNSとして 一定の存在感は引き続き確保 • 分散SNSの実現可能性を十分に示した 出典:https://friends.nico/@TaiseiMiyahara/10996911
  4. 4. Mastodon用語 • インスタンス • 一つのドメインを持つMastodonシステム(例:mstdn.jp、pawoo.net) • インスタンス毎にその管理者が運用し、ポリシーを持つ • ネットワーク屋っぽく言えばAS(自律システム) • リモートフォロー • 別のインスタンスのユーザをフォロー(購読)する • ローカルタイムライン • 自分と同じインスタンスで発言された全ての公開トゥートのタイムライン • 連合タイムライン • ローカルタイムライン +インスタンス内の誰かがリモートフォローする全ての公開トゥート
  5. 5. AzureにMastodonを立ててみよう 1. まず服を脱ぎます UbuntuのVMを立てます。 2. 外部からのHTTPSの接続を許可します。 3. Dockerとdocker-composeを入れます。
  6. 6. あとは神チュートリアル資料の通り http://qiita.com/zembutsu/items/f1f1ede26102ba27fce2
  7. 7. ほい
  8. 8.
  9. 9. んなわけはない
  10. 10. 運用こそが本当の戦い • スケールアウト対応 • 添付ファイルがローカルファイル • DB(PostgreSQL/Redis)が同一ホスト内のコンテナ間接続 • ドメインの分離 • 「添付」画像は、トゥートに直接URLとして含まれる。 ⇒ あとからドメインの変更・分離は難しいので最初に対応すること • バックアップとか冗長化とか • ぶっちゃけもうデータベースの面倒なんて自分で見たくない ⇒ マネージドDB使おう • ぶっちゃけもうメール配信キューの面倒なんて(ry ⇒ マネージドSMTPサービス使おう
  11. 11. オブジェクトストレージの変更 • Mastodon自体の機能としてはAmazon S3に対応 • S3互換のなにかを持ってくれば良い • Google Cloud Storageは標準のS3互換APIでそのまま通る模様 • s3proxy • S3互換APIを提供するプロキシサーバ • Azure BlobやOpenStack Swiftなどに保存できる • ローカルファイルにも保存できる ⇒ クラウド使わない場合もひとまずs3proxyでドメイン分離が可能
  12. 12. オブジェクトストレージの変更 • Azure BlobがカスタムドメインのHTTPSができない • とりあえずCDNを挟んで回避 • Azure CDN from Verizonなら無償でHTTPS証明書取れます • 解説記事の通りにやれば良い • http://blog.tmyt.jp/entry/2017/04/19/202922 『今話題のMastodonインスタンスを建ててS3の代わりに Azure Blob Storageを使う』 • paperclip.rb へのパッチは既に不要
  13. 13. データストアのマネージドサービス化 • メインのDBはPostgreSQL • いやっふう! Azure Database for PostgreSQLプレビュー来た! • 内部のPubSubなどにRedis • Azure Redis Cache
  14. 14. PostgreSQLの切り替え • PortalからAzure Database for PostgreSQL構築 • 接続のセキュリティとか適当に設定 • データ移行 • とりあえずpg_dumpで吸ってpsqlで投入 • 設定変更してdocker-composeあげ直し • docker-compose.ymlでdbを削除 • .env.productionに接続情報
  15. 15. Redisの切り替え • Redis Cacheを構築 • とりあえずテストでSSL無しで検証(時間不足) • 設定変更してdocker-composeあげ直し • docker-compose.ymlでredisを削除、.env.productionに接続設定 • 注意点 • Mastodon側で利用するRedisライブラリがSSL非対応 「NotImplementedError (SSL not supported by hiredis driver)」 • アクセスキーに「+/」が入ると駄目 • URLエンコードすればParseは通るが、デコードされずにサーバに投げられる! • ライブラリ周りの組み合わせのバグっぽい • 当たりを引けるまでアクセスキー再生成ガチャを回せば回避可能(ひどい)
  16. 16. メール配信の切り替え • みんなだいすきSendGrid • Azureマーケットプレイス経由でも利用できるけど、 今回は構造計画研究所さん経由 • 設定変更してdocker-composeあげ直し • docker-compose.ymlでmtaを削除、.env.productionに接続情報 • ルート証明書ストアを適切に設定する必要がある (が、所詮通知だけと割り切って検証しない設定も可能) • メールなのでDNS設定も • SendGridのDomain Whitelabel機能を設定⇒DNSにレコード登録 • SPF/DKIMともにPASSできる
  17. 17. 最終的な構成 frontend (nginx) streaming (node) web (rails) SendGrid s3proxy sidekiq (worker) PostgreSQL (managed) Azure Blob Redis (managed) docker-compose管理 AzureCDN 画像など Web/Streaming 外部 インスタンス
  18. 18. その他の課題 • コンテナ管理 • 監視
  19. 19. コンテナ管理 • コンテナ数などの管理 • ウェブアプリだけでなく、非同期タスクのスループットが重要 • 負荷に応じたワーカーの制御が必要 • そもそもdocker-composeとか手で叩く時代じゃない • GKEみたいなのが欲しい • Azure Container Serviceでそれっぽくできそう • 結局はコンテナのスケジューリングの問題に行き着く
  20. 20. 監視 • 一般的なサーバ性能メトリクス • CPU、メモリ • Sidekiqキュー • 規模が大きくなるとここが詰まる模様 • 複数のキューごとにプロセス分離など • マネージドサービスのメトリクス • PostgreSQL • Redis • サービス死活 • ユーザの投稿内容 • 自インスタンスのユーザの投稿の違法性 • Federate先のユーザから流れてきた投稿の違法性
  21. 21. まとめ • Azureでもクラウドっぽくできマストドン • Azure Database for PostgreSQL万歳! • AWS Certificate Managerの影に隠れているけど、 Azure CDNもDigiCertのフルマネージド証明書が取得/利用可能 • 手抜きしたけどLB最初から挟んだ方が良い • もうステートレスになってるから、LB挟んで増やせばOK • ちなみに1月からMicrosoft MVPになりました • みんな祝って! • 今後も基本はベンダーニュートラルでやっていきます。 <良 い モ ノ は 良 い>
  22. 22. で、誰? • Aki (@nekoruri) • BLEなIoTシステムの クラウド側担当 • ちょろっと執筆も • 「薄い本」も出しています • 最近はすっかり セキュリティ教育畑に…… • セキュリティ・キャンプ プロデューサー • SecHack365 実施協議会委員 • ProjectDIVA Arcade LV.623 NEW!

×