部落格

如何讓 Hermes Agent 在伺服器上全天候運作

Markdown

如何讓 Hermes Agent 在伺服器上 24/7 持續運作:在沒有瀏覽器的 VPS 上安裝、將閘道作為系統服務執行、重新開機後自動啟動、linger,以及 Docker。

閱讀全文

在筆記型電腦上安裝 Hermes Agent 後,可能會冒出一個問題:筆電闔上時,誰會在 Telegram 上回覆訊息、整理早晨摘要?在你的桌邊,只有電腦開著時,代理才會運作。若要讓機器人一直保持上線,並讓排程工作自行執行,就必須把代理移到伺服器上。

以下說明如何在一般 Linux 伺服器上安裝 Hermes、將閘道設為持續執行並在重新開機後自動啟動的服務,以及如何限制存取,避免陌生人進入終端機。本指南參考官方文件。

如果你還沒安裝 Hermes,請先閱讀另一篇概覽,了解這個代理是什麼,以及如何安裝。本指南假設你已經在自己的機器上啟動它,只說明如何將它移到伺服器上。

Ailoot 的使用資訊請參閱文件。

為什麼要把 Hermes Agent 從筆記型電腦移到伺服器?

重點

個人電腦只有在你待在附近且保持開機時才能運作。若要全天候運作,就需要伺服器:即使你的電腦關機,Telegram 機器人仍會回覆,排程工作也會自行執行。只有在這種情況下才需要伺服器;平常使用代理時,筆記型電腦就足夠了。

在筆記型電腦上,只有螢幕掀開、你也在附近時,Hermes 才會運作。闔上螢幕,機器人就安靜下來;早晨摘要也不會送達。對於「在通訊軟體上回覆他人,並按照排程處理事情」這種任務來說,這可不理想。

伺服器的不同之處就在這裡:它不會休眠,也不依賴其他設備。你在伺服器上安裝同一個 Hermes,之後它就能自行運作:凌晨三點在 Telegram 上回覆訊息、每天早晨整理你關注主題的新聞,並在每次執行之間保留工作階段。

如果你有要交給代理持續處理的工作,就適合把它移到伺服器上:為自己或團隊打造的機器人、早晨摘要、自動回覆,或定期處理文件。如果你只是在特定專案中試用 Hermes,而且會待在附近,就暫時不需要伺服器;那只會多一道步驟。

在 VPS 上安裝 Hermes 前要準備什麼?

重點

你需要一台可透過 SSH 存取的 Linux 伺服器(官方團隊會在全新安裝的 Ubuntu 上測試)、事先選好的模型,並了解代理在伺服器上通常不需要瀏覽器。若要無人值守地運作,透過 Nous Portal 存取模型最方便:OAuth 登入會自動更新,因此權杖過期不會讓服務在夜間中斷。

安裝前先準備好三樣東西。

伺服器。 一般的 Linux VPS 就可以。文件列出的第一級支援平台是 Linux 和 WSL2,測試則使用最新版本的 Ubuntu。只要系統具備 glibc、systemd 和常見的目錄配置,Hermes 就能正確安裝。這在伺服器上很重要,因為以下所有自動啟動步驟都依賴 systemd,而 Ubuntu 和 Debian 都內建了 systemd。

SSH 存取權。 你會透過 SSH 從終端機連線到伺服器,不會在那裡使用滑鼠。以下所有命令都會在這個 SSH 工作階段中執行。如果你會 vibe coding,但還不太熟悉終端機,別擔心:命令只有幾個,而且可以逐行完整複製。

選好的模型。 代理不會自行思考,而是呼叫模型。對於不需你看顧的伺服器,模型存取權不會過期非常重要。最簡單的選項是透過 hermes setup --portal 使用 Nous Portal 訂閱:登入採用 OAuth,權杖會自動更新。你也可以使用自己的 API 金鑰,但要確認帳戶裡有餘額;沒有餘額的無頭代理只會停止回應。模型的上下文視窗至少必須有 64,000 個權杖,否則 Hermes 會拒絕使用該模型啟動。清單中的所有雲端模型都符合這項要求。

