部署
本頁說明以 Release 執行檔或 systemd 常駐執行 go-pve-qemu 時,工作目錄需要具備哪些檔案。
工作目錄需求
服務所有相對路徑都以啟動時的工作目錄為基準:
| 路徑 | 用途 | 缺少時 |
|---|---|---|
.env |
環境變數 | 僅警告,改讀行程環境變數 |
sh/ |
以 /sh/* 對外提供 OS 初始化腳本 |
新 VM 下載腳本失敗,SSH 初始化階段中止並清除 VM |
.go_qemu_disabled |
停用清單 | VM 清單與狀態檢查全部失敗 |
.go_qemu_pubkey_admin |
額外注入的管理者公鑰 | 略過 |
.go_qemu_cpu_type |
CPU 類型快取 | 首次建立 VM 時自動產生 |
新 VM 透過 http://<NODE_{MAIN_NODE}>:<PORT>/sh/<os>_<version>.sh 下載腳本,因此 VM 網段必須能連到主節點的 PORT。
Release 執行檔
推送 v* tag 時,GitHub Actions 在 ubuntu-latest 以 Go 1.25 執行 go build -o app ./cmd/api,並將 app 打包為 go-pve-qemu@<tag>.tar.gz 附加到該 Release。
git clone https://github.com/pardnchiu/go-pve-qemu.git /opt/go-pve-qemu
cd /opt/go-pve-qemu
curl -fsSL -o release.tar.gz \
"https://github.com/pardnchiu/go-pve-qemu/releases/download/<tag>/go-pve-qemu@<tag>.tar.gz"
tar -xzf release.tar.gz
cp .env.example .env
touch .go_qemu_disabled
./app
clone 是為了取得 sh/ 腳本與 .env.example;執行檔本身不內嵌這些檔案。
systemd 常駐
[Unit]
Description=go-pve-qemu API
After=network-online.target
[Service]
User=root
WorkingDirectory=/opt/go-pve-qemu
ExecStart=/opt/go-pve-qemu/go-pve-qemu
Restart=on-failure
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable --now go-pve-qemu
journalctl -u go-pve-qemu -f
WorkingDirectory 必須指向含 sh/ 與 .env 的目錄;User=root 是 qm/pvesh 與節點間 SSH 的前提。
升級
- 取得新版執行檔(重新建置或下載新 Release)
git pull更新sh/腳本systemctl restart go-pve-qemu
節點硬體更換後刪除 .go_qemu_cpu_type,下次建立 VM 會重新偵測 CPU 基準。