Агент Hermes: настройка безголового сервера и удалённого рабочего стола
Сервер Headless Hermes с доступом по удаленному рабочему столу
Запуск агента Hermes на сервере без графического интерфейса (headless) при подключении с настольного клиента на другом компьютере требует наличия двух процессов на сервере и одного клиентского соединения.
Архитектура разделяет бэкенд Hermes на два серверных процесса и один клиентский интерфейс. Бэкенд hermes serve обрабатывает соединения API и панели управления, в то время как процесс hermes gateway run независимо управляет каналами сообщений. Настольный клиент подключается к бэкенду serve, а не к шлюзу.
--host 0.0.0.0
:9119"] gateway["hermes gateway run
Telegram, Discord, Slack"] end subgraph Client["НАСТОЛЬНЫЙ ПК"] desktop["hermes desktop
(WebSocket connection)"] end desktop <--->|WebSocket| serve gateway -.->|Shares ~/.hermes/| serve
Два процесса на сервере, одно приложение на клиенте. Оба серверных процесса используют одну и ту же конфигурацию ~/.hermes/, навыки, память и сессии. Периодические задачи (Cron jobs) выполняются на сервере, где работает шлюз.

Для установки, настройки провайдера и первоначальной конфигурации начните с руководства Hermes AI Assistant — Установка, настройка, рабочий процесс и устранение неполадок.
Настройка сервера без графического интерфейса
1. Настройка аутентификации
Базовая аутентификация обеспечивает достаточную защиту для доверенной локальной сети (LAN). Добавьте учетные данные в файл окружения:
cat >> ~/.hermes/.env << 'EOF'
HERMES_DASHBOARD_BASIC_AUTH_USERNAME=admin
HERMES_DASHBOARD_BASIC_AUTH_PASSWORD=choose-a-strong-password
HERMES_DASHBOARD_BASIC_AUTH_SECRET=$(openssl rand -base64 32)
EOF
chmod 600 ~/.hermes/.env
Файл .env находится рядом с config.yaml в директории ~/.hermes/. Hermes разрешает конфигурацию в следующем порядке: сначала переопределения из командной строки (CLI), затем config.yaml, затем .env, и наконец встроенные значения по умолчанию. Секреты должны храниться в .env.
2. Запуск бэкенда
Запустите бэкенд serve на всех интерфейсах:
hermes serve --host 0.0.0.0 --port 9119
Бэкенд слушает порт 9119 и принимает WebSocket-соединения от настольного клиента. Убедитесь, что он запущен, выполнив быструю проверку статуса:
curl -s http://localhost:9119/api/status | jq '.auth_required, .auth_providers'
# Ожидаемый результат: true "basic"
3. Запуск как systemd-сервис
Для создания постоянного сервера, который сохраняется после перезагрузки, установите пользовательский systemd-сервис. Создайте файл юнита в /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
Перезагрузите демон, включите сервис и запустите его:
systemctl --user daemon-reload
systemctl --user enable hermes-serve
systemctl --user start hermes-serve
Проверьте статус сервиса:
systemctl --user status hermes-serve
4. Запуск шлюза
Шлюз — это отдельный процесс, который обрабатывает каналы сообщений: Telegram, Discord, Slack и другие. Запустите его независимо:
hermes gateway run
Шлюз и бэкенд serve — это два отдельных процесса. Шлюз управляет сессиями, запускает периодические задачи (cron jobs) и маршрутизирует сообщения. Бэкенд serve предоставляет интерфейс API для подключений настольного клиента и веб-панели управления. Они используют одну и ту же домашнюю директорию, но работают независимо.
Полный список команд и подкоманд шлюза см. в шпаргалке по CLI агента Hermes. Если ваш основной интерфейс — мобильные сообщения, дополните эту настройку голосовым управлением Hermes с телефона для рабочих процессов с приоритетом на голос поверх того же процесса шлюза.
5. Проверка бэкенда
Убедитесь, что бэкенд отвечает и аутентификация активна:
curl -s http://localhost:9119/api/status | jq '.auth_required, .auth_providers'
Ожидаемый вывод:
true
"basic"
Если аутентификация не включена, в ответе для auth_required будет показано false. Проверьте, что файл .env содержит правильные переменные и что сервис был перезапущен после изменений конфигурации.
Подключение с настольного клиента
Вариант A: Приложение Hermes Desktop
Установите Hermes Desktop с официального сайта. Запустите приложение, перейдите в Настройки → Шлюз → Удаленный шлюз и введите адрес сервера:
http://<ip-адрес-сервера>:9119
Войдите с помощью имени пользователя и пароля, настроенных на сервере.
В качестве альтернативы установите удаленный URL через переменную окружения:
HERMES_DESKTOP_REMOTE_URL=http://<ip-адрес-сервера>:9119 hermes desktop
Вариант B: Веб-панель управления
Откройте http://<ip-адрес-сервера>:9119 в браузере и войдите с учетными данными базовой аутентификации. Веб-панель управления предоставляет интерфейс на основе браузера для взаимодействия с бэкендом Hermes, не требуя установки настольного приложения.
Вариант C: Командная строка (CLI)
Из терминала настольного ПК настройте удаленный URL через настройки настольного приложения или переменную окружения HERMES_DESKTOP_REMOTE_URL. Интерфейс командной строки подключается через тот же канал WebSocket, что и настольное приложение.
Сетевые аспекты и безопасность
| Сценарий | Рекомендация |
|---|---|
| Доверенная локальная сеть | --host 0.0.0.0 + базовая аутентификация |
| Доступ из интернета | Используйте Tailscale (--host <tailscale-ip>) или провайдера OAuth |
| Брандмауэр | Откройте порт 9119 TCP на сервере |
Для доверенной локальной сети базовой аутентификации на 0.0.0.0 достаточно. Если сервер доступен из интернета, используйте Tailscale для привязки к IP-адресу Tailscale вместо 0.0.0.0 или настройте провайдера OAuth для более сильной аутентификации. Всегда открывайте порт 9119 TCP в брандмауэре сервера, когда бэкенду необходимо принимать внешние соединения.
Важные различия между процессами
Понимание разделения между двумя серверными процессами предотвращает распространенные ошибки конфигурации:
hermes serve— Бэкенд, к которому подключаются настольное приложение и веб-панель управления. Обрабатывает поверхность API и WebSocket-соединения.hermes gateway run— Процесс, который обрабатывает Telegram, Discord, Slack и другие каналы сообщений. Управляет сессиями, запускает периодические задачи (cron jobs) и маршрутизирует сообщения.- Это два отдельных процесса на сервере. Они используют одну и ту же конфигурацию
~/.hermes/, навыки, память и сессии, но работают независимо. - Периодические задачи (Cron jobs) выполняются на сервере, где работает шлюз.
- Профили, навыки и память настраиваются на стороне сервера. Клиент подключается к уже настроенному бэкенду.
Для настройки, ориентированной на профили, и навыков, адаптированных к различным ролям в производственной среде, см. Навыки помощника Hermes AI для реальных производственных настроек.
Устранение неполадок
Настольный клиент не может подключиться к серверу
- Убедитесь, что бэкенд запущен:
systemctl --user status hermes-serve - Проверьте, открыт ли порт:
ss -tlnp | grep 9119 - Протестируйте с сервера:
curl -s http://localhost:9119/api/status - Протестируйте с клиентской машины:
curl -s http://<ip-адрес-сервера>:9119/api/status - Если тест клиента не удался, проверьте правила брандмауэра:
sudo ufw statusилиsudo iptables -L
Ошибка аутентификации
- Убедитесь, что у файла
.envправильные права доступа:ls -la ~/.hermes/.env(должны быть600) - Проверьте, был ли сгенерирован секрет:
grep HERMES_DASHBOARD_BASIC_AUTH_SECRET ~/.hermes/.env - Перезапустите сервис после изменения конфигурации:
systemctl --user restart hermes-serve
Шлюз не отвечает на сообщения
Шлюз — это процесс, отличный от бэкенда. Если настольный клиент подключается, но платформы обмена сообщениями не работают:
- Проверьте статус шлюза:
hermes gateway status - Запустите шлюз, если он остановлен:
hermes gateway start - Просмотрите журналы:
hermes logs gateway -f
Ссылки
- Документация настольного приложения Hermes Agent
- Руководство по настройке Hermes Agent
- Шлюз обмена сообщениями Hermes Agent
- Hermes AI Assistant — Установка, настройка, рабочий процесс и устранение неполадок
- Шпаргалка по CLI агента Hermes — команды, флаги и слеш-сокращения
- Навыки помощника Hermes AI для реальных производственных настроек
Эта статья является частью кластера Системы ИИ, который охватывает самодостаточных ассистентов, архитектуру поиска, локальную инфраструктуру LLM и наблюдаемость.