注意

官方文件沒有提供選擇 VPS 或最低資源需求的確切數字,因此這裡也不提供確切數字。根據所描述的經驗,搭載機器人與排程的閘道只需要一台規格普通的機器,因為繁重的運算是在模型端進行。伺服器本身的負載很低。瀏覽器自動化是最耗資源的部分,但在伺服器上通常用不到(稍後會再說明)。

如何用一個命令在伺服器上安裝 Hermes Agent?

重點

透過 SSH 連線到伺服器,執行略過伺服器上瀏覽器的安裝程式旗標:curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash -s -- --skip-browser。接著重新啟動終端機 shell,並使用 hermes setup --portal 選擇模型。使用 hermes doctor 檢查安裝狀態。

在伺服器上安裝的方式幾乎和筆記型電腦相同,只有一個差異:代理通常不需要瀏覽器。瀏覽器自動化還會帶入體積龐大的 Chromium,因此要使用 --skip-browser 旗標。

  1. 透過 SSH 連線到伺服器

    ssh root@your-server-address
    

    接下來所有命令都要在這個工作階段中,直接於伺服器上執行。

  2. 執行不安裝瀏覽器的安裝程式

    curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash -s -- --skip-browser
    

    指令碼會下載所需環境並安裝 hermes 命令。--skip-browser 旗標會略過瀏覽器自動化的安裝;在沒有圖形介面的伺服器上,安裝它只會佔用空間。之後若需要瀏覽器,可以另外安裝。

  3. 重新啟動 shell 並選擇模型

    source ~/.bashrc
    hermes setup --portal
    

    第一行會載入新的 PATH,讓系統找得到 hermes 命令。第二行會開啟 Nous Portal 登入流程:確認登入後,代理就能使用模型與服務,不必為每項服務另外準備金鑰。

  4. 檢查安裝狀態

    hermes doctor
    

    此命令會顯示已安裝的項目、缺少的項目,以及修正方法。綠色標記代表一切就緒。

新增機器人和排程之前,先在伺服器上直接完成一次正常對話:執行 hermes,並交給它一個答案可以驗證的簡單任務。文件明確建議,在一般對話正常運作前,不要一股腦加入各種功能;這是很好的建議。

如何讓 Hermes 全天候運作?

重點

先用 hermes gateway setup 設定閘道並連接 Telegram。接著用一個命令將閘道設為服務:hermes gateway install 會安裝使用者服務,sudo hermes gateway install --system 則會安裝在伺服器開機時啟動的系統服務。使用者服務用 hermes gateway start、stop 和 status;VPS 系統服務的每次檢查與變更,都要保留明確的 --system 範圍及必要權限。

閘道是單一的 Hermes 背景程序,負責維持與所有通訊軟體的連線、管理工作階段,以及執行排程工作。所有全天候運作都圍繞著它進行。目標是讓這個程序自動啟動並持續運作。

先設定閘道並連接通訊軟體:

hermes gateway setup

設定精靈會引導你設定平台,並協助輸入機器人權杖和存取清單。Telegram 的連線步驟(使用 BotFather 建立機器人、查出你的 ID,並輸入權杖)已在主要安裝指南中說明,這裡就不再重複。

接下來是最常被忘記的陷阱。如果你只執行 hermes gateway,程序就只會在 SSH 工作階段開啟時運作。關閉終端機,閘道就會停止。若要讓它持續運作,就必須交由系統管理。只需要一個命令:

hermes gateway install

這會將閘道安裝為服務:Linux 使用者 systemd 服務,macOS 則透過 launchd。系統會監控程序,若程序當掉就會重新啟動。

在伺服器上,通常需要使用另一種選項:在任何使用者登入前,於機器開機時啟動的系統服務:

sudo hermes gateway install --system

