Hermes-agent: Inställning av headless server och fjärrskrivbord

Headless Hermes-server med fjärrskrivbordsåtkomst

Sidinnehåll

Att köra Hermes Agent på en headless-server samtidigt som du ansluter från en skrivbordsklient på en annan maskin kräver två serverprocesser och en enda klientanslutning.

Arkitekturen separerar Hermes backend i två serverprocesser och en klientbaserad yta. hermes serve-backenden hanterar API- och dashboard-anslutningar, medan hermes gateway run-processen hanterar meddelandekanaler oberoende. Skrivbordsklienten ansluter till serve-backenden, inte till gateway.

flowchart LR subgraph Server["HEADLESS SERVER"] serve["hermes serve
--host 0.0.0.0
:9119"] gateway["hermes gateway run
Telegram, Discord, Slack"] end subgraph Client["DESKTOP PC"] desktop["hermes desktop
(WebSocket-anslutning)"] end desktop <--->|WebSocket| serve gateway -.->|Delar ~/.hermes/| serve

Två processer på servern, en app på klienten. Båda serverprocesserna delar samma ~/.hermes/-konfiguration, färdigheter, minne och sessioner. Cron-jobb körs på servern där gateway körs.

Hermes Agent headless server architecture

För installation, leverantörsinställningar och initial konfiguration, börja med Hermes AI Assistant — Install, Setup, Workflow, and Troubleshooting.

Ställ in headless-servern

1. Konfigurera autentisering

Basic auth tillger tillräckligt skydd för ett betrodd LAN. Lägg till inloggningsuppgifter i miljöfilen:

cat >> ~/.hermes/.env << 'EOF'
HERMES_DASHBOARD_BASIC_AUTH_USERNAME=admin
HERMES_DASHBOARD_BASIC_AUTH_PASSWORD=välj-ett-starkt-lösenord
HERMES_DASHBOARD_BASIC_AUTH_SECRET=$(openssl rand -base64 32)
EOF
chmod 600 ~/.hermes/.env

.env-filen finns bredvid config.yaml under ~/.hermes/. Hermes löser konfiguration med CLI-överkryddningar först, sedan config.yaml, sedan .env, och slutligen inbyggda standardvärden. Hemligheter ska finnas i .env.

2. Starta backenden

Kör serve-backenden på alla gränssnitt:

hermes serve --host 0.0.0.0 --port 9119

Backenden lyssnar på port 9119 och accepterar WebSocket-anslutningar från skrivbordsklienten. Verifiera att den körs med en snabb statuskontroll:

curl -s http://localhost:9119/api/status | jq '.auth_required, .auth_providers'
# Förväntat: true  "basic"

3. Kör som en systemd-tjänst

För en persistent server som överlever omstart, installera en användarnivå systemd-tjänst. Skapa enhetsfilen på /etc/systemd/user/hermes-serve.service:

[Unit]
Description=Hermes Agent Serve Backend

[Service]
EnvironmentFile=%h/.hermes/.env
ExecStart=/home/rg/.hermes/hermes-agent/venv/bin/python -m hermes_cli.main serve --host 0.0.0.0 --port 9119
Restart=on-failure

[Install]
WantedBy=default.target

Ladda om daemon, aktivera tjänsten och starta den:

systemctl --user daemon-reload
systemctl --user enable hermes-serve
systemctl --user start hermes-serve

Kontrollera tjänstens status:

systemctl --user status hermes-serve

4. Starta gateway

Gateway är en separat process som hanterar meddelandekanaler — Telegram, Discord, Slack och andra. Starta den oberoende:

hermes gateway run

Gateway och serve-backenden är två separata processer. Gateway hanterar sessioner, kör cron-jobb och routar meddelanden. Serve-backenden tillhandahåller API-ytan för skrivbords- och webdashboard-anslutningar. De delar samma hemkatalog men körs oberoende.

För den fullständiga listan över gateway-kommandon och subkommandon, se Hermes Agent CLI cheat sheet. Om ditt primära gränssnitt är mobilmeddelanden, kombinera denna installation med Hermes Voice Control from Your Phone för röstfirst-workflows ovanpå samma gateway-process.

5. Verifiera backenden

Bekräfta att backenden svarar och att autentisering är aktiv:

curl -s http://localhost:9119/api/status | jq '.auth_required, .auth_providers'

Förväntad utdata:

true
"basic"

Om autentisering inte är aktiverad kommer svaret att visa false för auth_required. Kontrollera att .env-filen innehåller korrekta variabler och att tjänsten har startats om efter konfigurationsändringar.

Anslut från skrivbordsklienten

Alternativ A: Hermes Desktop-app

Installera Hermes Desktop från officiella webbplatsen. Starta appen, navigera till Inställningar → Gateway → Remote gateway, och ange serveradressen:

http://<server-ip>:9119

Logga in med användarnamnet och lösenordet du konfigurerat på servern.

Alternativt, ställ in den fjrra URL:n via miljövariabel:

HERMES_DESKTOP_REMOTE_URL=http://<server-ip>:9119 hermes desktop

Alternativ B: Webdashboard

Öppna http://<server-ip>:9119 i en webbläsare och logga in med basic auth-uppgifterna. Webdashboardet tillhandahåller ett webbläsarbaserat gränssnitt till Hermes backenden utan att kräva en skrivbordsinstallation.

Alternativ C: CLI

Från skrivbordsdatorns terminal, konfigurera den fjrra URL:n via skrivbordsappens inställningar eller HERMES_DESKTOP_REMOTE_URL-miljövariabeln. CLI-ytan ansluter genom samma WebSocket-kanal som skrivbordsappen.

Nätverks- och säkerhetsaspekter

Scenario Rekommendation
Betrodd LAN --host 0.0.0.0 + basic auth
Exponerad mot internet Använd Tailscale (--host <tailscale-ip>) eller OAuth-leverantör
Firewall Öppna port 9119 TCP på servern

För ett betrodd lokalt nätverk är basic auth på 0.0.0.0 tillräckligt. Om servern är exponerad mot internet, använd Tailscale för att binda till Tailscale-IP istället för 0.0.0.0, eller konfigurera en OAuth-leverantör för starkare autentisering. Öppna alltid port 9119 TCP i serverns firewall när backenden behöver acceptera externa anslutningar.

Viktiga processdistinktioner

Att förstå separationen mellan de två serverprocesserna förhindrar vanliga konfigurationsfel:

  • hermes serve — Backenden som skrivbordsappen och webdashboardet ansluter till. Hanterar API-ytan och WebSocket-anslutningar.
  • hermes gateway run — Processen som hanterar Telegram, Discord, Slack och andra meddelandekanaler. Hanterar sessioner, kör cron-jobb och routar meddelanden.
  • Dessa är två separata processer på servern. De delar ~/.hermes/-konfiguration, färdigheter, minne och sessioner, men körs oberoende.
  • Cron-jobb körs på servern där gateway körs.
  • Profiler, färdigheter och minne konfigureras på serversidan. Klienten ansluter till den redan konfigurerade backenden.

För profilfirst-konfiguration och färdigheter avpassade för olika produktionsroller, se Hermes AI Assistant Skills for Real Production Setups.

Felsökning

Skrivbordet kan inte ansluta till servern

  1. Verifiera att backenden körs: systemctl --user status hermes-serve
  2. Kontrollera att porten är öppen: ss -tlnp | grep 9119
  3. Testa från servern: curl -s http://localhost:9119/api/status
  4. Testa från klientmaskinen: curl -s http://<server-ip>:9119/api/status
  5. Om klienttestet misslyckas, kontrollera firewall-regler: sudo ufw status eller sudo iptables -L

Autentisering misslyckas

  1. Bekräfta att .env-filen har korrekta behörigheter: ls -la ~/.hermes/.env (ska vara 600)
  2. Verifiera att hemligheten genererades: grep HERMES_DASHBOARD_BASIC_AUTH_SECRET ~/.hermes/.env
  3. Starta om tjänsten efter konfigurationsändringar: systemctl --user restart hermes-serve

Gateway svarar inte på meddelanden

Gateway är en separat process från backenden. Om skrivbordet ansluter men plattformar för meddelanden inte fungerar:

  1. Kontrollera gateway-status: hermes gateway status
  2. Starta gateway om den är stoppad: hermes gateway start
  3. Granska loggar: hermes logs gateway -f

Referenser

Denna artikel är en del av AI Systems-klustret, som täcker self-hosted assistants, retrieval-arkitektur, lokal LLM-infrastruktur och observability.

Prenumerera

Få nya inlägg om system, infrastruktur och AI-ingenjörskonst.