Panduan Instalasi Hermes Agent: Deployment Aman dengan Telegram Gateway, Dashboard, Nginx, dan Caddy

Artikel ini membahas cara men-deploy Hermes Agent secara aman di server Linux untuk kebutuhan production.

Fokusnya bukan hanya membuat Hermes Agent bisa berjalan, tetapi memastikan setup-nya siap dipakai secara operasional: menggunakan user non-root, membatasi backend ke akses lokal, melindungi dashboard, menyimpan secrets dengan benar, dan menyediakan langkah verifikasi di setiap tahap.

Di dalam panduan ini, kita akan menyiapkan server, menginstal Hermes Agent, mengonfigurasi Telegram Gateway, mengaktifkan API dan dashboard lokal, lalu mengatur akses publik melalui Nginx atau Caddy. Panduan ini juga mencakup pemeriksaan operasional, backup, troubleshooting, dan checklist sebelum deployment masuk production.

Asumsi deployment

Panduan ini mengasumsikan:

  • Hermes Agent diinstal secara native di VPS atau server Linux.
  • Hermes berjalan menggunakan user Linux khusus, bukan root.
  • Hermes API hanya bind ke 127.0.0.1 secara default.
  • Akses publik masuk melalui Nginx, Caddy, VPN, Cloudflare Access, atau Cloudflare Tunnel.
  • Telegram Gateway berjalan sebagai service.
  • Secrets disimpan di ~/.hermes/.env, bukan di Git, dokumentasi, atau konfigurasi reverse proxy.
  • Dashboard atau Workspace UI dilindungi dengan autentikasi tambahan.

1. System Requirements

1.1 Spesifikasi Server Minimum

Untuk penggunaan ringan sampai menengah:

  • OS: Ubuntu Server 22.04/24.04 LTS atau Debian 12
  • CPU: minimal 2 vCPU
  • RAM: minimal 2 GB, direkomendasikan 4 GB+
  • Disk: minimal 20 GB, direkomendasikan 40 GB+
  • Network:
    • Public IP, akses VPN, atau Cloudflare Tunnel
    • Domain/subdomain jika ingin memakai HTTPS reverse proxy
  • User:
    • User non-root dengan akses sudo
    • Jangan menjalankan beban kerja Hermes harian sebagai root

1.2 Software yang Dibutuhkan

Paket dasar:

  • curl
  • git
  • python3
  • python3-venv
  • python3-pip
  • pipx atau Python virtual environment
  • systemd
  • nginx atau caddy
  • ufw atau firewall lain
  • fail2ban untuk hardening SSH dasar

Paket opsional:

  • nodejs dan npm jika menjalankan frontend/dashboard terpisah
  • docker dan Docker Compose jika memakai komponen UI berbasis container
  • cloudflared jika memakai Cloudflare Tunnel

1.3 Akun Eksternal dan API Access

Minimal butuh satu provider LLM yang didukung Hermes, misalnya:

  • OpenRouter
  • Anthropic
  • OpenAI
  • Gemini
  • DeepSeek
  • Kimi/Moonshot
  • Blackbox.ai atau provider lain yang kompatibel dengan OpenAI API
  • Provider lain yang didukung Hermes Agent

Untuk Telegram Gateway:

  • Telegram Bot Token dari @BotFather
  • Otorisasi user/chat Telegram melalui mekanisme pairing Hermes

2. System Preparation

2.1 Buat User Linux Khusus

Buat user khusus, misalnya hermes:

sudo adduser hermes
sudo usermod -aG sudo hermes

Masuk ke user tersebut:

su - hermes

Atau login langsung via SSH sebagai user hermes.


2.2 Update Paket Sistem

sudo apt update
sudo apt upgrade -y

Install dependency dasar:

sudo apt install -y \
  curl git ca-certificates gnupg lsb-release \
  python3 python3-venv python3-pip pipx \
  ufw fail2ban

Aktifkan path pipx:

pipx ensurepath

Logout lalu login ulang jika path shell belum berubah.


2.3 Basic Firewall Hardening

Untuk server publik:

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

Jika server hanya diakses melalui VPN/private network, batasi port 80/443 ke IP tepercaya bila memungkinkan.


2.4 SSH Hardening

Postur SSH yang direkomendasikan:

  • Gunakan SSH key, bukan password login.
  • Nonaktifkan root login.
  • Nonaktifkan password authentication jika semua admin sudah punya SSH key.
  • Aktifkan fail2ban.
  • Ubah port SSH hanya jika sesuai kebijakan operasional.

