群晖 hermes docker 安装无法自动启动 gateway

docker 的启动参数可以加这几个:

Groovy 复制代码
#启用 Dashboard(Web UI),你之前就有在跑(端口 9119)。保留,方便你管理。
HERMES_DASHBOARD=1

#允许 root 用户启动网关。有用,容器里 main-wrapper.sh 默认用 s6-setuidgid hermes 降权限启动 hermes,但网关需要 root 来写入 venv。有了这个变量,网关可以直接以 root 运行,省掉权限问题。建议保留。
HERMES_ALLOW_ROOT_GATEWAY=1

#Dashboard 不检查认证。保留,不然你访问 Web UI 要登录。
HERMES_DASHBOARD_INSECURE=1 


#设置 hermes 用户的家目录。保留,确保 hermes 用户能正确读写配置。
HOME=/opt/data

#权限控制,避免他获得 root 权限
HERMES_UID=1026
HERMES_GID=100

因为每次启动 lark-oapi 都会没有,导致 gateway 一直起不来

可以形成一个 skills,这样每次启动后可以通过对话修复

真正需要的就一条命令:

uv pip install --python /opt/hermes/.venv/bin/python3 lark-oapi

uv 能直接写入 hermes venv,不需要先 chmod。我试过了,lark-oapi 已经装好了,飞书也连上了。

所以每次重启后你只需要跑:

Groovy 复制代码
uv pip install --python /opt/hermes/.venv/bin/python3 lark-oapi && pkill -f "hermes gateway run" 2>/dev/null; sleep 2; /opt/hermes/.venv/bin/hermes gateway run

skills 原文:

复制代码
---
name: gateway-boot-fix
description: "Docker 容器重启后 Hermes 网关修复。当网关进程挂了、飞书/Discord/Telegram 等消息平台无法连接、或 gateway status 显示 not running 时自动启用。修复 venv 权限、安装缺失依赖、重启网关并验证连接。"
version: 2.0.0
author: Hermes Agent
license: MIT
---

# Hermes 网关开机修复技能 v2.0

## 适用场景

Docker 容器重启后,Hermes 网关可能出现以下问题:
- 网关进程没启动
- 飞书等平台 WebSocket 连接失败
- 日志显示 `lark-oapi not installed` 等依赖缺失错误
- `hermes gateway status` 显示 `Gateway is not running`

## 根因(3个,按顺序)

### 1. venv 权限问题
`/opt/hermes/.venv/lib/python3.13/site-packages/` 由镜像构建时创建,文件所有者是 hermes 用户(uid 10000)。root 用户执行 `chmod -R` 会报 `Operation not permitted`(btrfs 子卷权限限制)。

**但** `uv pip install` 可以写入(Python 级别文件操作,绕过 OS 权限检查)。所以不需要 chmod,直接用 uv 安装即可。

### 2. lark-oapi 未安装到 hermes venv
Hermes 使用独立 venv(`/opt/hermes/.venv`),系统 Python 上安装的包它读不到。网关启动时懒安装会因权限不足失败。

### 3. 网关进程未启动
容器重启后网关进程不会自动拉起(s6 的 main-hermes 服务是 `exec sleep infinity` 空壳)。

## 修复步骤(按顺序执行,不要跳步)

### Step 1:安装 lark-oapi

```bash
uv pip install --python /opt/hermes/.venv/bin/python3 lark-oapi
```

这是唯一需要装的包。uv 会自动解决依赖(pycryptodome、websockets 等)。

### Step 2:启动网关

```bash
# 先杀掉残留进程(如果有)
pkill -f "hermes gateway run" 2>/dev/null
sleep 2

# 启动网关
/opt/hermes/.venv/bin/hermes gateway run
```

网关启动后会进入 s6 监督模式(自动重启)。

### Step 3:验证连接

等 15-30 秒后检查:

```bash
tail -10 /opt/data/logs/gateways/default/current
```

飞书连接成功会看到:
```
[Lark] [...] [INFO] connected to wss://msg-frontier.feishu.cn/ws/v2?...
```

