Help us understand the problem. What is going on with this article?

マストドンのバックエンドに Google Cloud Storage を使う方法 #mastodon

More than 3 years have passed since last update.

マストドンのバックエンドに Google Cloud Storage を使う方法

先日マストドンのぼっちインスタンス、mstdn.okumin.com を Google Cloud Platform で構築しました。
その全体構成は『今流行りの #mastodon on Google Container Engine』で紹介しています。

この記事で述べられているように、mstdn.okumin.com はアイコンや投稿画像を保存する領域として、Google Cloud Storage を使用しています。
先程バックエンドに GCS を使う方法について質問を受けたので、Qiita にまとめておこうと思います。

Google Cloud Storage を使う理由

mstdn.okumin.com では、複数インスタンスからの読み書きを容易にするため、GCS を使用しています。

マストドンのプロセスのうち、アイコンや投稿画像の書き込みを行うプロセスは Web フロント(Rails) とバックグラウンドプロセス(sidekiq)の2つです。
前者はユーザーのアイコンアップロードなどを行うため、後者はよくわからんけどフォロイーのアイコンなどを保存するために書き込みを行います。

mstdn.okumin.com はこれらのプロセスをそれぞれ別の K8S Pod としてデプロイしているため、最小構成でも複数コンテナから同時に静的ファイルを書き込めるストレージを用意する必要があります。

最初は sidekiq が画像を保存すると知らなかったので永続ディスクを Web フロントにアタッチしていました。
永続ディスクは複数サーバからの同時書き込みができないようなので、問題が発覚したときは頭を抱えたのですが、GCS には S3 互換 API があるという情報を入手。

マストドンはストレージバックエンドとして S3 を使用することができるので、これを使うことにしました。

マストドンで GCS を使う方法

1. GCS のバケットを作る

適当なバケットを作ります。
この記事では「mstdn_bucket」というバケットを作ることにします。

2. S3 互換 API 用アクセスキー、シークレットキーを取得

(Amazon S3 からの)単純な移行に書かれている手順を参考に、アクセスキーとシークレットキーを取得します。

3. S3 を使うように設定する

.env.production.sample で触れられているように、環境変数を用いて S3 モードをセットアップすることができます。
設定値は、次のようになります。

S3_ENABLED=true
S3_BUCKET=mstdn_bucket
# 手順2で取得したアクセスキー
AWS_ACCESS_KEY_ID=GOOGXXXXXXXXXXXXXXXX
# 手順2で取得したシークレットキー
AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# 多分なんでもいいと思うが、自分は次のように設定している
S3_REGION=ASIA-NORTHEAST1
S3_PROTOCOL=https
S3_HOSTNAME=storage.googleapis.com
S3_ENDPOINT=https://storage.googleapis.com/

ポイントは「S3_ENDPOINT」を設定する必要がある点で、これがないとうまく動作しませんでした。

まとめ

以上、S3 互換 API を使って GCS をマストドンバックエンドとして使用する方法でした。
mstdn.okumin.com は過剰な構成になっていて、技術的に語れる点が他にもあるので、暇があれば小出しにしていきたいと思います。

稼働中の Terraform と Kubernetes 設定ファイルを参考に書いたので間違ってはいないと思いますが、色々思い出しながら書いた部分もあるので、間違っていたら教えてください。

okumin
プログラミング始めました。
http://okumin.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした