在 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 GB | vc2-1c-2gb,1 vCPU、2 GB | g6-standard-1,1 vCPU、2 GB |
| 每月價格 | 約 €6,含 IPv4 地址 | $10 | $12 |
| 預設地點 | nbg1,紐倫堡 | ewr,紐澤西 | us-east,紐瓦克 |
| 令牌變數 | HCLOUD_TOKEN | VULTR_API_KEY | LINODE_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 能否使用它:
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 認證)。
檢查計劃並部署
試執行不需要賬號,也不建立任何東西。它會列印每一步、估算費用,以及配置中任何有風險的設定:
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 新增的單獨磁碟會在機器啟動後才掛接,設定過程會等到裝置出現,再進行格式化和掛載。
結束研究
標註存放在機器的磁碟上,磁碟會隨機器一起刪除。請先把標註拉取到你自己的電腦上並檢查,然後再刪除伺服器:
potato deploy pull myproject/config.yaml
potato deploy destroy myproject/config.yamlpull 把部署收集到的全部內容寫入一個新的 potato-pull-<name>-<timestamp> 目錄,並用 SQLite 的備份命令複製資料庫。destroy 不會在從未拉取過的部署上執行。
延伸閱讀
- 在本地或雲端執行 Potato:其他雲端目標,包括 DigitalOcean
- 部署標註伺服器:如何選擇主機
- 虛擬機器提供商參考