Edit konfigurasi SSH:

sudo nano /etc/ssh/sshd_config

Nilai yang direkomendasikan:

PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes

Restart SSH:

sudo systemctl restart ssh

Jaga satu sesi SSH tetap aktif saat menguji konfigurasi login baru.


2.5 Perencanaan Direktori dan Permission

Default Hermes home directory:

/home/hermes/.hermes/

Path penting:

~/.hermes/config.yaml
~/.hermes/.env
~/.hermes/logs/
~/.hermes/sessions/
~/.hermes/skills/
~/.hermes/plugins/
~/.hermes/auth.json

Permission yang direkomendasikan:

chmod 700 ~/.hermes
chmod 600 ~/.hermes/.env
chmod 600 ~/.hermes/config.yaml

3. Instalasi Step-by-Step

3.1 Install Hermes Agent

Install menggunakan installer resmi:

curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash

Reload shell:

exec $SHELL -l

Verifikasi instalasi:

hermes --version
hermes doctor

3.2 Jalankan Setup Wizard Awal

hermes setup

Konfigurasikan area berikut:

  • Model provider
  • API key atau provider authentication
  • Terminal backend
  • Gateway
  • Tools
  • Agent behavior

Kamu juga bisa langsung memakai model picker:

hermes model

3.3 Konfigurasi Model Provider

Prinsip keamanan:

  • Simpan API key di ~/.hermes/.env.
  • Jangan simpan secrets di dokumentasi, Git, Nginx config, atau Caddy config.
  • Gunakan model yang stabil untuk agentic workflow.
  • Uji model murah/gratis sebelum dipakai untuk workload tool-calling berat.

Cari path file environment:

hermes config env-path

Edit file environment:

nano ~/.hermes/.env

Contoh:

OPENROUTER_API_KEY=replace_with_your_key

Pilih provider/model:

hermes model

Validasi backend:

hermes chat -q "Respond with exactly OK." --quiet

Output yang diharapkan:

OK

3.4 Konfigurasi Security Hermes yang Direkomendasikan

Default awal yang aman:

hermes config set security.redact_secrets true
hermes config set privacy.redact_pii true
hermes config set approvals.mode manual

Catatan:

  • security.redact_secrets true membantu masking API key dan token di output tool.
  • privacy.redact_pii true membantu redaksi identitas user dalam konteks gateway.
  • approvals.mode manual paling aman untuk command berisiko.
  • Hindari --yolo pada server production.

Mode seimbang jika ingin lebih praktis:

hermes config set approvals.mode smart

Setelah perubahan config penting, restart gateway atau mulai session Hermes baru.


4. Konfigurasi Minimum Telegram Gateway

4.1 Buat Telegram Bot

Di Telegram:

  1. Buka @BotFather.
  2. Jalankan:
/newbot
  1. Ikuti instruksi.
  2. Simpan bot token dengan aman.

Format token biasanya seperti ini:

123456789:ABCDEF_xxxxx

Jangan share token ini.


4.2 Konfigurasi Telegram Gateway

Jalankan wizard gateway:

hermes gateway setup

Pilih Telegram dan masukkan bot token.

Alternatif: simpan token di ~/.hermes/.env:

TELEGRAM_BOT_TOKEN=replace_with_your_telegram_bot_token

4.3 Install Gateway sebagai Service

Install service gateway:

hermes gateway install

Start gateway:

hermes gateway start

Cek status gateway:

hermes gateway status

Jika terpasang sebagai system service:

systemctl status hermes-gateway.service --no-pager

Jika terpasang sebagai user service:

systemctl --user status hermes-gateway.service --no-pager

4.4 Otorisasi Telegram Pertama

Kirim pesan ke bot Telegram kamu.

Biasanya Hermes meminta pairing/approval sebelum chat baru bisa mengontrol agent. Di server, jalankan:

hermes pairing list
hermes pairing approve <request_id>

Setelah approved, tes dari Telegram:

/status
/help

4.5 Best Practice Security Telegram

Rekomendasi:

  • Jangan pernah expose bot token.
  • Gunakan pairing/approval; jangan allow semua user secara default.
  • Batasi toolset Telegram jika bot dipakai di group bersama.
  • Jangan aktifkan auto-approval untuk command destruktif.
  • Aktifkan secret redaction.
  • Review logs setelah setup.
  • Jalankan Hermes memakai user khusus non-root.

Useful checks:

hermes status --all
hermes tools list
tail -n 100 ~/.hermes/logs/gateway.log

