AI 应用人工智能AI Agent本地部署前端后端工作流自动化【免费下载链接】hermes-studioEkko Studio is a local-first AI workspace for multi-agent chat, coding, and visual workflows, available on desktop and the web.项目地址https://gitcode.com/gh_mirrors/he/hermes-studio点击查看免费下载本文围绕 Ekko Studio本仓库即 hermes-studio自带的 Docker Compose 部署方案展开完整讲解两种启动方式拉取预构建镜像 / 源码构建、全部运行时环境变量、数据卷挂载与 Coding Agent 持久化策略并结合 docker-compose.yml、Dockerfile 以及服务端源码如 cli.ts、autostart.ts、config.ts揭示HERMES_BIN、托管网关managed gateway等关键机制的底层实现。读完本文你将能够独立完成 Ekko Studio 的容器化部署、按需调整端口与数据目录、安全持久化 Coding Agent 安装并解决 Token 丢失、补丁注入等常见运维问题。快速开始仓库根目录的 docker-compose.yml 是一套完全由环境变量驱动的编排文件所有关键运行参数都可以通过变量覆盖无需修改 Compose 文件本身。方式一拉取预构建镜像推荐WEBUI_IMAGEekkoye8888/hermes-web-ui docker compose up -d docker compose logs -f hermes-webui启动后打开浏览器访问http://localhost:6060即可看到 Web UI 仪表盘。其中WEBUI_IMAGE指定了要使用的镜像 tag仓库默认构建标签为hermes-web-ui-local:latest本地镜像显式赋值为ekkoye8888/hermes-web-ui才会从镜像仓库拉取官方预构建产物。方式二从源码构建docker compose up -d --build docker compose logs -f hermes-webui--build会依据 Dockerfile 在本地执行完整构建流程。该 Dockerfile 的关键步骤包括以nousresearch/hermes-agent:latest为基础镜像可用HERMES_AGENT_IMAGE覆盖并安装ca-certificates、curl、ffmpeg、make、g等运行与编译依赖按架构amd64 取x64下载并解压 Node.jsv24.15.0替换基础镜像自带的 Node 运行时设置NODE_OPTIONS--max-old-space-size4096提升构建期 Node 内存上限防止大依赖安装时 OOM执行npm ci --ignore-scripts npm rebuild node-pty随后npm run build npm prune --omitdev再运行npm run verify:sharp-runtime校验 Sharp 图像处理运行时显式覆盖基础镜像的默认启动脚本以ENTRYPOINT [/app/bin/start-studio-all.sh]保证镜像可独立启动。服务拓扑单一 hermes-webui 服务本 Compose 编排只运行一个服务hermes-webui—— 集成 Hermes Agent 运行时的 Web UI 仪表盘预构建镜像或源码构建产物均可。该容器基于nousresearch/hermes-agent基础镜像内部通过 Hermes CLI 与 agent bridge 运行时完成聊天执行。容器在启动时会执行 profile 网关gateway的检查与自启但本 Compose 编排不会对外暴露任何 Hermes gateway 端口——网关仅作为容器内部运行时使用。环境变量详解核心变量总表以下为 Compose 暴露的全部关键运行时设置即 docker-compose.yml 中environment段与端口/卷映射中使用的变量变量默认值说明PORT6060Web UI 监听端口同时用于端口映射与容器内PORT环境变量BIND_HOST0.0.0.0Web UI 绑定地址。默认使用 IPv4以保证 WSL/Windows 下浏览器访问稳定如需监听 IPv6 请显式设为::CORS_ORIGINS仅同源主机跨域来源白名单逗号或空格分隔作用于 HTTP、Socket.IO 与 WebSocket 请求仅在确实需要传统通配 CORS 时才设为*HERMES_LAN_ADVERTISE_URL未设置当浏览器来源为 localhost 时写入 App LAN 二维码的可达 Docker 主机地址例如http://192.168.1.20:6060HERMES_APP_ENTITLEMENT_REQUIREDtrueApp LAN relay 连接是否要求 RS256 云侧 entitlementHERMES_APP_ENTITLEMENT_PUBLIC_KEY内置App entitlement 校验使用的可选 PEM 公钥覆盖HERMES_BIN/opt/hermes/.venv/bin/hermesHermes CLI 二进制路径HERMES_AGENT_IMAGEnousresearch/hermes-agent:latestHermes Agent 基础镜像仅在构建阶段使用WEBUI_IMAGEhermes-web-ui-local:latestWeb UI 镜像 tag设为ekkoye8888/hermes-web-ui使用预构建产物HERMES_DATA_DIR./hermes_dataHermes 运行时数据目录宿主机侧挂载源Compose 内部固化变量与附加可覆盖项除上表外docker-compose.yml 还固化了以下容器内环境变量部分支持外部覆盖HERMES_HOME/home/agent/.hermesHermes 运行时主目录即数据卷容器内挂载点HERMES_WEB_UI_MANAGED_GATEWAY1启用 Web UI 托管网关模式详见下文运行时行为HERMES_WEB_UI_AUTH_JWT_EXPIRES_IN${HERMES_WEB_UI_AUTH_JWT_EXPIRES_IN:-30d}用户名/密码会话 JWT 有效期支持秒或s/m/h/d后缀HERMES_WEB_UI_XAI_CALLBACK_BIND_HOST0.0.0.0xAI OAuth 回调绑定地址HERMES_PATCH_SCRIPT${HERMES_PATCH_SCRIPT:-}可选 Hermes 启动补丁脚本路径默认空即不启用NPM_CONFIG_PREFIX/home/agent/.hermes-web-ui/coding-agent/npm与对应PATH前缀让 Coding Agent 安装落在持久数据卷内HERMES_ALLOW_ROOT_GATEWAY1允许以 root 运行网关进程WEBUI_CONTAINER_NAME默认hermes-webui、PREVIEW_FRONTEND_PORT默认8651、XAI_OAUTH_PORT默认56121容器名与两个附加端口映射。如何覆盖变量直接从 shell 覆盖PORT16060 docker compose up -d或在项目根目录创建.env文件WEBUI_IMAGEekkoye8888/hermes-web-ui PORT6060.env文件中的键值会被 Compose 自动读取并参与变量替换。注意HERMES_AGENT_IMAGE仅在构建时生效修改后需重新执行docker compose up -d --build。源码中的变量解析逻辑config.ts 是这些变量的服务端解析入口其中几个关键实现值得关注getListenHost()读取BIND_HOST为空时回退0.0.0.0注释明确说明默认 IPv4 是为了 WSL/Windows 浏览器访问稳定getWebUiHome()依次读取HERMES_WEB_UI_HOME、兼容别名HERMES_WEBUI_STATE_DIR最终回退到join(homedir(), .hermes-web-ui)——这解释了为何容器内数据落在/home/agent/.hermes-web-uigetLanAdvertiseUrl()对HERMES_LAN_ADVERTISE_URL做严格校验仅接受http:/https:协议、不含用户名密码且具有合法 hostname 的 origin非法值会被静默丢弃isAppEntitlementRequired()将HERMES_APP_ENTITLEMENT_REQUIRED归一化后判断只有0/false/no/off才能关闭 entitlement 校验getCorsOrigins()读取CORS_ORIGINS空串表示仅同源主机。数据持久化挂载映射宿主机路径容器内路径内容${HERMES_DATA_DIR}./hermes_data/home/agent/.hermesHermes 运行时数据会话、配置、profiles${HERMES_DATA_DIR}/hermes-web-ui/home/agent/.hermes-web-uiWeb UI 数据认证 token 等两条挂载规则保证了docker compose down不会丢失任何数据重新up后会话与配置依然完整。认证 Token 机制首次运行时Web UI 会自动生成认证 token并打印到容器日志token 文件位于容器内/home/agent/.hermes-web-ui/.token即宿主机./hermes_data/hermes-web-ui/.token删除该 token 文件并重启容器会生成一个新 token。Coding Agent 安装的持久化从 Studio 安装的 Coding AgentClaude Code、Codex、Pi、OpenCode、Grok使用 npm 全局前缀/home/agent/.hermes-web-ui/coding-agent/npm。镜像与 Compose 已将该目录的bin子目录加入PATH。由于该前缀落在已挂载的数据卷内默认挂载下包与可执行链接保存在宿主机${HERMES_DATA_DIR}/hermes-web-ui/coding-agent/npm容器重建或镜像升级后这些安装依然可用Studio 的 Pi MCP 适配器与作用域化的 agent 配置同样复用 Studio 既有数据卷。升级旧镜像的注意事项较老的镜像会把这些 CLI 安装在数据卷之外。升级后请从 Studio 中重新安装一次受影响的 agent使其落入持久目录。需要注意旧容器已被删除时丢失的包无法从新镜像中找回新镜像不包含这些安装同一容器重启通常保留其可写文件系统但容器重建会替换它。自定义部署建议对于自定义部署应持久化/home/agent/.hermes-web-ui或将NPM_CONFIG_PREFIX指向自有持久挂载内的目录并把$NPM_CONFIG_PREFIX/bin加入PATH。切勿把/usr/local作为挂载点覆盖——该目录包含镜像内置的 Node.js 运行时。此外/home/agent下的原生 CLI 登录/配置目录与 npm 安装相互独立如果使用原生全局登录并希望跨重建保留需要一并挂载这些目录。端口映射端口说明${PORT}默认6060Web UI 仪表盘${PREVIEW_FRONTEND_PORT}默认8651前端预览Compose 附加映射${XAI_OAUTH_PORT}默认56121xAI OAuth 回调Compose 附加映射本 Compose 编排不暴露任何 Hermes gateway 端口。网关仅作为容器内部进程运行对外不可达。运行时行为与源码解析HERMES_BIN 的解析链容器内 Hermes CLI 路径由HERMES_BIN决定默认/opt/hermes/.venv/bin/hermes。从源码可以确认一致的解析规则cli.ts 中的resolveHermesBin()返回process.env.HERMES_BIN?.trim() || hermesautostart.ts 的resolveHermesBin()使用完全相同的逻辑runtime/path.ts 与 runtime/process.ts 同样优先读取HERMES_BIN未提供时回退到PATH中的hermes命令Python 侧 bridge_runtime.py 亦采用os.environ.get(HERMES_BIN, hermes)的等价逻辑。也就是说即使不依赖 Compose 默认值只要容器PATH中存在hermes服务端也能自动发现 CLI显式设置HERMES_BIN则拥有最高优先级。托管网关Managed Gateway模式Compose 通过HERMES_WEB_UI_MANAGED_GATEWAY1启用 Web UI 托管网关autostart.ts 中shouldUseManagedGatewayRun()检查该变量仅当值为0/false/no/off时才回退到hermes gateway start的 CLI 服务方式否则一律采用后台gateway run托管方式ensureProfileGatewaysRunning()在 Web UI 启动时一次性检查各 profile 的网关状态缺失则启动还支持按gatewayAutoStart策略做 include/exclude 过滤以及 unified 模式需要强调的是Docker 部署下不存在周期性网关恢复循环网关检查仅发生在启动阶段。相关描述与文档 docs/docker.md 中的说明一致。Profile 会话与 Agent Bridge每个 profile 的聊天运行通过 Hermes agent bridge 处理所选/请求的 profile 会按账号授权后随运行时请求传递在前端切换 Hermes Profile不会重启 bridge也不会清空其他正在运行的任务cli.ts 通过existsSync(/.dockerenv)检测容器环境isDocker在 Docker 下启动网关时改用spawn(hermes, [gateway, run], { detached: true })的后台进程方式规避容器内无 launchd/systemd 的问题。可选 Hermes 启动补丁镜像通过/app/bin/start-studio-all.sh启动见 bin/start-studio-all.sh默认不应用任何 Hermes Agent 源码补丁。脚本的补丁逻辑为若设置了HERMES_PATCH_SCRIPT且文件存在则以bash执行脚本缺失或执行失败仅打印[studio] optional Hermes patch ...警告后继续启动 Web UI最后exec node $SCRIPT_DIR/../dist/server/index.js $进入服务主进程。这种可选补丁设计确保为旧版 Hermes Agent 布局编写的补丁不会导致容器陷入重启循环。启用方式在 Compose 中挂载部署方拥有的补丁脚本并在.env中设置HERMES_PATCH_SCRIPT。例如增加一个 override 文件services: hermes-webui: volumes: - ./hermes_patches:/opt/data:ro environment: HERMES_PATCH_SCRIPT: /opt/data/apply-hermes-patches.sh注意事项补丁脚本归部署方所有必须与已安装的 Hermes Agent 版本保持兼容应使用镜像内置 entrypoint 与HERMES_PATCH_SCRIPT机制注入可选补丁而不是用自定义 entrypoint 直接调用补丁脚本——后者不在镜像的启动契约内Compose 仅透传HERMES_PATCH_SCRIPT变量默认不启用任何补丁。常用运维操作强制重建容器保留数据卷应用新配置docker compose up -d --force-recreate查看认证 tokendocker compose logs hermes-webui | grep token # 或直接读取 token 文件 cat ./hermes_data/hermes-web-ui/.token停止服务数据卷保留可随时恢复docker compose down实时跟踪日志docker compose logs -f hermes-webui小结Ekko Studio 的 Docker Compose 方案将单服务 环境变量驱动 数据卷持久化作为核心设计PORT/BIND_HOST/CORS_ORIGINS等监听参数、HERMES_BIN/HERMES_WEB_UI_MANAGED_GATEWAY等运行时参数、HERMES_DATA_DIR等数据路径全部可无侵入覆盖Coding Agent 通过NPM_CONFIG_PREFIX落在持久卷内从容应对容器重建与镜像升级可选补丁机制保证了部署方扩展的容错性。若需进一步研究网关自启策略unified/per-profile 模式、include/exclude 策略或 profile 管理细节可继续阅读 autostart.ts 与 config.ts 的完整实现。赞分享AI 应用人工智能AI Agent本地部署前端后端工作流自动化【免费下载链接】hermes-studioEkko Studio is a local-first AI workspace for multi-agent chat, coding, and visual workflows, available on desktop and the web.项目地址https://gitcode.com/gh_mirrors/he/hermes-studio点击查看免费下载相关推荐复刻 Sanity 暗色设计系统基于 popular-web-designs 技能模板的 Agent 网页生成实战指南复刻 Sanity 暗色设计系统基于 popular web designs 技能模板的 Agent 网页生成实战指南 导读 本文围绕 qm 仓库中 skil后端人工智能AI Agent前端AI 技能告别数据丢失Audiobookshelf Docker部署的环境变量与持久化实战指南告别数据丢失Audiobookshelf Docker部署的环境变量与持久化实战指南 你是否曾因Docker容器重启导致 audiobook 收藏消失是否在后端音视频前端Argilla 使用 docker-compose 部署Elasticsearch 编排、数据持久化与运维实践Argilla 使用 docker compose 部署Elasticsearch 编排、数据持久化与运维实践 导读 本文以 Argilla 官方安装文档中数据标注人工智能NLPMLOpsRAG上一篇Gutenberg 组件库中的 ToolbarDropdownMenu让工具栏内的下拉菜单遵循 WAI-ARIA 键盘交互模式下一篇? 推荐ts-comments.nvim - 提升你的Neovim注释体验创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
