セルフホスト

自分のサーバーで Golem Docs を動かす。

Golem Docs は無料で、サーバーがなくても使えます。サーバーがあると、デバイス間の同期、共有、リアルタイムの共同編集が加わります。golemdocs.com は月額 $3 でサーバーを提供していますが、自分の Cloudflare アカウントで自分のサーバーを動かすこともでき、その場合ファイルもアカウントもあなたのものです。

しくみ

サーバーは 1 つの Cloudflare Worker です。アプリ自体も配信するので、あなたのアドレスが、招いた人にとっての Golem Docs になります。データはすべて、あなたのアカウントにある 4 つの Cloudflare 製品に保存されます。

Workersアプリのファイルと、ユーザーのサインインやドキュメントの保存を受け持つ API。
D1データベース 1 つ: アカウント、セッション、共有、各ユーザーのドキュメントとフォルダーの一覧。
R2ドキュメント本体、その画像、以前のバージョン。
Durable Objects複数の人が一緒に編集している間の、ドキュメントごとのルーム。

今のところ動くのは Cloudflare 上だけです。自分のコンピューターや別のサービスなど、ほかの場所で動かしたい場合はご連絡ください。Cloudflare なしで動かす方法を検討します。

費用

家庭で使う程度なら無料で済むこともあります。Cloudflare の無料プランには 1 日 100,000 リクエストと 10 GB のファイル保存が含まれ、10 GB を超える分は 1 GB あたり月 $0.015 なので、100 GB で月 $1.35 ほどです。無料プランはリクエストごとの計算時間が短いため、長いドキュメントには Workers の有料プラン (月額 $5、上限がずっと高い) が必要になることがあります。最新の金額は Cloudflare の料金をご確認ください。

必要なもの

設定

30 分ほどかかります。コマンドはすべて、コードをダウンロードしたフォルダーでターミナルから実行します。

1. コードを入手して Cloudflare にサインインする

Golem Docs をダウンロードして必要なものをインストールし、Cloudflare アカウントを使えるようにするためにブラウザーを開きます。

git clone https://github.com/davidfig/golemdocs.git
cd golemdocs
pnpm install
pnpm --filter @golemdocs/server exec wrangler login

2. データベースとストレージを作る

先に Cloudflare のダッシュボードで R2 を有効にします。無料枠の範囲内でも、支払い方法の登録を求められることがあります。次のコマンドでデータベースとストレージのバケットが作られ、データベースの ID が表示されます。

pnpm --filter @golemdocs/server cf:setup

3. アカウント、データベース、アドレスを指定する

server/wrangler.local.example.json を server/wrangler.local.json にコピーし、Cloudflare のアカウント ID、手順 2 のデータベース ID、ドメインを記入します。無料のアドレスを使う場合は、ドメインに workers.dev と書きます。

{
  "ACCOUNT_ID": "…",
  "DIRECTORY_ID": "…",
  "DIRECTORY_DEV_ID": "",
  "DOMAIN": "docs.example.com"
}

4. テーブルを作って公開する

2 つ目のコマンドがアプリをビルドしてサーバーと一緒にアップロードし、公開先のアドレスを表示します。

pnpm --filter @golemdocs/server cf:migrate
pnpm --filter @golemdocs/server deploy:prod

5. サインイン用アプリを作る

GitHub で Settings › Developer settings › OAuth Apps › New OAuth App を開きます。サーバーのアドレスを入力し、コールバック URL に https://<あなたのアドレス>/api/auth/callback/github を指定します。次に client secret を生成します。

6. サインインできる人を決める

各コマンドが値を尋ねます。server フォルダーで実行してください。

cd server
pnpm exec wrangler secret put SINGLE_DATABASE --env=""
pnpm exec wrangler secret put ALLOWED_EMAILS --env=""
pnpm exec wrangler secret put ADMIN_EMAILS --env=""
pnpm exec wrangler secret put GITHUB_CLIENT_ID --env=""
pnpm exec wrangler secret put GITHUB_CLIENT_SECRET --env=""
SINGLE_DATABASEtrue: 全員のドキュメント一覧を 1 つのデータベースに置くので、Cloudflare の API トークンが不要になります。
ALLOWED_EMAILSサインインできる人: アドレス全体 (me@example.com) またはドメイン全体 (@example.com) をカンマ区切りで。必ず設定してください。設定しないと、アドレスを知った人なら誰でも登録して、あなたの費用でファイルを保存できてしまいます。
ADMIN_EMAILSあなた自身のアドレス。管理者はいつでもサインインでき、送られてきたフィードバックを読めます。
LINK_WEBSITE, LINK_SUPPORT…任意: ヘルプ メニューとようこそドキュメントのリンク先を golemdocs.com から変えます。一覧はガイド全文にあります。

7. サインインする

自分のアドレスを開き、GitHub でサインインします。サインイン中に作ったドキュメントはあなたのサーバーに保存され、一覧に載っている人同士で共有できます。

最新に保つ

新しいバージョンが出たら、同じ手順で入手して公開します。先にジャーナルを読んでください。ファイルやアカウントの保存方法が変わるリリースでは、そこに書いてあります。

git pull
pnpm install
pnpm --filter @golemdocs/server cf:migrate
pnpm --filter @golemdocs/server deploy:prod

golemdocs.com との違い

アプリとサーバーは AGPL-3.0 で提供されています。変更したバージョンを他の人向けに動かす場合は、そのソースコードを提供してください。Golem Docs の名前とロゴはこのプロジェクトのものです。