5. Post-Install: API, Dashboard, dan Workspace

Komponen Hermes sebaiknya dipahami terpisah:

  1. Hermes Agent CLI: agent command-line lokal.
  2. Hermes Gateway/API: backend service untuk platform dan akses OpenAI-compatible.
  3. Telegram Gateway: adapter messaging.
  4. Dashboard/Workspace UI: web UI, monitoring, atau client layer.

Pisahkan layer ini saat troubleshooting.


5.1 Aktifkan Local API Server

Aktifkan API server untuk akses backend lokal, reverse proxy, Workspace, atau Open WebUI:

hermes config set API_SERVER_ENABLED true

Generate API key yang kuat:

openssl rand -hex 32

Set API key:

hermes config set API_SERVER_KEY "<generated_key>"

Bind lokal yang direkomendasikan:

hermes config set API_SERVER_HOST 127.0.0.1

Jangan bind langsung ke 0.0.0.0 kecuali kamu punya alasan jelas, HTTPS, dan autentikasi kuat.

Restart gateway:

hermes gateway restart

Verifikasi health:

curl -fsS http://127.0.0.1:8642/health

Contoh respons yang diharapkan:

{"status":"ok","platform":"hermes-agent"}

Verifikasi endpoint models:

curl -fsS \
  -H "Authorization: Bearer <API_SERVER_KEY>" \
  http://127.0.0.1:8642/v1/models

5.2 Menjalankan Dashboard

Jika command dashboard tersedia di instalasi Hermes kamu:

hermes dashboard

Desain deployment dashboard yang direkomendasikan:

  • Bind dashboard ke 127.0.0.1.
  • Expose melalui Nginx, Caddy, VPN, atau Cloudflare Access.
  • Tambahkan Basic Auth, SSO, VPN-only access, atau Cloudflare Access.
  • Jangan expose dashboard ke publik tanpa autentikasi.

Target dashboard lokal yang umum:

127.0.0.1:9119

Health check:

curl -fsS http://127.0.0.1:9119/api/status

5.3 Opsional: Workspace atau Open WebUI

Jika memakai Workspace atau Open WebUI:

  • Perlakukan UI sebagai client.
  • Tetap jadikan Hermes Gateway/API sebagai backend agent service.
  • Gunakan API URL internal:
http://127.0.0.1:8642/v1
  • Gunakan nilai yang sama dengan API_SERVER_KEY sebagai token/key API client.
  • Jangan expose Hermes API langsung tanpa HTTPS dan autentikasi.

Untuk UI berbasis Docker yang perlu mengakses host:

http://host.docker.internal:8642/v1

Di Docker Linux, mungkin perlu opsi:

--add-host=host.docker.internal:host-gateway

5.4 Checklist Verifikasi Post-Install

Jalankan:

hermes doctor
hermes config check
hermes status --all
hermes chat -q "Respond with exactly OK." --quiet
curl -fsS http://127.0.0.1:8642/health

Jika gateway berjalan dengan systemd:

systemctl status hermes-gateway.service --no-pager
journalctl -u hermes-gateway.service --since "10 minutes ago" --no-pager

Cek port:

sudo ss -tlnp | grep -E ':(8642|9119|3000|3001)\b'

Postur aman yang diharapkan:

127.0.0.1:8642    Hermes API
127.0.0.1:9119    Dashboard
0.0.0.0:80/443    Hanya Nginx atau Caddy

6. Reverse Proxy Menggunakan Nginx atau Caddy

6.1 Layout Domain yang Direkomendasikan

Contoh:

agent.example.com       -> Hermes API, opsional dan harus dilindungi
dashboard.example.com   -> Hermes Dashboard atau Workspace UI

Opsi yang lebih aman:

dashboard.example.com   -> UI saja, dilindungi
agent.example.com       -> tidak publik; hanya VPN/private access

Best practices:

  • Jangan expose /v1 ke publik kecuali memang diperlukan.
  • Jika API diexpose, wajib HTTPS, bearer token, rate limit, dan IP allowlist jika memungkinkan.
  • Dashboard wajib punya autentikasi tambahan.
  • Gunakan Cloudflare Access, VPN, Basic Auth, atau SSO.

Option A: Nginx Reverse Proxy

6.2 Install Nginx dan Certbot

sudo apt install -y nginx certbot python3-certbot-nginx

Allow firewall:

sudo ufw allow 'Nginx Full'

6.3 Nginx Reverse Proxy untuk Dashboard

Buat file config:

sudo nano /etc/nginx/sites-available/hermes-dashboard.conf

Contoh:

server {
    listen 80;
    server_name dashboard.example.com;

    location / {
        proxy_pass http://127.0.0.1:9119;
        proxy_http_version 1.1;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

Enable site:

sudo ln -s /etc/nginx/sites-available/hermes-dashboard.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Aktifkan HTTPS:

sudo certbot --nginx -d dashboard.example.com

6.4 Tambahkan Basic Auth untuk Dashboard di Nginx

Install utility password:

sudo apt install -y apache2-utils

Buat password file:

sudo htpasswd -c /etc/nginx/.htpasswd-hermes-dashboard wawan

Update block location /:

location / {
    auth_basic "Restricted Hermes Dashboard";
    auth_basic_user_file /etc/nginx/.htpasswd-hermes-dashboard;

    proxy_pass http://127.0.0.1:9119;
    proxy_http_version 1.1;

    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;

    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

Validasi dan reload:

sudo nginx -t
sudo systemctl reload nginx

6.5 Opsional: Nginx Reverse Proxy untuk Hermes API

Jika API harus dipublish, gunakan subdomain terpisah dan terlindungi:

agent.example.com

Contoh:

server {
    listen 80;
    server_name agent.example.com;

    location / {
        proxy_pass http://127.0.0.1:8642;
        proxy_http_version 1.1;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        client_max_body_size 20M;
    }
}

Aktifkan HTTPS:

sudo certbot --nginx -d agent.example.com

Proteksi tambahan yang direkomendasikan:

  • IP allowlist
  • Basic Auth jika kompatibel dengan client
  • Rate limiting
  • Cloudflare Access atau VPN
  • Tetap aktifkan API_SERVER_KEY

Contoh IP allowlist:

allow 203.0.113.10;
deny all;

Option B: Caddy Reverse Proxy

6.6 Install Caddy

Debian/Ubuntu:

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl

curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' \
  | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg

curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' \
  | sudo tee /etc/apt/sources.list.d/caddy-stable.list

sudo apt update
sudo apt install -y caddy

6.7 Caddy Reverse Proxy untuk Dashboard

Edit Caddyfile:

sudo nano /etc/caddy/Caddyfile

Contoh:

dashboard.example.com {
    encode gzip

    basicauth {
        wawan <hashed_password>
    }

    reverse_proxy 127.0.0.1:9119
}

Generate password hash:

caddy hash-password

Validasi dan reload:

sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl reload caddy

Caddy otomatis menangani HTTPS melalui Let's Encrypt jika DNS sudah benar.


6.8 Opsional: Caddy Reverse Proxy untuk Hermes API

Reverse proxy API dasar:

agent.example.com {
    encode gzip

    reverse_proxy 127.0.0.1:8642
}

Reverse proxy API yang lebih aman dengan IP restriction:

agent.example.com {
    encode gzip

    @allowed remote_ip 203.0.113.10
    handle @allowed {
        reverse_proxy 127.0.0.1:8642
    }

    respond "Forbidden" 403
}

Atau dengan Basic Auth jika kompatibel dengan client:

agent.example.com {
    encode gzip

    basicauth {
        wawan <hashed_password>
    }

    reverse_proxy 127.0.0.1:8642
}

7. Ringkasan Security Best Practices

7.1 Binding dan Exposure

Direkomendasikan:

Hermes API       127.0.0.1:8642
Dashboard        127.0.0.1:9119
Reverse Proxy    0.0.0.0:80/443

Hindari:

Hermes API       0.0.0.0:8642 tanpa autentikasi kuat
Dashboard        publik tanpa auth
Menjalankan Hermes sebagai root
Menaruh API keys di docs, Git, Nginx config, atau Caddy config

7.2 Secrets Management

Aturan:

  • API keys disimpan di ~/.hermes/.env.
  • config.yaml sebaiknya menyimpan konfigurasi non-secret jika memungkinkan.
  • Batasi permission file:
chmod 700 ~/.hermes
chmod 600 ~/.hermes/.env
chmod 600 ~/.hermes/config.yaml
  • Jangan pernah paste .env ke support chat atau GitHub issue.
  • Aktifkan redaction:
hermes config set security.redact_secrets true

7.3 Gateway Safety

Direkomendasikan:

hermes config set approvals.mode manual
hermes config set privacy.redact_pii true

Mode seimbang opsional:

hermes config set approvals.mode smart

Hindari di production:

hermes --yolo
hermes config set approvals.mode off

7.4 Security Reverse Proxy

Minimum:

  • HTTPS
  • Password/authentication kuat untuk dashboard
  • API key untuk Hermes API
  • Tidak ada akses publik langsung ke port internal
  • Logs aktif
  • Rate limiting jika API diexpose

Lebih baik:

  • Cloudflare Access
  • VPN-only access
  • IP allowlist
  • Subdomain terpisah
  • User Linux terpisah
  • Backup otomatis untuk ~/.hermes

8. Backup dan Restore

8.1 Path Penting untuk Dibackup

Backup:

~/.hermes/config.yaml
~/.hermes/.env
~/.hermes/auth.json
~/.hermes/skills/
~/.hermes/plugins/
~/.hermes/sessions/
~/.hermes/memory/
~/.hermes/cron/

Command backup sederhana:

tar -czf hermes-backup-$(date +%F).tar.gz ~/.hermes

Penting: backup ini mengandung secrets.

Kontrol backup yang direkomendasikan:

  • Enkripsi backup.
  • Simpan backup off-server.
  • Batasi akses.
  • Rotasi backup lama.
  • Uji restore secara berkala.

8.2 Prosedur Restore

Di server baru:

curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash

Restore backup:

cd ~
tar -xzf hermes-backup-YYYY-MM-DD.tar.gz
sudo chown -R $(whoami):$(whoami) ~/.hermes
chmod 700 ~/.hermes
chmod 600 ~/.hermes/.env ~/.hermes/config.yaml

Verifikasi:

hermes doctor
hermes status --all
hermes skills list
hermes cron list
hermes chat -q "Respond with exactly OK." --quiet

Restart gateway jika perlu:

hermes gateway restart

9. Operations dan Maintenance

9.1 Daily Checks

hermes status --all
hermes doctor
systemctl status hermes-gateway.service --no-pager

9.2 Logs

tail -n 100 ~/.hermes/logs/gateway.log
journalctl -u hermes-gateway.service --since "1 hour ago" --no-pager

9.3 Restart Gateway

hermes gateway restart

Atau dengan systemd:

sudo systemctl restart hermes-gateway.service

9.4 Update Hermes

hermes update
hermes doctor
hermes chat -q "Respond with exactly OK." --quiet

10. Troubleshooting

10.1 Gateway Tidak Start

Cek status dan logs:

hermes gateway status
tail -n 100 ~/.hermes/logs/gateway.log
journalctl -u hermes-gateway.service --since "30 minutes ago" --no-pager

Penyebab umum:

  • API key atau provider credential belum ada.
  • Telegram bot token salah.
  • Permission bermasalah di ~/.hermes.
  • Port sudah dipakai proses lain.
  • Config rusak setelah edit manual.

Jalankan:

hermes doctor
hermes config check

10.2 Bot Telegram Tidak Membalas

Cek:

hermes status --all
hermes gateway status
hermes pairing list
tail -n 100 ~/.hermes/logs/gateway.log

Kemungkinan penyebab:

  • Chat/user belum di-approve.
  • Bot token salah.
  • Gateway service berhenti.
  • Platform Telegram belum aktif.
  • Model provider sedang gagal.

Jalankan backend smoke test:

hermes chat -q "Respond with exactly OK." --quiet

10.3 Reverse Proxy Menampilkan 502 Bad Gateway

Cek target lokal terlebih dulu:

curl -fsS http://127.0.0.1:8642/health
curl -fsS http://127.0.0.1:9119/api/status

Cek port:

sudo ss -tlnp | grep -E ':(8642|9119|3000|3001|80|443)\b'

Cek config reverse proxy:

sudo nginx -t
sudo systemctl status nginx --no-pager

Untuk Caddy:

sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl status caddy --no-pager

10.4 Model Provider Gagal

Cek config dan credential:

hermes config check
hermes doctor
hermes model
hermes chat -q "Respond with exactly OK." --quiet

Cek permission .env:

ls -la ~/.hermes/.env ~/.hermes/config.yaml

Penyebab umum:

  • API key salah.
  • Model ID salah.
  • Quota provider habis.
  • Endpoint provider tidak OpenAI-compatible.
  • Gateway belum direstart setelah perubahan config.

10.5 Perubahan Config Tidak Berlaku

Setelah mengubah config:

hermes gateway restart

Atau restart service systemd:

sudo systemctl restart hermes-gateway.service

Untuk CLI session, exit lalu mulai session baru.

Untuk Telegram, jika authorized dan tersedia, bisa memakai:

/restart

Previous Post