這正是 VPS 所需的設定:伺服器重新開機後,服務會自行啟動,機器人也會重新上線。你可以使用以下簡單命令管理服務:

hermes gateway start     # start
hermes gateway stop      # stop
hermes gateway status    # check status

若要操作系統服務,請在這些命令前加上 sudo,並加上 --system 旗標。若沒有這些參數,命令操作的會是使用者服務,而不是開機時啟動的服務:

sudo hermes gateway start --system
sudo hermes gateway stop --system
sudo hermes gateway status --system

為什麼需要 linger?不設定會有什麼問題?

重點

如果你把閘道安裝為使用者服務(未加上 --system),systemd 會在你離開 SSH 後停止服務,開機時也不會啟動。執行一個命令即可修正:sudo loginctl enable-linger username。之後服務就能獨立於你的登入與登出持續運作。

這是最常見的絆腳石:你安裝了服務,但機器人到了晚上仍然停止回應。原因在於 Linux 使用者服務的運作方式。

使用者 systemd 服務預設會綁定你的工作階段。你透過 SSH 連線時,使用者管理器就會啟動,服務也隨之運作。你登出後,系統會認定該使用者已停用,因此也會一起關閉該使用者的服務,包括閘道。若你會反覆登入和登出伺服器,這就會造成問題:只有在 SSH 連線期間,機器人才會上線。

你可以啟用 linger 模式來解決這個問題。它能讓系統在使用者未登入時,仍持續執行使用者管理器:

sudo loginctl enable-linger username

執行此命令後,使用者服務就會自行運作,並在伺服器開機時啟動,不必等你登入。若未啟用 linger,系統就會恢復原本的行為:你離開 SSH 後閘道就會停止,開機時也不會啟動。文件明確指出了這一點。

注意

這不適用於系統服務(使用 sudo hermes gateway install --system 安裝):系統服務已在整台機器的層級執行,並會在開機時啟動。只有使用者服務需要 linger。請擇一使用:系統服務,或啟用 linger 的使用者服務。

如何透過 Docker 在伺服器上執行 Hermes,並自動重新啟動?

重點

如果你偏好 Docker,可以在容器中讓 Hermes 以持續運作的閘道形式執行:docker run -d --name hermes --restart unless-stopped -v ~/.hermes:/opt/data -p 8642:8642 nousresearch/hermes-agent gateway run。--restart unless-stopped 旗標會在重新開機後重新啟動容器,而映像檔中的閘道程序若當掉,也會重新啟動。

Docker 也是讓代理持續在伺服器上運作的有效方法,尤其適合已熟悉容器,或想將代理與主系統隔離的情況。先使用 docker run ... setup 設定一次,再於背景啟動容器:

docker run -d \
  --name hermes \
  --restart unless-stopped \
  -v ~/.hermes:/opt/data \
  -p 8642:8642 \
  nousresearch/hermes-agent gateway run

以下是負責全天候運作的各行命令的作用:

  • -d — 容器會在背景執行,不會讓終端機保持開啟。
  • --restart unless-stopped — 伺服器重新開機或發生當機後,Docker 會重新啟動容器。只有在你手動停止容器時才不會重新啟動。
  • -v ~/.hermes:/opt/data — 設定、金鑰、工作階段和記憶會保存在伺服器上、容器外部,即使重新建立容器也會保留。

映像檔還有另一層保護:閘道程序由 s6 監督程式管理。若閘道當掉,程序會在幾秒內重新啟動,容器本身則不受影響。這是雙重保護:Docker 從外部讓容器保持運作,s6 則監控容器內的程序。

使用 Docker 有一點差異要記住:這類安裝方式無法透過 hermes update 命令更新。要在 Docker 中更新,就必須換成新的映像檔:下載最新版並重新建立容器。

如何確認一切正常,並且重新開機後仍會運作?

重點

使用 systemctl 檢查服務狀態,並查看即時記錄。接著進行最重要的伺服器測試:重新啟動機器,確認機器人會自行恢復上線。Hermes 的工作階段和回覆在重新啟動後會保留;未完成的回覆會在恢復後送出。

