👓

【docker】outline wikiでストレージにGCSを利用する

2023/10/26に公開

概要

outline wikiでアップロードファイル(添付ファイル)の格納先にGCSを利用する方法をまとめます。
公式ではAWS、minioがサポートされています。
今回は公式サポートではないGCSを、S3互換エンドポイントで利用します。

outlineとは

ossのナレッジベースツールです。
使用感はnotionのドキュメント機能に特化した感じです。
https://www.getoutline.com/

GCPの設定

GCSバケットを用意

まずはGCSで任意のバケットを作成します。

bucketの権限を編集

作成したらbucketの「アクセス権の編集」を行います。
CORSによるアクセスを実施するため、「きめ細かい管理」でACLを有効にしてください。

bucketにCORSを設定

次にbacketにCORSを設定します。
コンソールからはできないのでgcloud cliで実施します。

CORSファイル内容

originはGCSにアクセスするoutlineのドメインを記載します。
今回はローカルで利用する場合の記載を例とします。

cors.json
[
    {
        "origin": ["http://localhost:3000"],
        "responseHeader": ["*"],
        "method": ["PUT", "POST"],
        "maxAgeSeconds": 3600
    },
    {
        "origin": ["*"],
        "responseHeader": [],
        "method": ["GET"],
        "maxAgeSeconds": 3600
    }
]

CORS設定

以下のコマンドで設定できます。

gcloud storage buckets update gs://<bucket名> --cors-file=<CORSファイルへのパス>

設定状態は以下のコマンドで確認できます。

gcloud storage buckets describe gs://<bucket名> --format="default(cors_config)"

CORSの参考

https://cloud.google.com/storage/docs/cross-origin?hl=ja
https://cloud.google.com/storage/docs/using-cors?hl=ja#command-line_1

HMACを用意

outlineからGCSへアクセスする際の認証に利用するHMACを用意します。
HMACとはハッシュ化された認証コードです。
GCPではユーザアカウント・サービスアカウントに対して発行できます。

今回はサービスアカウントを利用します。
利用するサービスアカウントにはあらかじめ「Storage オブジェクト ユーザー(roles/storage.objectUser)」のロールを割り当てています。

GCSの「相互運用性」タブから「サービスアカウントのキー作成」で作成できます。

設定の詳細は公式が一番わかりやすいので確認しつつ実施します。
https://cloud.google.com/storage/docs/authentication/managing-hmackeys?hl=ja#console

outline wikiの設定

次にoutline側の設定を実施します。

設定ファイル

docker.envで、AWS/minio用の環境変数を以下のように設定します。

docker.env
FILE_STORAGE=s3
AWS_S3_UPLOAD_BUCKET_URL=https://storage.googleapis.com
AWS_S3_FORCE_PATH_STYLE=true
AWS_S3_UPLOAD_BUCKET_NAME=<バケット名>
AWS_S3_ACL=private
AWS_S3_UPLOAD_MAX_SIZE=104857600
AWS_REGION=us
AWS_ACCESS_KEY_ID=<HMACキー>
AWS_SECRET_ACCESS_KEY=<HMACシークレット>

起動

あとはoutlineを起動すればGCSにファイル配置できるようになっています。

docker-compose up -d


参考:dockerでのoutline wiki構築

公式のdocker構築手順は以下です。
https://docs.getoutline.com/s/hosting/doc/docker-7pfeLP5a8t

最後に

outline wiki自体のdockerでの構築についてはまた別の記事でまとめてみようと思います。

Discussion