Panduan Instalasi Hermes Agent: Deployment Aman dengan Telegram Gateway, Dashboard, Nginx, dan Caddy
06, JunArtikel 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.1secara 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
- User non-root dengan akses
1.2 Software yang Dibutuhkan
Paket dasar:
curlgitpython3python3-venvpython3-pippipxatau Python virtual environmentsystemdnginxataucaddyufwatau firewall lainfail2banuntuk hardening SSH dasar
Paket opsional:
nodejsdannpmjika menjalankan frontend/dashboard terpisahdockerdan Docker Compose jika memakai komponen UI berbasis containercloudflaredjika 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 truemembantu masking API key dan token di output tool.privacy.redact_pii truemembantu redaksi identitas user dalam konteks gateway.approvals.mode manualpaling aman untuk command berisiko.- Hindari
--yolopada 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:
- Buka
@BotFather. - Jalankan:
/newbot
- Ikuti instruksi.
- 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:
- Hermes Agent CLI: agent command-line lokal.
- Hermes Gateway/API: backend service untuk platform dan akses OpenAI-compatible.
- Telegram Gateway: adapter messaging.
- 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_KEYsebagai 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
/v1ke 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.yamlsebaiknya menyimpan konfigurasi non-secret jika memungkinkan.- Batasi permission file:
chmod 700 ~/.hermes
chmod 600 ~/.hermes/.env
chmod 600 ~/.hermes/config.yaml
- Jangan pernah paste
.envke 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