Skip to content

在 Hetzner、Vultr 或 Linode 上部署 Potato

用 potato deploy 把 Potato 标注研究放到 Hetzner、Vultr 或 Linode 虚拟机上,每月约 €6 起,带 HTTPS 和重启后保留的磁盘。

potato deploy up --provider hetzner 把一项标注研究放到一台 Hetzner Cloud 虚拟机上,每月约 €6,是 Potato 付费虚拟机目标中默认价格最低的。--provider vultr 和 --provider linode 在 Vultr 和 Akamai 旗下的 Linode 上做同样的事,每月分别为 $10 和 $12。它们都是普通的虚拟机,磁盘在重启后保留,所以研究可以在上面运行数周而不需要备份服务。Potato 以相同的方式设置这三家:防火墙只开放 22、80 和 443 端口,安装 Docker,配置带 Let's Encrypt 证书的 Caddy Web 服务器,并把 Potato 作为系统服务运行。本页需要 Potato 2.10 或更高版本,以及一份你已经用 potato start 运行过的配置。

在三家之间选择

三家的区别在于价格、内存、计费货币,以及机器默认运行的地点。下表列出不传 --size 时 Potato 创建的规格,以及它打印的每月价格:

--provider hetzner--provider vultr--provider linode
默认规格cx23,2 vCPU、4 GBvc2-1c-2gb,1 vCPU、2 GBg6-standard-1,1 vCPU、2 GB
每月价格约 €6,含 IPv4 地址$10$12
默认地点nbg1,纽伦堡ewr,新泽西us-east,纽瓦克
令牌变量HCLOUD_TOKENVULTR_API_KEYLINODE_TOKEN

同样的价格下 Hetzner 给的内存最多,而 Potato 把项目集放在内存里,所以 Hetzner 适合预算不多、语料很大的情况。Hetzner 由一家德国公司以欧元计费,有些机构的采购规定不允许这样做。Vultr 和 Linode 以美元计费。

创建 API 令牌

每个提供商都用一个 API 令牌进行身份验证,令牌在它的控制台中创建,然后放进你的环境变量:

  • Hetzner。 在 Hetzner Cloud 控制台中打开项目的 Security 部分,创建一个有读写权限的 API 令牌。
  • Vultr。 在 Vultr 控制台中创建一个 API 密钥,并把你机器的 IP 地址加入该密钥的访问控制列表,否则 Vultr 会拒绝每一个请求。
  • Linode。 创建一个个人访问令牌,授予对 Linodes、Firewalls 和 Volumes 的读写权限。

安装部署 extra,导出令牌,并检查 Potato 能否使用它:

bash
pip install 'potato-annotation[deploy]'
export HCLOUD_TOKEN=...
potato deploy providers --verify

决定谁可以登录

potato deploy 不会改动你的登录设置,而机器的地址是公开的。如果配置允许任何人注册,下面的试运行会报告警告 D003,“Anyone who finds the URL can register and annotate.”(任何找到这个 URL 的人都能注册并标注。)对众包研究来说,开放注册通常是有意为之。对于实名标注者,请在部署之前把他们列在 user_config.users 下并设置 allow_all_users: false(密码管理),或者让他们通过 Google、GitHub 或你所在机构登录(SSO 与 OAuth 认证)。

检查计划并部署

试运行不需要账号,也不创建任何东西。它会打印每一步、估算费用,以及配置中任何有风险的设置:

bash
potato deploy up myproject/config.yaml --provider hetzner --dry-run
potato deploy up myproject/config.yaml --provider hetzner

第二条命令会在你确认计划后进行部署。最后它会打印 URL(机器 IP 上的一个 https:// 地址)以及管理员密钥文件的路径,也就是配置旁边的 .potato/secrets.json。用管理员密钥可以打开 /admin 上的管理仪表板。修改配置后再次运行 up,会把新版本上传到同一台机器。研究期间,potato deploy logs myproject/config.yaml -f 在这三家上都能持续输出服务器日志。

--region 和 --size 改变地点和机器,--volume-gb 为任务数据另加一块磁盘。Hetzner 的 cx 机型只在它的欧洲地点出售,所以部署到它在美国的地点 ash 和 hil 时,需要用 --size 传入一个 cpx 机型。如果所选地点不出售该机型,Potato 会在创建任何东西之前停下,并列出出售该机型的地点。

没有域名时的证书

没有域名时,Let's Encrypt 会为机器的 IP 地址签发证书。证书有效期约六天,会自动续期。续期失败时 potato deploy status 会报告出来,所以如果研究在无人看管的情况下运行,请每隔几天检查一次。要使用自己的域名,请把一条 DNS A 记录指向机器的 IP,然后加上 --domain annotate.example.edu 重新部署。Let's Encrypt 账号使用你 git config user.email 中的地址作为联系邮箱,--acme-email 可以另行指定。

各提供商的细节

Linode 在创建机器时要求设置 root 密码,即使已经提供了 SSH 密钥也一样。Potato 会生成一个密码,存放在 .potato/secrets.json 中,并关闭 SSH 的密码登录,所以这个密码无法用来登录。在 Vultr 上,--volume-gb 添加的单独磁盘会在机器启动后才挂接,设置过程会等到设备出现,再进行格式化和挂载。

结束研究

标注存放在机器的磁盘上,磁盘会随机器一起删除。请先把标注拉取到你自己的电脑上并检查,然后再删除服务器:

bash
potato deploy pull myproject/config.yaml
potato deploy destroy myproject/config.yaml

pull 把部署收集到的全部内容写入一个新的 potato-pull-<name>-<timestamp> 目录,并用 SQLite 的备份命令复制数据库。destroy 不会在从未拉取过的部署上运行。

延伸阅读