Compare commits

...

2 Commits

Author SHA1 Message Date
arch3rPro 7dd542c436 feat(hermes-web-ui): 分离 Web UI 与 Agent 服务并更新文档
分离 Hermes Web UI 与 Agent 服务,改为独立部署模式
添加 Hermes Agent 网关地址配置项
更新 README 说明部署步骤和配置参数
简化 docker-compose 配置,移除内置 Agent 服务
2026-05-10 02:53:01 +08:00
arch3rPro 12b719c7be feat(hermes-web-ui): 添加 Hermes Web UI 应用及相关配置
添加 Hermes Web UI 应用,包含多语言支持、Docker 配置、数据持久化及文档说明
删除已废弃的 OpenClaw 应用及相关文件
2026-05-10 02:02:23 +08:00
18 changed files with 297 additions and 199 deletions
+68
View File
@@ -0,0 +1,68 @@
# Hermes Web UI
Hermes Agent 的全功能 Web 管理面板。管理 AI 聊天会话、监控使用量与成本、配置平台渠道、调度定时任务、浏览技能等,全部通过简洁响应式 Web 界面完成。
## 部署说明
本应用为独立的 Web UI 面板,**不包含** Hermes Agent 服务。使用前请先在 1Panel 中安装官方 [Hermes Agent](https://github.com/1Panel-dev/appstore/tree/dev/apps/hermes-agent) 应用,然后安装本应用连接到已有的 Agent。
### 安装步骤
1. 在 1Panel 应用商店安装 **Hermes Agent**(官方应用)
2. 安装本应用 **Hermes Web UI**
3. 安装时配置「Hermes Agent 网关地址」,默认为 `http://hermes-agent:8642`
4. 如果安装 Agent 时修改了容器名称,请相应调整网关地址中的主机名
### 网络要求
两个应用均使用 `1panel-network` 网络,通过 Docker 内部网络通信,无需暴露额外端口。
## 功能特点
- **AI 聊天** — 实时流式 SSE 传输,多会话管理,Markdown 渲染与代码高亮
- **平台渠道** — 统一配置 8 大平台(Telegram、Discord、Slack、WhatsApp、Matrix、飞书、微信、企业微信)
- **用量分析** — Token 使用量统计、成本追踪、模型分布图表
- **定时任务** — 创建、编辑、暂停、恢复、删除 Cron 任务
- **模型管理** — 自动发现/添加提供商,支持 OpenAI 兼容接口
- **多配置文件** — 创建、克隆、导入/导出 Hermes 配置文件
- **文件浏览器** — 浏览、上传、下载远程后端文件
- **群聊** — 多 Agent 聊天室,支持 @提及和上下文压缩
- **技能与记忆** — 浏览已安装技能,用户笔记管理
- **日志查看** — Agent/网关/错误日志过滤与查看
- **身份认证** — 基于 Token 的认证(首次运行自动生成)
- **Web 终端** — 集成终端,支持多会话
## 使用说明
### 默认端口
- Web 界面: `6060`(可在安装时修改)
### 配置参数
| 参数 | 默认值 | 说明 |
|------|--------|------|
| Web UI 端口 | `6060` | Web 管理面板的访问端口 |
| Agent 网关地址 | `http://hermes-agent:8642` | Hermes Agent 的网关地址 |
### 默认认证
- 首次运行时自动生成 Auth Token,可通过容器日志查看:
```bash
docker logs <容器名> | grep token
```
- 也可通过环境变量 `AUTH_TOKEN` 设置自定义 Token
### 数据目录
- `./webui-data` — Web UI 数据(Auth Token 等)
### 模型配置
使用前请确保已在 Hermes Agent 的 Web 界面或本应用的模型管理页面配置好 AI 模型的 API 密钥。
## 相关链接
- Hermes Web UI: https://github.com/EKKOLearnAI/hermes-web-ui
- Hermes Agent: https://github.com/NousResearch/hermes-agent
- 1Panel 官方 Hermes Agent: https://github.com/1Panel-dev/appstore/tree/dev/apps/hermes-agent
+68
View File
@@ -0,0 +1,68 @@
# Hermes Web UI
A full-featured web dashboard for Hermes Agent. Manage AI chat sessions, monitor usage & costs, configure platform channels, schedule cron jobs, browse skills — all from a clean, responsive web interface.
## Deployment
This is a standalone Web UI app that does **not include** the Hermes Agent service. Install the official [Hermes Agent](https://github.com/1Panel-dev/appstore/tree/dev/apps/hermes-agent) from 1Panel app store first, then install this app to connect to your existing Agent.
### Setup Steps
1. Install **Hermes Agent** from 1Panel app store (official app)
2. Install **Hermes Web UI** (this app)
3. Configure the "Hermes Agent Gateway" URL during installation (default: `http://hermes-agent:8642`)
4. If you changed the Agent container name, adjust the hostname in the gateway URL accordingly
### Networking
Both apps use the `1panel-network` and communicate via Docker internal networking — no additional ports need to be exposed.
## Features
- **AI Chat** — Real-time streaming via SSE, multi-session management, Markdown rendering with syntax highlighting
- **Platform Channels** — Unified configuration for 8 platforms (Telegram, Discord, Slack, WhatsApp, Matrix, Feishu, WeChat, WeCom)
- **Usage Analytics** — Token usage breakdown, cost tracking, model distribution charts
- **Scheduled Jobs** — Create, edit, pause, resume, delete cron jobs
- **Model Management** — Auto-discover providers, add custom OpenAI-compatible endpoints
- **Multi-Profile** — Create, clone, import/export Hermes profiles
- **File Browser** — Browse, upload, download files on remote backends
- **Group Chat** — Multi-agent chat rooms with @mention support and context compression
- **Skills & Memory** — Browse installed skills, user notes management
- **Log Viewer** — Filter and view agent/gateway/error logs
- **Authentication** — Token-based auth (auto-generated on first run)
- **Web Terminal** — Integrated terminal with multi-session support
## Usage
### Default Port
- Web UI: `6060` (configurable during installation)
### Configuration Parameters
| Parameter | Default | Description |
|-----------|---------|-------------|
| Web UI Port | `6060` | Web dashboard access port |
| Agent Gateway | `http://hermes-agent:8642` | Hermes Agent gateway URL |
### Default Credentials
- Auth Token is auto-generated on first run. View it via container logs:
```bash
docker logs <container-name> | grep token
```
- You can also set a custom token via `AUTH_TOKEN` environment variable
### Data Directories
- `./webui-data` — Web UI data (auth token, etc.)
### Model Configuration
Make sure to configure your AI model API keys via the Hermes Agent web interface or this app's Model Management page before use.
## Links
- Hermes Web UI: https://github.com/EKKOLearnAI/hermes-web-ui
- Hermes Agent: https://github.com/NousResearch/hermes-agent
- Official 1Panel Hermes Agent: https://github.com/1Panel-dev/appstore/tree/dev/apps/hermes-agent
+33
View File
@@ -0,0 +1,33 @@
name: Hermes Web UI
tags:
- AI
title: Hermes Agent 的全功能 Web 管理面板
description: Hermes Agent 的全功能 Web 管理面板
additionalProperties:
key: hermes-web-ui
name: Hermes Web UI
type: website
tags:
- AI
shortDescZh: Hermes Agent 的全功能 Web 管理面板
shortDescEn: A full-featured web dashboard for Hermes Agent
description:
en: A full-featured web dashboard for Hermes Agent. Manage AI chat sessions, monitor usage & costs, configure platform channels, schedule cron jobs, browse skills — all from a clean, responsive web interface.
ja: Hermes Agent のフル機能 Web ダッシュボード。AIチャットセッション管理、使用量・コスト監視、プラットフォームチャンネル設定、cronジョブスケジュール、スキル閲覧など。
ms: Papan pemuka web berciri penuh untuk Hermes Agent
pt-br: Um painel web completo para Hermes Agent
ru: Полнофункциональная веб-панель для Hermes Agent
ko: Hermes Agent를 위한 완전한 기능의 웹 대시보드
zh-Hant: Hermes Agent 的全功能 Web 管理面板
zh: Hermes Agent 的全功能 Web 管理面板。管理 AI 聊天会话、监控使用量与成本、配置平台渠道、调度定时任务、浏览技能等,全部通过简洁响应式 Web 界面完成。
tr: Hermes Agent için tam özellikli web kontrol paneli
es-es: Un panel web completo para Hermes Agent
crossVersionUpdate: true
limit: 0
recommend: 13
website: https://github.com/EKKOLearnAI/hermes-web-ui
github: https://github.com/EKKOLearnAI/hermes-web-ui
document: https://github.com/EKKOLearnAI/hermes-web-ui
architectures:
- amd64
- arm64
+40
View File
@@ -0,0 +1,40 @@
additionalProperties:
formFields:
- default: 6060
edit: true
envKey: PANEL_APP_PORT_HTTP
labelEn: Web UI Port
labelZh: Web UI 端口
required: true
rule: paramPort
type: number
label:
en: Web UI Port
es-es: Puerto web
ja: Web UIポート
ms: Port Web UI
pt-br: Porta da Web UI
ru: Порт веб-интерфейса
ko: 웹 UI 포트
zh-Hant: Web UI 埠
zh: Web UI 端口
tr: Web UI Bağlantı Noktası
- default: http://hermes-agent:8642
edit: true
envKey: PANEL_APP_HERMES_GATEWAY
labelEn: Hermes Agent Gateway
labelZh: Hermes Agent 网关地址
required: true
rule: paramExtUrl
type: text
label:
en: Hermes Agent Gateway
es-es: Puerta de enlace del Hermes Agent
ja: Hermes Agent ゲートウェイ
ms: Gerbang Hermes Agent
pt-br: Gateway do Hermes Agent
ru: Шлюз Hermes Agent
ko: Hermes Agent 게이트웨이
zh-Hant: Hermes Agent 閘道位址
zh: Hermes Agent 网关地址
tr: Hermes Agent Ağ Geçidi
@@ -0,0 +1,24 @@
services:
hermes-webui:
container_name: ${CONTAINER_NAME}
image: ekkoye8888/hermes-web-ui:latest
entrypoint: ["node", "dist/server/index.js"]
restart: unless-stopped
networks:
- 1panel-network
ports:
- "${PANEL_APP_PORT_HTTP}:6060"
volumes:
- ./webui-data:/home/agent/.hermes-web-ui
environment:
- PORT=6060
- UPSTREAM=${PANEL_APP_HERMES_GATEWAY}
- HERMES_HOME=/opt/data
- HERMES_BIN=/opt/hermes/.venv/bin/hermes
- AUTH_DISABLED=false
- PATH=/opt/hermes/.venv/bin:/opt/data/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
labels:
createdBy: "Apps"
networks:
1panel-network:
external: true
Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

+40
View File
@@ -0,0 +1,40 @@
additionalProperties:
formFields:
- default: 6060
edit: true
envKey: PANEL_APP_PORT_HTTP
labelEn: Web UI Port
labelZh: Web UI 端口
required: true
rule: paramPort
type: number
label:
en: Web UI Port
es-es: Puerto web
ja: Web UIポート
ms: Port Web UI
pt-br: Porta da Web UI
ru: Порт веб-интерфейса
ko: 웹 UI 포트
zh-Hant: Web UI 埠
zh: Web UI 端口
tr: Web UI Bağlantı Noktası
- default: http://hermes-agent:8642
edit: true
envKey: PANEL_APP_HERMES_GATEWAY
labelEn: Hermes Agent Gateway
labelZh: Hermes Agent 网关地址
required: true
rule: paramExtUrl
type: text
label:
en: Hermes Agent Gateway
es-es: Puerta de enlace del Hermes Agent
ja: Hermes Agent ゲートウェイ
ms: Gerbang Hermes Agent
pt-br: Gateway do Hermes Agent
ru: Шлюз Hermes Agent
ko: Hermes Agent 게이트웨이
zh-Hant: Hermes Agent 閘道位址
zh: Hermes Agent 网关地址
tr: Hermes Agent Ağ Geçidi
@@ -0,0 +1,24 @@
services:
hermes-webui:
container_name: ${CONTAINER_NAME}
image: ekkoye8888/hermes-web-ui:v0.5.15
entrypoint: ["node", "dist/server/index.js"]
restart: unless-stopped
networks:
- 1panel-network
ports:
- "${PANEL_APP_PORT_HTTP}:6060"
volumes:
- ./webui-data:/home/agent/.hermes-web-ui
environment:
- PORT=6060
- UPSTREAM=${PANEL_APP_HERMES_GATEWAY}
- HERMES_HOME=/opt/data
- HERMES_BIN=/opt/hermes/.venv/bin/hermes
- AUTH_DISABLED=false
- PATH=/opt/hermes/.venv/bin:/opt/data/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
labels:
createdBy: "Apps"
networks:
1panel-network:
external: true
@@ -1,31 +0,0 @@
additionalProperties:
formFields:
- default: 18789
edit: true
envKey: PANEL_APP_PORT_HTTP
labelEn: Web UI Port
labelZh: Web UI 端口
required: true
rule: paramPort
type: number
label:
en: Web UI Port
zh: Web UI 端口
zh-Hant: Web UI 埠
- default: ""
edit: true
envKey: OPENCLAW_GATEWAY_TOKEN
labelEn: Gateway Token
labelZh: 网关令牌
random: true
required: false
rule: paramCommon
type: password
label:
en: Gateway Token
zh: 网关令牌
zh-Hant: 閘道權杖
description:
en: Token used to access the OpenClaw Dashboard. Append ?token=your-token to the Dashboard URL when needed.
zh: 用于访问 OpenClaw Dashboard 的令牌。需要时可在访问地址后追加 ?token=你的令牌。
zh-Hant: 用於訪問 OpenClaw Dashboard 的權杖。需要時可在訪問地址後追加 ?token=你的權杖。
@@ -1,36 +0,0 @@
services:
openclaw-zh:
container_name: ${CONTAINER_NAME}
image: 1186258278/openclaw-zh:2026.5.7-nightly.202605080122
restart: always
networks:
- 1panel-network
environment:
HOME: /root
TERM: xterm-256color
OPENCLAW_DISABLE_BONJOUR: "1"
OPENCLAW_GATEWAY_TOKEN: ${OPENCLAW_GATEWAY_TOKEN}
volumes:
- ./data/conf:/root/.openclaw
ports:
- ${PANEL_APP_PORT_HTTP}:18789
command: openclaw gateway run --allow-unconfigured
init: true
healthcheck:
test:
[
"CMD",
"node",
"-e",
"fetch('http://127.0.0.1:18789/healthz').then((r)=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"
]
interval: 3m
timeout: 10s
start_period: 15s
retries: 3
labels:
createdBy: "Apps"
networks:
1panel-network:
external: true
-19
View File
@@ -1,19 +0,0 @@
# OpenClaw Chinese
OpenClaw Chinese 是 OpenClaw 的汉化发行版。OpenClaw 是开源、自托管的个人 AI 助理,提供本地运行的 Web Dashboard 和 Gateway。
## 使用说明
安装后访问 `http://服务器 IP:端口` 打开 Dashboard。默认端口为 `18789`
建议在安装参数中设置 `OPENCLAW_GATEWAY_TOKEN`,用于 Dashboard 访问认证。浏览器打开页面后,可以在 URL 后追加 `?token=你的令牌` 进行访问。
## 数据目录
应用数据会持久化到安装目录下的 `data/conf`,对应容器内 `/root/.openclaw`
## 参考
- 项目仓库:https://github.com/1186258278/OpenClawChineseTranslation
- Docker 说明:https://github.com/1186258278/OpenClawChineseTranslation/blob/main/DOCKER_README.md
- OpenClaw 官网:https://openclaw.ai/
-19
View File
@@ -1,19 +0,0 @@
# OpenClaw Chinese
OpenClaw Chinese is a localized Chinese distribution of OpenClaw. OpenClaw is an open-source, self-hosted personal AI assistant with a local Web Dashboard and Gateway.
## Usage
After installation, open `http://server-ip:port` in your browser. The default port is `18789`.
It is recommended to set `OPENCLAW_GATEWAY_TOKEN` during installation for Dashboard authentication. You can append `?token=your-token` to the URL when opening the Dashboard.
## Data Directory
Application data is persisted in `data/conf` under the installation directory, mapped to `/root/.openclaw` inside the container.
## References
- Repository: https://github.com/1186258278/OpenClawChineseTranslation
- Docker guide: https://github.com/1186258278/OpenClawChineseTranslation/blob/main/DOCKER_README.md
- OpenClaw website: https://openclaw.ai/
-27
View File
@@ -1,27 +0,0 @@
name: OpenClaw Chinese
tags:
- AI / 大模型
title: OpenClaw 汉化发行版,开源、自托管的个人 AI 助理
description: OpenClaw 汉化发行版,开源、自托管的个人 AI 助理
additionalProperties:
key: openclaw-zh
name: OpenClaw Chinese
tags:
- AI
shortDescZh: OpenClaw 汉化发行版,开源、自托管的个人 AI 助理
shortDescEn: Chinese localized OpenClaw distribution, a self-hosted personal AI assistant
description:
en: Chinese localized OpenClaw distribution, a self-hosted personal AI assistant
zh: OpenClaw 汉化发行版,开源、自托管的个人 AI 助理
zh-Hant: OpenClaw 漢化發行版,開源、自托管的個人 AI 助理
type: website
crossVersionUpdate: true
limit: 0
recommend: 0
batchInstallSupport: true
website: https://openclaw.qt.cool/
github: https://github.com/1186258278/OpenClawChineseTranslation
document: https://github.com/1186258278/OpenClawChineseTranslation/blob/main/DOCKER_README.md
architectures:
- amd64
- arm64
-31
View File
@@ -1,31 +0,0 @@
additionalProperties:
formFields:
- default: 18789
edit: true
envKey: PANEL_APP_PORT_HTTP
labelEn: Web UI Port
labelZh: Web UI 端口
required: true
rule: paramPort
type: number
label:
en: Web UI Port
zh: Web UI 端口
zh-Hant: Web UI 埠
- default: ""
edit: true
envKey: OPENCLAW_GATEWAY_TOKEN
labelEn: Gateway Token
labelZh: 网关令牌
random: true
required: false
rule: paramCommon
type: password
label:
en: Gateway Token
zh: 网关令牌
zh-Hant: 閘道權杖
description:
en: Token used to access the OpenClaw Dashboard. Append ?token=your-token to the Dashboard URL when needed.
zh: 用于访问 OpenClaw Dashboard 的令牌。需要时可在访问地址后追加 ?token=你的令牌。
zh-Hant: 用於訪問 OpenClaw Dashboard 的權杖。需要時可在訪問地址後追加 ?token=你的權杖。
@@ -1,36 +0,0 @@
services:
openclaw-zh:
container_name: ${CONTAINER_NAME}
image: 1186258278/openclaw-zh:latest
restart: always
networks:
- 1panel-network
environment:
HOME: /root
TERM: xterm-256color
OPENCLAW_DISABLE_BONJOUR: "1"
OPENCLAW_GATEWAY_TOKEN: ${OPENCLAW_GATEWAY_TOKEN}
volumes:
- ./data/conf:/root/.openclaw
ports:
- ${PANEL_APP_PORT_HTTP}:18789
command: openclaw gateway run --allow-unconfigured
init: true
healthcheck:
test:
[
"CMD",
"node",
"-e",
"fetch('http://127.0.0.1:18789/healthz').then((r)=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"
]
interval: 3m
timeout: 10s
start_period: 15s
retries: 3
labels:
createdBy: "Apps"
networks:
1panel-network:
external: true
Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB