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

一覧へ戻る