跳到主要内容

指南

自托管

你可以在自己的服务器上运行 Oloproof 工作台:本地机房、私有云,或加拿大的云服务商均可。 deploy/self-hosted/ 中的套件运行与 oloproof.com 相同的两个镜像(web 和 worker)以及 PostgreSQL,均按摘要拉取。你的数据留在你运行它的地方,不会向 Oloproof 发送任何内容。

要求

  • 一台装有 Docker Engine 和 Compose 插件的 Linux 主机。一个团队用 4 GB 内存和 2 个 CPU 即可; worker 上限为 1.5 GB,web 为 768 MB。
  • 供 PostgreSQL 使用的磁盘。你推送的每次运行都存放在那里。
  • 用于 HTTPS 的反向代理(Caddyfile.example 是一个可用的示例;nginx 也可以)。
  • 能访问 ghcr.io/etobicoke/oloproof,或已将镜像复制到你自己的镜像仓库。

安装

cd deploy/self-hosted
sh generate-env.sh          # writes .env and fills every secret

在 .env 中设置 OLOPROOF_WEB_IMAGE、OLOPROOF_WORKER_IMAGE(均为 ...@sha256: 摘要)和 OLOPROOF_PUBLIC_URL,并至少提供一种登录方式:用于密码账户的邮件(OLOPROOF_MAIL_FROM 加上 OLOPROOF_SMTP_URL 或 OLOPROOF_RESEND_API_KEY),或一个 OAuth 提供方。两者都没有时 web 拒绝启动。然后启动它:

docker compose --env-file .env up -d
curl -fsS http://127.0.0.1:3000/api/health

migrate 服务会在 web 和 worker 启动前把数据库更新到最新。注册采用邀请制,邀请通过 OLOPROOF_OPERATOR_TOKEN 发放(deploy/README.md,“Signup”)。

配置

.env.example 列出 web 和 worker 读取的每个变量,并逐一标明必填、自动生成或可选。可选变量留空即关闭对应功能。请保留生成的密钥:换新的数据库密码会把你挡在数据库之外,换新的签名密钥则会开始一个新的签名者。自托管套件没有计费,因此每个工作区都使用免费层的每月用例数;请为你的团队调高 OLOPROOF_FREE_TIER_PUSHED_MONTHLY 和 OLOPROOF_FREE_TIER_MANAGED_MONTHLY。

默认不访问外部网络

该栈不发送遥测数据,也不调用任何 Oloproof 服务。它只为你开启的功能访问网络:邮件(你网络内的 SMTP 中继,或 Resend)、OAuth 登录、Turnstile,以及工作区存有密钥的模型提供方。这些都不设置时,它在没有任何出站路由的情况下运行。对于物理隔离的主机,请把三个镜像复制到你自己的镜像仓库,并让镜像变量指向它。密码账户需要邮件,因此在隔离网络中请把 OLOPROOF_SMTP_URL 设为网络内部的中继。

备份

sh backup.sh /srv/backups/oloproof

backup.sh 会把压缩的 pg_dump 写入你选择的目录。用 cron 或 systemd 定时器安排执行,并自行把该目录复制到主机之外。脚本会显示恢复命令。

转储不包含 .env,而 .env 保存着 OLOPROOF_CONTENT_KEY 和其他生成的密钥:没有它,恢复的数据库无法读取其加密内容。请在创建 .env 时以及每次修改后备份它,与转储分开并离线保存(密码管理器或加密磁盘),切勿放在转储旁边。

升级

把新版本的两个摘要写入 .env,然后运行:

sh upgrade.sh /srv/backups/oloproof

它会备份、拉取、迁移并重启 web 和 worker。会有短暂中断。如需回滚,写回之前的摘要并恢复它做的备份。

支持范围

  • 单台主机。没有高可用:栈的可用性取决于它所在的机器。
  • 数据驻留在你运行它的地方。Oloproof 不持有你的任何数据。
  • 没有零停机发布。那只属于托管服务。
  • 套件由 deploy/self-hosted/check.sh 检查:它以独立的项目名启动套件,等待 /api/health,获取公开页面,然后将其移除。