## 一键修复命令

```bash
uv pip install --python /opt/hermes/.venv/bin/python3 lark-oapi && pkill -f "hermes gateway run" 2>/dev/null; sleep 2; /opt/hermes/.venv/bin/hermes gateway run
```

## 踩坑记录(不要再走这些弯路)

### 坑1:不要尝试 chmod site-packages
- `chmod -R g+rw /opt/hermes/.venv/lib/python3.13/site-packages/` 会报 `Operation not permitted`
- 即使先 `chmod 644` 单个文件再递归也不行,部分目录改不了
- **原因**:btrfs 子卷的权限限制,root 无法修改 uid 10000 的文件
- **正确做法**:不需要 chmod,`uv pip install` 可以直接写入

### 坑2:lark-oapi 装到系统 Python 没用
- `uv pip install lark-oapi`(不带 `--python`)装到系统 Python 或 hermes 用户的 `.local`
- Hermes 网关用的是 `/opt/hermes/.venv`,完全隔离
- **必须用** `uv pip install --python /opt/hermes/.venv/bin/python3 lark-oapi`

### 坑3:pip 不存在
- hermes venv 用 `uv` 管理,没有 pip
- `python3 -m pip` 也没有
- **只用** `uv pip install --python /opt/hermes/.venv/bin/python3 <package>`

### 坑4:/etc/s6-overlay/ 是只读的
- 无法修改 s6 服务定义文件
- 无法在 main-hermes/run 里加启动脚本
- 不要尝试改 s6 服务配置

### 坑5:container_environment 无法从用户层面写入
- S6_STAGE2_HOOK 需要写入 /run/s6/container_environment/
- 这个目录由 s6 初始化,用户无法预置
- 不要尝试用 S6_STAGE2_HOOK 机制

### 坑6:容器里没有 cron 服务
- 无法用 crontab 做定时检查
- 不要尝试用 cron 方案

## 一劳永逸方案(需要改镜像)

在 Dockerfile 中创建 venv 之后加一行:

```dockerfile
RUN chmod -R g+rw /opt/hermes/.venv/lib/python3.13/site-packages/
```

然后重新构建镜像。这样每次容器启动权限都对,uv 安装也不会有权限问题。

如果不想改镜像,每次容器重启后执行一键修复命令即可。

SKILL.md

相关推荐
杨浦老苏1 天前
PDF文档管理平台PDFManager
docker·pdf·工具·群晖
ai产品老杨1 天前
解耦异构安防:基于 Docker 与边缘计算的 AI 视频管理平台,如何实现 GB28181/RTSP 统一接入与全源码交付
人工智能·docker·边缘计算
comcoo1 天前
告别复杂配置!Hermes Windows 极简部署流程详解【附部署包】
人工智能·开源软件·hermes·hermes部署包
极客先躯1 天前
高级java每日一道面试题-2026年02月09日-实战篇[Docker]-Docker 容器有哪些安全风险?如何缓解?
java·运维·网络·安全·docker·容器
yuanzhengme1 天前
Ollama【部署 07】搭建本地智能体的简单说明(局域网离线部署Ollama+模型迁移+Docker部署AnythingLLM)
运维·docker·容器·大模型·ollama·本地智能体
想要成为计算机高手1 天前
用meta quest 3 遥操宇树机器人-xr_teleoperate 复现(含docker安装与配置方式)
人工智能·docker·机器人·xr·g1·具身智能
段智华1 天前
MCP Server开发实战:从零构建Agent可调用的服务
ai-native·hermes·自进化智能体
“码”力全开1 天前
云边端协同架构:基于 Docker 与边缘计算的 GB28181/RTSP 异构视频 AI 管理平台设计(附源码交付)
人工智能·docker·架构
IVEN_1 天前
本地正常,Docker 怎么就空白:Next.js SSR 的 Alpine musl DNS 陷阱
前端·docker·next.js
是一个Bug1 天前
AI Agent 的沙箱是什么?它和 Docker / 虚拟机有什么区别?
人工智能·docker·容器