15 KiB
Гайд: Установка Hermes Agent на LXC Debian и подключение с Windows Desktop
Схема: Debian LXC (сервер Hermes) ↔ Windows ПК (Hermes Desktop)
1. Подготовка LXC контейнера
1.1. Создать LXC (если ещё нет)
На хосте PVE:
pveam update
pveam available | grep debian
pveam download local debian-12-standard_12.7-1_amd64.tar.zst
pct create 300 local:vztmpl/debian-12-standard_12.7-1_amd64.tar.zst \
--hostname hermes-server \
--storage local-lvm \
--memory 4096 \
--cores 4 \
--net0 name=eth0,bridge=vmbr0,ip=dhcp \
--password \
--start
pct enter 300
1.2. Настроить внутри контейнера
# Стандартное обновление
apt update && apt upgrade -y
# Зависимости Hermes
apt install -y git curl build-essential python3 python3-pip python3-venv
# uv (менеджер Python для Hermes)
curl -fsSL https://astral.sh/uv/install.sh | bash
source ~/.bashrc
2. Установка Hermes Agent из GitHub
2.1. Ручной clone + установка (рекомендуется для сервера)
cd /opt
git clone --recurse-submodules https://github.com/NousResearch/hermes-agent.git
cd hermes-agent
# Создать venv через uv
uv venv venv --python 3.11
export VIRTUAL_ENV="$(pwd)/venv"
# Установить со всеми extras
uv pip install -e ".[all,dev]"
# Опционально: browser tools
npm install
Альтернатива (проще, но через инсталлятор):
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bashПосле этого репозиторий лежит в
~/.hermes/hermes-agent/. Этот вариант тоже устанавливаетhermesкоманду.
2.2. Создать конфигурацию
# Создать структуру директорий
mkdir -p ~/.hermes/{cron,sessions,logs,skills}
# Если ставили вручную — симлинк для `hermes` команды
mkdir -p ~/.local/bin
ln -sf /opt/hermes-agent/venv/bin/hermes ~/.local/bin/hermes
export PATH="$HOME/.local/bin:$PATH"
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
# Базовая конфигурация
cp /opt/hermes-agent/cli-config.yaml.example ~/.hermes/config.yaml
# API-ключи
cat >> ~/.hermes/.env <<'EOF'
# Минимум — один LLM провайдер:
OPENROUTER_API_KEY=sk-or-v1-xxxxxxxxxxxx
# Опционально:
# ANTHROPIC_API_KEY=sk-ant-...
# OPENAI_API_KEY=sk-...
EOF
chmod 600 ~/.hermes/.env
2.3. Проверка установки
hermes doctor
hermes chat -q "Привет, проверка связи"
# Если работает — всё ок, выйти через /exit
3. Запуск Hermes как сервера (hermes serve)
3.1. Настройка аутентификации
В ~/.hermes/.env добавить:
cat >> ~/.hermes/.env <<'EOF'
# Учётные данные для подключения Desktop
HERMES_DASHBOARD_BASIC_AUTH_USERNAME=admin
HERMES_DASHBOARD_BASIC_AUTH_PASSWORD=придумайте-надёжный-пароль
# Стабильный ключ — чтобы сессии сохранялись после перезапуска
HERMES_DASHBOARD_BASIC_AUTH_SECRET=$(openssl rand -base64 32)
EOF
chmod 600 ~/.hermes/.env
3.2. Запуск вручную (проверка)
hermes serve --host 0.0.0.0 --port 9119
Должно запуститься без ошибок. Проверить:
# Из контейнера
curl -s http://127.0.0.1:9119/api/status
# С другого узла в сети (PVE, Windows)
curl -s http://<IP LXC>:9119/api/status
Примечание:
hermes serve— это головной backend, к которому подключается Desktop. Если нужны также Telegram/Discord — их gateway запускается отдельно (hermes gateway start).
3.3. systemd-сервис для автозапуска
cat > /etc/systemd/system/hermes-serve.service <<'EOF'
[Unit]
Description=Hermes Agent Serve Backend
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=root
Group=root
WorkingDirectory=/root
ExecStart=/root/.local/bin/hermes serve --host 0.0.0.0 --port 9119
Restart=always
RestartSec=10
Environment=HERMES_HOME=/root/.hermes
# Timeout для graceful shutdown
TimeoutStopSec=30
[Install]
WantedBy=multi-user.target
EOF
Если ставили через официальный инсталлятор, путь к
hermesможет быть другим. Проверить:which hermes # или find / -name hermes -type f 2>/dev/null
Активация:
systemctl daemon-reload
systemctl enable hermes-serve
systemctl start hermes-serve
systemctl status hermes-serve
Логи:
journalctl -u hermes-serve -f
3.4. Запуск Dashboard (веб-интерфейс)
Если нужен ещё и веб-интерфейс для администрирования, запустить отдельно:
hermes dashboard --host 0.0.0.0 --port 9120 --no-open
# Доступно: http://<IP LXC>:9120
Тоже можно под systemd (аналогично hermes-serve, только ExecStart поменять).
4. Подключение NFS-шары OMV к LXC
Чтобы конфигурация, сессии и навыки сохранялись даже после пересоздания контейнера — хранить ~/.hermes/ на NFS.
4.1. Монтирование NFS в LXC
Внутри LXC-контейнера:
# Установить NFS-клиент
apt install -y nfs-common
# Создать точку монтирования
mkdir -p /mnt/hermes-data
# Проверить монтирование
mount -t nfs 192.168.1.73:/export/hermes-data /mnt/hermes-data \
-o rw,vers=4,hard,timeo=600,no_root_squash
ls -la /mnt/hermes-data/
4.2. Перенос данных на NFS
# Если в ~/.hermes/ уже есть данные
cp -a ~/.hermes/* /mnt/hermes-data/
# Или если NFS шара пустая — просто создать структуру
mkdir -p /mnt/hermes-data/{cron,sessions,logs,skills}
4.3. Переместить HERMES_HOME на NFS
# Переместить домашнюю директорию Hermes
mv ~/.hermes ~/.hermes.bak
ln -s /mnt/hermes-data ~/.hermes
# Проверить
ls -la ~/.hermes
hermes doctor
Или без симлинка — через переменную окружения:
echo 'HERMES_HOME=/mnt/hermes-data' >> ~/.bashrc
source ~/.bashrc
# + обновить systemd unit
# Environment=HERMES_HOME=/mnt/hermes-data
4.4. Автомонтирование NFS (fstab)
В /etc/fstab LXC:
192.168.1.73:/export/hermes-data /mnt/hermes-data nfs4 rw,hard,timeo=600,rsize=1048576,wsize=1048576,_netdev 0 0
Внимание: если NFS не смонтируется — hermes serve не запустится. Можно сделать After=mnt-hermes-data.mount в systemd unit, но проще сделать startup script, который ждёт mount.
5. Установка Hermes Desktop на Windows
5.1. Скачать и установить
Способ 1 (рекомендуется):
- Скачать установщик с hermes-agent.nousresearch.com/desktop (MSIX/App Installer)
- Запустить, пройти установку
Способ 2 (через PowerShell):
iex (irm https://hermes-agent.nousresearch.com/install.ps1)
5.2. Первый запуск
- Запустить Hermes Desktop
- Пропустить Onboarding / Choose provider later
- Открыть Settings → Gateways
5.3. Подключение к серверу в LXC
Settings → Gateways → Connection mode → Remote gateway
| Поле | Значение |
|---|---|
| Remote URL | http://<IP-LXC>:9119 (например http://192.168.1.200:9119) |
| Имя соединения | hermes-server (произвольно) |
Нажать Connect / Sign in → ввести:
- Username:
admin(изHERMES_DASHBOARD_BASIC_AUTH_USERNAME) - Password: (из
HERMES_DASHBOARD_BASIC_AUTH_PASSWORD)
После успешного входа — Desktop подключён к удалённому серверу. Профили, сессии, скиллы — всё с сервера.
Проблема с HTTP: если сервер без HTTPS, Desktop может ругаться на небезопасное соединение. Решения:
- Обернуть через Tailscale (см. раздел 7)
- Использовать SSH-туннель (раздел 6)
- Включить разрешение HTTP в настройках Windows Desktop (Settings → Advanced → Allow insecure connections)
6. SSH-туннель (альтернатива прямому HTTP)
Если не хотите открывать порт 9119 наружу или HTTPS нет:
На Windows (PowerShell или WSL2)
# SSH-туннель: локальный порт 9119 → LXC:9119
ssh -L 9119:localhost:9119 root@<IP-LXC> -N
После этого в Desktop указать http://127.0.0.1:9119. Трафик идёт через SSH.
Автоматизация через systemd на Windows (WSL)
Создать скрипт /etc/systemd/system/hermes-tunnel.service:
[Unit]
Description=SSH tunnel to Hermes LXC
After=network.target
[Service]
ExecStart=/usr/bin/ssh -L 9119:localhost:9119 root@<IP-LXC> -N -o ExitOnForwardFailure=yes
Restart=always
RestartSec=10
User=<ваш-user>
7. Tailscale вариант (рекомендуется)
Если Tailscale уже настроен — просто используйте Tailscale IP вместо локального.
# Установить Tailscale на LXC
curl -fsSL https://tailscale.com/install.sh | sh
tailscale up
# На Windows — установить Tailscale, войти в ту же сеть
В Desktop указать: http://<Tailscale-IP-LXC>:9119
Tailscale даёт:
- Автоматический HTTPS (магически, через
https://<machine>.ts.net) - Zero-trust сеть — порт не нужно открывать в локальной сети
- Постоянные IP, даже если LXC пересоздаётся
После Tailscale можно использовать HTTPS:
https://<machine>.ts.net:9119— Desktop не будет ругаться на небезопасное соединение.
8. Полная проверка
8.1. На LXC
# Сервер работает?
systemctl status hermes-serve
# Порт открыт?
ss -tlnp | grep 9119
# NFS смонтирована?
df -h | grep nfs
ls -la ~/.hermes/
8.2. С Windows
# Проверить TCP-доступность
Test-NetConnection -ComputerName <IP-LXC> -Port 9119
# Или через curl (если есть)
curl http://<IP-LXC>:9119/api/status
8.3. В Desktop
- Открыть чат — должна появиться сессия на сервере
- Отправить сообщение — должен прийти ответ от агента
- Файлы перетаскиваются через Desktop → загружаются на LXC
- Скиллы, настройки, сессии — все на сервере
9. Типовые проблемы и решения
| Проблема | Причина | Решение |
|---|---|---|
hermes serve не запускается |
Нет API-ключа в .env |
Проверить ~/.hermes/.env, добавить OPENROUTER_API_KEY |
| Desktop: "Connection refused" | Порт 9119 не открыт / LXC не доступен | systemctl status hermes-serve, проверить firewall на PVE |
| Desktop: "Unauthorized" | Неверный логин/пароль | Проверить HERMES_DASHBOARD_BASIC_AUTH_USERNAME/PASSWORD в .env |
| После перезапуска LXC всё сбросилось | HERMES_HOME на локальной FS |
Переместить на NFS (раздел 4), проверить fstab |
| Desktop: "Cannot connect to insecure backend" | HTTP без HTTPS | Использовать Tailscale HTTPS или Allow insecure connections |
| LXC не может смонтировать NFS | OMV NFS шара без no_root_squash |
Включить no_root_squash в настройках NFS на OMV |
hermes doctor ругается на зависимости |
Часть пакетов не установлена | apt install -y build-essential git curl python3 python3-pip |
| Медленная загрузка файлов через Desktop | Rsize/wsize малые | В fstab на LXC: rsize=1048576,wsize=1048576 |
| Desktop обновляется, а сервер нет | Разные версии | hermes update на LXC, потом перезапустить systemctl restart hermes-serve |
10. Структура сервера (итог)
LXC Debian (192.168.1.xxx)
├── /opt/hermes-agent/ — исходники (git clone)
├── /opt/hermes-agent/venv/ — виртуальное окружение Python
├── /root/.local/bin/hermes — симлинк на исполняемый файл
├── ~/.hermes/ → /mnt/hermes-data/ — конфиг, сессии, скиллы на NFS
├── /etc/systemd/system/hermes-serve.service — сервис автозапуска
└── systemd: hermes-serve (порт 9119)
OMV (192.168.1.73)
├── NFS export: /export/hermes-data → LXC /mnt/hermes-data
Windows ПК
└── Hermes Desktop → remote gateway: http://<LXC_IP>:9119
11. Команды для быстрого старта (шпаргалка)
# LXC — установка
git clone --recurse-submodules https://github.com/NousResearch/hermes-agent.git /opt/hermes-agent
cd /opt/hermes-agent && uv venv venv --python 3.11
export VIRTUAL_ENV="$(pwd)/venv" && uv pip install -e ".[all,dev]"
ln -sf /opt/hermes-agent/venv/bin/hermes ~/.local/bin/hermes
# LXC — конфиг
echo 'OPENROUTER_API_KEY=sk-or-v1-...' >> ~/.hermes/.env
echo 'HERMES_DASHBOARD_BASIC_AUTH_USERNAME=admin' >> ~/.hermes/.env
echo 'HERMES_DASHBOARD_BASIC_AUTH_PASSWORD=my-password' >> ~/.hermes/.env
chmod 600 ~/.hermes/.env
# LXC — запуск сервера
hermes serve --host 0.0.0.0 --port 9119
# Desktop (Windows) — Settings → Gateways → Remote → http://<LXC_IP>:9119