自托管
在你自己的服务器上运行 Golem Docs。
Golem Docs 是免费的,完全不需要服务器。有了服务器,就能在设备之间同步、共享,并实时协作编辑。golemdocs.com 以每月 3 美元的价格运行着一台服务器,你也可以在自己的 Cloudflare 账户上运行自己的服务器,这样文件和账户都归你所有。
原理
服务器就是一个 Cloudflare Worker。它同时提供应用本身,所以对你邀请的人来说,你的地址就是 Golem Docs。所有数据都存放在四种 Cloudflare 产品中,全部在你的账户里:
| Workers | 应用的文件,以及负责用户登录和保存文档的 API。 |
|---|---|
| D1 | 一个数据库:账户、会话、共享,以及每个人的文档和文件夹列表。 |
| R2 | 文档本身、其中的图片以及以前的版本。 |
| Durable Objects | 多人一起编辑时,每个文档各有一个房间。 |
目前它只能在 Cloudflare 上运行。如果你想把它放在别处,比如你自己的电脑或其他服务商,告诉我,我会制定一个不依赖 Cloudflare 的运行方案。
费用
一个家庭使用,可能完全免费。Cloudflare 的免费套餐包含每天 100,000 次请求和 10 GB 文件存储;超过 10 GB 的存储每 GB 每月 0.015 美元,100 GB 约 1.35 美元。免费套餐每次请求可用的计算时间很少,因此长文档可能需要 Workers 付费套餐:每月 5 美元,限额高得多。最新价格请查看 Cloudflare 的价格。
你需要
- 一个 Cloudflare 账户。域名可有可无:没有域名时,你的服务器会得到一个免费的 workers.dev 地址。
- 一台装有 Node 22.13 或更高版本和 pnpm 的电脑,用于设置和更新。之后它上面不需要运行任何东西。
- 一个 GitHub 账户,用来创建登录应用。也可以用 Google、Microsoft 和 Apple 登录。
设置步骤
大约需要半小时。每条命令都在终端里、在你下载代码的文件夹中运行。
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;即使在免费额度内,Cloudflare 也可能要求添加付款方式。然后这条命令会创建数据库和存储桶,并显示数据库的 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. 创建数据表并上线
第二条命令会构建应用,连同服务器一起上传,并显示它所在的地址。
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_DATABASE | true:所有人的文档列表都放在同一个数据库里,因此服务器不需要 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 的不同
- 请在浏览器中使用。桌面和手机应用目前只连接 golemdocs.com。
- 没有任何付费项目。你邀请的每个人都能使用同步、共享和实时协作编辑。
- 你服务器上的用户之间可以共享,但不能与 golemdocs.com 或其他服务器的账户共享。
- 由你来维护:更新,以及数据库和存储的备份。
应用和服务器采用 AGPL-3.0 许可:如果你为他人运行修改过的版本,请向他们提供源代码。Golem Docs 的名称和标志归本项目所有。