使用者服務的狀態與記錄可用以下方式檢查:

hermes gateway status
journalctl --user -u hermes-gateway -f

VPS 建議的系統服務應改查系統範圍:

sudo hermes gateway status --system
sudo journalctl -u hermes-gateway -f

第一個指令檢查所選服務,第二個追蹤相同範圍日誌。這些 unit 名稱適用預設 ~/.hermes;其他 Hermes home 的 unit 可能帶後綴,請依 status 輸出使用確切名稱。不要測系統安裝卻監看使用者 unit。Hermes 記錄檔位於 ~/.hermes/logs/,秘密資訊會自動遮蔽,因此可以安全地傳給支援人員。

現在重新啟動伺服器,確認代理會自行恢復。這是最重要的伺服器測試,卻也是人們最容易忘記的步驟:

sudo reboot

等伺服器重新可連線後,透過 SSH 登入。系統安裝檢查 sudo hermes gateway status --system 與系統 journal;啟用 linger 的使用者安裝,則查 hermes gateway status 與使用者 journal,再透過 Telegram 傳訊息給機器人。如果它能在你不做任何操作的情況下回覆,就代表自動啟動設定正確。這就是整套設定的目的。

不用擔心對話會遺失。Hermes 會將工作階段寫入磁碟,即使閘道重新啟動也會保留。此外,如果閘道剛好在送出回覆時當掉,系統會在恢復後送出該回覆,而不是再次執行任務。這對全天候運作的機器人很重要:意外重新啟動不會中斷對話。

如何保護在伺服器上擁有終端機存取權的代理?

重點

三項主要防護措施:機器人預設不開放存取(只回覆存取清單上的人)、代理在執行危險命令前會先詢問,以及若要完全隔離,可在伺服器上的 Docker 沙箱中執行代理。最好不要在伺服器上啟用免確認模式(YOLO)。

在伺服器上執行的代理,是一個能存取終端機、且無人監督時仍會持續運作的程式。請先檢查以下三項設定。

限制機器人的存取。 預設情況下,閘道只會回覆存取清單上的人,或是在私人訊息中完成代碼連結的人。對於能存取終端機的機器人來說,這是正確的行為:陌生人傳訊息給機器人也無法做任何事。存取清單使用數字 ID 設定,例如 Telegram:

TELEGRAM_ALLOWED_USERS=123456789,987654321

危險命令的執行確認。 執行破壞性操作前,代理會先徵求你的許可。YOLO 模式可以停用確認;最好不要在無人看管的伺服器上啟用。確認機制正是為了避免在你不知情的情況下發生無法復原的操作。

完全隔離用的沙箱。 若要讓代理無法接觸伺服器的主系統,請在 Docker 容器中執行它的命令:

hermes config set terminal.backend docker

之後,代理在終端機中進行的所有操作都會在隔離的沙箱內執行,無法存取正在運作的伺服器。讓代理自主執行任務時,這是合理的防護措施。

如果機器人沒有回應,或閘道當掉,該怎麼辦?

重點

先檢查服務狀態和記錄;問題通常出在機器人權杖、存取清單或模型。如果整個程序完全凍結,systemd 服務有看門狗計時器;當閘道停止回報運作狀態時,計時器會重新啟動閘道。

機器人停止回應時,依照以下順序處理。先檢查安裝的範圍:系統服務查 sudo hermes gateway status --system 與系統 journal;使用者服務查 hermes gateway status 與使用者 journal。如果閘道正在執行,但訊息沒有送達,幾乎總是平台設定出了問題:機器人權杖錯誤,或對方不在存取清單上。在同一 Hermes home 重新執行 hermes gateway setup,再以 hermes gateway status --system 檢查系統服務,或以 hermes gateway status 檢查使用者服務。設定成功不能證明正確 gateway 已執行。

