
HedgeDocをSupabase+R2で0円構築
自宅サーバー、爆破
まずことの始まりは自宅のProxmoxのサーバーを爆破したことです。
以前記事を書いた通り
https://mizuame.works/blog/2024-12-01/
HedgeDocはオンプレで完全に運用していた訳ですが、爆破に伴い、面倒になり一部のデータ以外コピーを取りませんでした。
今後も同様に爆破することがあるでしょうから、正直DBはオンプレでは持っていたくない気持ちになっていました。
DBだけクラウドに移行
CMD_DB_URL=postgresql://postgres
のようにymlに書いてアクセスできればいい訳ですから、任意のクラウドで提供されているPostgresSQLを使えます。しかしここで問題なのが、無料枠がある所がないです。AWSのAuroraは使えないですし、RDSは無料枠が1年しかなく、その後は月2000円位かかります。CloudflareSQLはWorkersを通してしか基本操作するようにできていません。
その中、Supabaseの無料枠があるらしく、これは純正のPostgresSQLなため、これを使いました。
ymlを書く
version: '3'
services:
app:
image: quay.io/hedgedoc/hedgedoc:1.9.9
environment:
- CMD_DB_URL=postgresql://postgres.id:[email protected]>
- CMD_DOMAIN=domain
- CMD_PROTOCOL_USESSL=true
- CMD_URL_ADDPORT=false
- CMD_TRUST_PROXY=true
# R2 Image Upload Settings
- CMD_IMAGE_UPLOAD_TYPE=s3
- CMD_S3_ENDPOINT=id.r2.cloudflarestorage.com
- CMD_S3_REGION=auto
- CMD_S3_ACCESS_KEY_ID=key
- CMD_S3_SECRET_ACCESS_KEY=secret
- CMD_S3_BUCKET=hedgedoc
- CMD_S3_FORCE_PATH_STYLE=true
# CSP Settings
- CMD_CSP_ENABLE=true
- CMD_CSP_REPORT_ONLY=false
- "CMD_CSP=default-src 'self' https://domain https://*.cloudflareusercontent.com; connect-src '>
ports:
- "3000:3000"
restart: always
- CMD_DB_URL=postgresql://postgres.id:[email protected]>
こんな感じでSupabaseのSQLを設定します。
- CMD_IMAGE_UPLOAD_TYPE=s3
- CMD_S3_ENDPOINT=id.r2.cloudflarestorage.com
- CMD_S3_REGION=auto
- CMD_S3_ACCESS_KEY_ID=key
- CMD_S3_SECRET_ACCESS_KEY=secret
- CMD_S3_BUCKET=hedgedoc
- CMD_S3_FORCE_PATH_STYLE=true
ここはS3を設定するのと同じ要領でいいです。 それ以外の設定は以前の記事を読んでください。
起動
設定が正しく行えれていれば、画像のようにテーブルが勝手に作られるはずです。
画像がプレビューできない
残念ながら、R2はアップロードURLを変更できないので、https://{accountid}.r2.cloudflarestorage.com/img のリンクがプレビューできません。 ですので、手動でドメインを割り当てるなどしてアップロード後はリンクを書き換える必要があります。
https://community.hedgedoc.org/t/using-r2-storage-cloudflare-with-the-s3-upload-options/975