如果模型傳回空白或奇怪的回覆,請使用 hermes model 檢查,並確認供應商與登入狀態。從「一切都壞了」恢復到正常運作的一般步驟是:hermes doctor、hermes model、hermes setup,之後系統安裝查 hermes gateway status --system,使用者安裝查 hermes gateway status。

另外還有一種罕見但令人困擾的情況:整個程序凍結,卻沒有真正當掉。systemd 服務有看門狗計時器:在 ~/.hermes/config.yaml 加上以下一行,然後重新安裝服務。

gateway:
  systemd_watchdog_seconds: 120
# VPS 系統服務;使用原先安裝時的同一 Hermes home:
sudo hermes gateway install --system --force
sudo hermes gateway status --system

若是使用者服務,只以 hermes gateway install --force 重新產生該範圍,並查 hermes gateway status。選一個範圍,不要為修復單一 gateway 而同時安裝兩種。

之後閘道會定期向系統發出「我還在運作」的訊號;如果訊號停止,systemd 就會自動重新啟動程序。這項功能只適用於使用 systemd 的 Linux,而且只處理程序凍結。伺服器和通訊軟體之間發生一般網路中斷時,看門狗計時器不會造成影響。

關於在伺服器上使用 Hermes Agent,還有哪些常見問題?

重點

快速回答常見問題:是否一定需要 VPS、能否在一台機器上執行多個機器人、伺服器是否需要圖形介面,以及代理移到伺服器上後排程工作會如何運作。

常見問題

我一定要租 VPS 嗎?自己的電腦可以嗎?

若要全天候運作,就需要一台永遠開著的機器。只要你願意永遠不關機,自己的電腦也能用。VPS 比較方便:它會一直開著,不受你正在工作或睡覺影響。一般 Linux 伺服器就可以;文件列出的第一級支援平台是 Linux,測試則使用全新安裝的 Ubuntu。

我可以在一台伺服器上執行多個機器人嗎?

可以。Hermes 支援設定檔,每個設定檔都有自己的服務。執行像是 <profile> gateway install 這樣的命令會建立名為 hermes-gateway-<profile> 的獨立服務,各自獨立運作。每個設定檔都有自己的設定、機器人權杖和記憶。

伺服器需要螢幕和圖形功能嗎?

不需要。伺服器可以在沒有螢幕的情況下運作,你可以透過終端機使用 SSH 管理它。這類伺服器上的代理通常不需要瀏覽器自動化,因此安裝程式要加上 --skip-browser 旗標;這會移除唯一需要圖形功能、且體積龐大的元件。

我不在時,排程工作還會執行嗎?

會,這正是移到伺服器的目的。同一個閘道會執行排程工作:每分鐘檢查一次排程,到時間就執行工作,再把結果傳送到同一個聊天室。由於閘道以服務形式全天候運作,排程會自行執行,不需要你介入。

更新後和伺服器重新開機後,機器人還會正常運作嗎?

會。設定、工作階段和記憶都儲存在 ~/.hermes 資料夾中,不會遺失。重新開機後,系統服務(或使用 --restart unless-stopped 的 Docker)會自行啟動閘道。未完成的回覆會在重新啟動後送出,不會遺失——不過,如果當機時回覆已經送出一半,它可能會再次送達,並附上可能重複的通知。

認識一下 Ailoot。

更多詳情

常見問題:如何讓 Hermes Agent 在伺服器上全天候運作

安裝系統服務後,為什麼 gateway 看起來仍像停止?

沒有指定範圍的檢查,可能查到另一個服務。系統安裝應用 hermes gateway status --system 與系統 journal;只有使用者服務才用未指定範圍的狀態指令與使用者 journal。全程保持同一 Hermes home。

VPS 系統服務需要 loginctl linger 嗎?

不需要。Linger 用於登出後仍要執行、開機就啟動的使用者 systemd 服務。系統服務原本就隨機器開機啟動;選定一種安裝範圍,重新開機後再檢查該服務及機器人回覆。

所有文章