1. 项目概述一个面向自主智能体集群的运行时中立控制平面如果你正在或计划在生产环境中部署和管理多个AI智能体无论是OpenClaw还是Hermes那么你很可能已经意识到一个核心痛点除了智能体运行时本身你还需要一整套围绕它的运维层。这包括部署工作流、密钥管理、监控、日志、终端访问、模板市场以及一个独立的管理界面。每次更换或升级运行时这套运维层就可能需要推倒重来。Nora的出现就是为了终结这种重复造轮子的局面。简单来说Nora是一个开源的、运行时中立的智能体运维平台。它的核心价值在于让你能将控制平面部署在自己掌控的基础设施上通过一个统一的界面来管理OpenClaw和Hermes智能体集群。你可以从一个简单的Docker主机开始随着业务增长扩展到更复杂的执行目标如Kubernetes集群而无需更换整个运维层。对于关心基础设施所有权、可观测性、可重复操作并且不希望被单一运行时家族深度绑定的技术团队而言Nora提供了一个比自研更快的、可用的控制平面解决方案。1.1 核心需求解析为什么我们需要运行时中立的控制平面在当前的AI智能体生态中OpenClaw和Hermes是两个重要的运行时家族它们各有侧重和优势。一个团队可能因为特定需求如对特定模型的支持、性能表现、社区生态而选择其中一个也可能在不同的业务场景下同时使用两者。这就带来了几个现实的运维挑战挑战一工具链碎片化。每个运行时通常自带一套管理工具或推荐特定的部署方式。管理OpenClaw集群可能用一套脚本和监控面板管理Hermes又是另一套。运维人员需要在多个界面和命令行工具之间切换增加了认知负担和操作失误的风险。挑战二运维经验无法沉淀。当团队为OpenClaw构建了完善的密钥轮换、日志聚合和健康检查流程后切换到Hermes时这些经验很难直接复用。底层API和架构的差异导致上层的运维逻辑需要重新设计和实现。挑战三基础设施锁定风险。如果过度依赖某个运行时特定的商业平台或托管服务一旦该运行时的发展路线与团队需求不符或者平台方调整策略迁移成本会非常高。将控制平面掌握在自己手中是降低这种风险的关键。Nora的设计哲学正是为了解决这些问题。它不试图成为另一个智能体运行时而是作为一个“胶水层”或“统一控制台”抽象出智能体运维的通用操作部署、监控、密钥管理、文件访问等并通过适配器模式对接不同的运行时。这样无论底层是OpenClaw还是Hermes对运维人员而言操作界面和流程都是一致的。团队可以基于统一的控制平面沉淀出一套标准的智能体运维规范。1.2 目标用户与适用场景Nora并非一个面向所有人的通用工具它的设计有明确的针对性。它最适合以下几类用户内部AI平台团队正在为公司内部标准化一套AI智能体运维层需要支持多种运行时并希望拥有完全的基础设施控制权。技术产品团队已经在生产环境中运行OpenClaw或Hermes智能体并受困于手工运维、缺乏统一视图和自动化部署的团队。运维导向的开发者对“基础设施即代码”和可观测性有强烈诉求不满足于黑盒托管服务希望深入理解并控制智能体运行的每一个环节。服务提供商计划为客户提供基于智能体的托管服务但希望将控制平面和客户数据部署在自己管理的基础设施上以符合安全合规要求。相反Nora并不试图成为一个低代码的自动化玩具也不是一个模糊的“AI劳动力”包装器。它的界面和操作需要一定的技术背景核心价值在于为严肃的生产环境提供可靠、透明、可扩展的运维能力。2. 架构设计与核心特性Nora的架构清晰地区分了控制平面和运行时平面这种分离是其实现运行时中立性的基石。理解这套架构有助于我们在部署和扩展时做出正确的决策。2.1 整体架构拆解Nora采用典型的分层微服务架构通过Nginx作为统一的入口网关Nginx (反向代理/网关) ├── / → 前端-营销页面 (Next.js)展示项目、登录、注册、许可证信息。 ├── /app/* → 前端-操作台 (Next.js)核心的用户工作空间用于管理智能体、部署、市场等。 ├── /admin/* → 前端-管理台 (Next.js)平台级的管理界面用于审核、队列监控、全局设置等。 └── /api/* → 后端-API (Express.js)提供所有业务逻辑的RESTful API。 ├── PostgreSQL存储用户、智能体、配置、市场模板等核心元数据。 ├── Redis BullMQ作为任务队列处理耗时的部署、销毁、备份等异步作业。 ├── worker-provisioner专用的“供应器”工作进程负责与Docker、K8s等后端基础设施交互。 └── runtime adapters运行时适配器抽象出对OpenClaw和Hermes的具体操作接口。为什么这样设计前后端分离前端Next.js负责渲染和用户交互后端Express.js提供无状态API。这使得前端可以独立迭代也便于未来开发移动端或CLI客户端。操作台与管理台分离/app和/admin的路径隔离在物理和逻辑上区分了普通用户操作和系统管理员操作。这符合最小权限原则普通用户无法访问管理功能提升了安全性。异步任务队列智能体的创建、销毁等操作可能耗时较长通过BullMQ基于Redis将其异步化可以避免HTTP请求超时并提供任务状态跟踪和重试机制提升了系统的可靠性和用户体验。适配器模式runtime adapters是关键。它将OpenClaw和Hermes的特定API封装成统一的内部接口例如startAgent,getLogs,executeCommand。当需要支持新的运行时例如未来的AutoGPT或自定义智能体框架时只需实现一个新的适配器而无需修改核心的控制平面逻辑。2.2 核心特性深度解读Nora的特性围绕“统一控制”和“深度可观测”展开以下是一些关键特性的背后逻辑统一的智能体部署与管理在Nora中部署一个OpenClaw智能体和一个Hermes智能体的流程是相似的选择运行时家族 - 选择部署后端Docker/K8s- 配置资源 - 启动。这屏蔽了底层差异。例如部署OpenClaw可能需要拉取特定的Docker镜像并配置环境变量而部署Hermes可能是启动一个包含WebUI的服务。Nora的供应器工作进程worker-provisioner会根据选择调用不同的脚本或K8s Operator来完成这些具体工作。现有运行时迁移这是Nora的亮点功能。它支持通过两种方式“接管”已有的智能体捆绑包上传将现有运行时的关键文件如配置文件、工作空间打包成一个Nora专用的.nora-bundle压缩文件上传。Nora会解析这个包提取出它能理解的配置如环境变量、启动命令并以此为基础创建一个新的、由Nora管理的智能体。实时Docker/SSH检查直接提供现有运行时的容器ID或主机SSH连接信息Nora会在线检查其状态和配置并生成一个迁移预览。这里有一个重要细节Nora的迁移是“重建”而非“原地接管”。它会基于检查结果创建一个配置相同的新智能体而不是直接控制旧容器。这保证了Nora管理状态的一致性也避免了直接操作未知状态的外部容器可能带来的风险。运行时验证与深度检查统一日志流Nora会通过适配器收集运行时容器的标准输出和标准错误流并进行聚合、分页和搜索。对于OpenClaw这可能还需要通过其Gateway API获取内部日志对于Hermes则可能直接对接其WebSocket日志接口。终端访问Nora提供了一个基于Web的终端它实际上是一个代理。当你在Nora界面上点击“打开终端”时后端API会通过适配器在目标容器内创建一个exec会话并将这个会话的流stdin, stdout, stderr通过WebSocket转发到你的浏览器。这要求Nora的后端服务有权限在目标Docker守护进程或K8s集群上执行docker exec或kubectl exec命令。实时文件系统浏览这可能是最强大的特性之一。Nora通过适配器挂载了运行时容器的文件系统并将其分为“只读系统根目录”和“可写工作空间”。你可以像使用文件管理器一样浏览、下载甚至在线编辑文件如修改Python脚本。其实现通常依赖于在容器内运行一个轻量的文件服务如rclone serve或使用Docker的/proc/pid/root魔法链接需要特权模式Nora的前端再通过后端代理来访问这个服务。集中化的密钥与集成管理所有LLM提供商如OpenAI、Anthropic的API密钥都在Nora的“设置”中集中管理并采用AES-256-GCM加密后存入数据库。当一个智能体启动时Nora会根据其配置将所需的密钥通过环境变量或配置文件注入到运行时容器中。这意味着你无需在每个智能体的配置里重复填写密钥也便于在密钥泄露时进行全局轮换。安全提醒尽管Nora加密了静态存储的密钥但密钥在注入到运行时的瞬间是明文的。因此确保运行时容器本身的安全例如使用非特权用户运行、限制网络访问同样至关重要。市场与模板Nora内置了一个模板市场你可以将一套成熟的智能体配置包括运行时选择、环境变量、启动脚本、甚至预装的文件保存为模板并发布。其他团队成员或社区用户可以直接基于模板一键部署一个功能完整的智能体。这极大地促进了最佳实践的共享和标准化部署。模板本质上是一个增强版的Nora捆绑包包含了更多的元数据如描述、分类、截图和部署参数表单。3. 部署模式与运行时支持现状Nora的设计支持从简单到复杂的多种部署路径但公开版本中并非所有路径都已达到同等成熟度。了解当前状态能帮助你选择最适合的起步方案。3.1 部署路径详解路径当前状态最佳适用场景技术要点与注意事项单主机 Nora OpenClaw Docker正式可用 (GA)评估测试、小型内部环境、最清晰的首个生产路径。这是最成熟、文档最全的路径。所有服务Nora自身、PostgreSQL、Redis和OpenClaw运行时都运行在同一台主机的Docker中。网络简单调试方便。注意生产环境需考虑数据持久化数据库卷和宿主机资源监控。Nora控制平面部署于公有云或本地数据中心支持团队希望将控制平面置于已有的、更健壮的基础设施中。Nora的控制平面API、数据库、队列可以部署在云服务器或内部K8s集群上。而智能体运行时Docker后端则可以部署在另一组“工作节点”上。这需要配置DOCKER_HOST环境变量或TLS证书让Nora的供应器能远程连接工作节点的Docker守护进程。网络和安全策略是此模式下的配置重点。Nora OpenClaw Kubernetes测试版 (Beta)需要超越本地Docker主机在共享的K8s集群中进行工作负载调度的环境。Nora通过一个Kubernetes供应器工作进程使用ServiceAccount和RBAC权限在指定命名空间内创建Deployment、Service等资源来运行OpenClaw Pod。你需要为Nora配置正确的kubeconfig文件。注意Beta状态意味着API可能变动且一些高级特性如HPA自动伸缩可能尚未集成。Nora NemoClaw OpenClaw实验性 (Experimental)需要更强沙箱隔离特别是基于NVIDIA/OpenShell策略控制的场景。NemoClaw是NVIDIA提供的一个安全沙箱方案。此路径下OpenClaw运行时并非运行在普通Docker容器内而是在一个由NemoClaw管理的、隔离性更强的环境中。这需要额外的NVIDIA API密钥和特定的主机环境支持。仅适用于有特定安全合规要求的场景。Nora Hermes Docker实验性 (Experimental)希望在Nora的“部署优先”契约下验证Hermes运行时的团队。Hermes适配器正在积极开发中。目前支持基本的部署、WebUI访问、日志和终端。但可能尚未完全达到与OpenClaw适配器同等的功能完备性如完整的文件系统浏览、高级监控。适合早期尝鲜和反馈。Nora OpenClaw Proxmox当前公开版本中受阻希望利用Proxmox虚拟化平台运行智能体的用户。代码库中已可见相关适配器目录和配置项但尚未达到可稳定使用的发布状态。如果你需要此功能可能需要关注项目进展或自行尝试贡献代码。3.2 运行时家族支持对比Nora目前主要支持两大运行时家族它们在Nora中的集成方式和暴露的能力存在差异特性OpenClaw 运行时Hermes 运行时说明部署成熟度高 (GA)中 (Experimental)OpenClaw是默认路径经过更多生产验证。UI集成通过Gateway集成内嵌其原生WebUIOpenClaw的UI被深度整合到Nora界面标签页中。Hermes则通过iframe或链接打开其独立WebUI。日志收集支持stdout/stderr Gateway API支持stdout/stderr两者都能获取基础日志。OpenClaw可能能通过其API获得更结构化的内部日志。终端访问支持支持均通过容器exec实现。文件系统浏览支持读写工作空间只读系统支持实验性OpenClaw的文件浏览功能更完善。Hermes的支持可能受其内部文件服务接口限制。配置同步支持环境变量、配置文件注入支持环境变量注入密钥等配置均通过Nora集中管理并同步。监控指标基础资源监控CPU/内存基础资源监控CPU/内存均通过Docker/K8s API获取容器/Pod的基础资源使用情况。应用层自定义指标尚在规划中。实操心得对于新项目如果无历史包袱建议从“单主机 Nora OpenClaw Docker”路径开始。这是最稳定、社区支持最好的方式。当你需要更强大的资源调度和弹性时再考虑迁移到Kubernetes后端。同时运行OpenClaw和Hermes是可行的但请理解Hermes路径可能遇到更多边界情况适合用于非核心业务的探索。4. 实战部署从零搭建一个生产可用的Nora平台假设我们在一台Ubuntu 22.04 LTS的云服务器上部署一个面向小团队内部使用的Nora平台使用最成熟的OpenClaw Docker路径。4.1 环境准备与前置检查首先确保你的服务器满足最低要求并进行必要的系统更新。# 更新系统包列表并升级现有包 sudo apt update sudo apt upgrade -y # 安装基础工具 sudo apt install -y curl wget git vim net-tools # 检查内核版本建议 5.x uname -r # 检查可用内存和磁盘空间建议内存 4GB磁盘 20GB free -h df -h /接下来安装Docker和Docker Compose。这是Nora运行的基础。# 卸载旧版本Docker如果存在 sudo apt remove docker docker-engine docker.io containerd runc -y # 安装依赖添加Docker官方GPG密钥和仓库 sudo apt install -y ca-certificates curl gnupg sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod ar /etc/apt/keyrings/docker.gpg echo \ deb [arch$(dpkg --print-architecture) signed-by/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release echo $VERSION_CODENAME) stable | \ sudo tee /etc/apt/sources.list.d/docker.list /dev/null # 安装Docker Engine和Compose插件 sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin # 验证安装 docker --version docker compose version # 将当前用户加入docker组避免每次使用sudo操作后需退出重新登录生效 sudo usermod -aG docker $USER echo 请注销并重新登录或执行 newgrp docker 以使组权限生效。注意在生产环境中更安全的做法是配置Docker守护进程的TLS认证而不是简单地将用户加入docker组。但对于内部测试或小团队环境后者更为简便。4.2 使用安装脚本快速部署Nora提供了自动化安装脚本这是最快、最推荐的方式。它会处理克隆仓库、生成配置文件、启动服务等一系列操作。# 使用curl下载并执行安装脚本 curl -fsSL https://raw.githubusercontent.com/solomon2773/nora/master/setup.sh | bash安装脚本会交互式地询问你几个问题安装路径默认会在当前目录创建nora文件夹。访问模式local仅本地访问http://localhost:8080。适合在本地开发机或通过SSH隧道访问的服务器。public公开域名访问。需要你已拥有一个域名并正确配置了DNS解析指向服务器IP。脚本会引导你配置Nginx和可选的TLSHTTPS。平台模式selfhosted自托管模式。所有功能免费无用户计费。paas平台即服务模式。启用Stripe集成可用于你运营自己的多租户SaaS服务。对于自用选择selfhosted。启用运行时和后台通常选择启用OpenClaw和Docker后端。如果你也想尝试Hermes可以同时勾选。初始化管理员账户建议设置一个强密码的邮箱账户。脚本运行完成后它会尝试启动Docker Compose服务。你可以用以下命令检查服务状态# 进入Nora目录如果脚本在其他目录运行 cd nora # 查看所有容器状态 docker compose ps # 查看实时日志按CtrlC退出 docker compose logs -f如果一切正常你应该能看到frontend-marketing,frontend-dashboard,backend-api,postgres,redis等容器处于running状态。此时根据你选择的访问模式在浏览器中打开http://你的服务器IP:8080或https://你的域名就能看到Nora的登录页面了。4.3 手动配置详解高级如果你需要更精细的控制或者安装脚本在某些特定环境下失败可以手动进行配置。这能让你更深入地理解Nora的组件。# 1. 克隆代码库 git clone https://github.com/solomon2773/nora.git cd nora # 2. 复制环境变量示例文件并编辑 cp .env.example .env vim .env # 或使用你喜欢的编辑器以下是一个针对公开访问、启用OpenClaw和Docker的最小化.env配置示例# 必需的核心密钥 # 使用 openssl rand -base64 32 生成 JWT_SECRET你的32位以上随机字符串 # 使用 openssl rand -hex 32 生成 ENCRYPTION_KEY你的64位十六进制字符串 # 使用 openssl rand -base64 32 生成 NEXTAUTH_SECRET你的32位以上随机字符串 # 数据库密码 DB_PASSWORD一个强密码 # 访问与URL配置 # 使用公开Nginx配置 NGINX_CONFIG_FILEnginx.public.conf # Nginx监听端口HTTP NGINX_HTTP_PORT80 # 你希望用户访问的完整基础URL必须是HTTPS如果配置了TLS NEXTAUTH_URLhttps://your-domain.com # 允许的CORS来源通常与NEXTAUTH_URL一致 CORS_ORIGINShttps://your-domain.com # 运行时与后端配置 ENABLED_RUNTIME_FAMILIESopenclaw ENABLED_BACKENDSdocker # 可选初始化管理员 DEFAULT_ADMIN_EMAILadminyour-company.com DEFAULT_ADMIN_PASSWORD一个非常强的密码 # 平台模式 PLATFORM_MODEselfhosted # 其他保持默认即可 DB_HOSTpostgres DB_USERnora DB_NAMEnora DB_PORT5432 REDIS_HOSTredis REDIS_PORT6379 PORT3000关键配置解析JWT_SECRET,ENCRYPTION_KEY,NEXTAUTH_SECRET这三个密钥至关重要用于签名令牌、加密数据库中的敏感数据如API密钥和维持会话安全。务必使用强随机值且每个部署环境都应不同。泄露这些密钥等同于泄露系统。NEXTAUTH_URL和CORS_ORIGINS在公开部署时必须设置为你的实际域名且如果使用了HTTPS必须包含https://协议头。配置错误会导致登录回调失败和API请求被阻止。ENABLED_RUNTIME_FAMILIES和ENABLED_BACKENDS按需启用。只启用你需要的可以减少攻击面和不必要的资源消耗。配置Nginx和HTTPS 手动模式下你需要基于模板创建Nginx配置并设置HTTPS。# 复制公开Nginx配置模板 cp infra/nginx_public.conf.template nginx.public.conf # 编辑 nginx.public.conf将 your-domain.com 替换为你的域名 vim nginx.public.conf对于生产环境强烈建议启用HTTPS。你可以使用Nora提供的脚本基于Certbot自动获取和配置Let‘s Encrypt免费证书# 确保80和443端口已开放且域名DNS已指向本机 DOMAINyour-domain.com EMAILadminyour-company.com ./infra/setup-tls.sh这个脚本会自动修改nginx.public.conf并设置证书自动续期。如果脚本不适用你的环境你也可以手动配置Nginx与已有的证书。最后启动服务# 构建并启动所有服务-d 表示后台运行 docker compose up -d --build # 观察启动日志确保无报错 docker compose logs -f backend-api4.4 初始配置与第一个智能体服务启动后访问你的Nora地址如https://your-domain.com。创建账户使用你在.env中设置的DEFAULT_ADMIN_EMAIL和密码登录或者点击“Sign Up”注册一个新账户第一个注册的用户会自动成为管理员。添加LLM提供商密钥登录后点击左侧导航栏的Settings然后进入Providers标签页。在这里添加你需要的API密钥例如OpenAI的API Key。这些密钥会被加密存储并在部署智能体时自动注入。部署第一个智能体点击Deploy。选择Blank Deploy全新部署。在“Runtime Family”中选择OpenClaw。在“Backend”中选择docker。为你的智能体起个名字如my-first-agent并分配适当的CPU、内存和磁盘资源。对于测试1 CPU核心2GB内存10GB磁盘是个不错的起点。点击Deploy。你将被转到智能体详情页可以看到部署日志和状态。当状态变为“Running”时表示部署成功。探索智能体在智能体详情页你可以看到多个标签页Overview概览、Logs日志、Terminal终端、Files文件、Settings设置。点击Logs可以查看实时日志。点击Terminal可以打开一个交互式Bash终端直接在里面运行命令。点击Files可以浏览容器内的文件系统。/workspace通常是可写的项目目录而/根目录是只读的系统目录。顶部通常有一个链接或按钮如“Open UI”可以直接打开OpenClaw的原生Web界面进行交互。至此你已经成功部署并运行了第一个由Nora管理的AI智能体。5. 运维、监控与故障排查将Nora用于生产环境除了部署还需要考虑日常运维、监控和问题处理。5.1 数据持久化与备份默认的Docker Compose配置中PostgreSQL数据库的数据是存储在名为nora_postgres_data的Docker卷中的。这保证了容器重启后数据不丢失。但你仍然需要定期备份。# 进入Nora目录 cd /path/to/nora # 方法1使用docker exec执行pg_dump推荐 docker compose exec postgres pg_dump -U nora nora nora_backup_$(date %Y%m%d).sql # 方法2备份整个数据卷更彻底 docker run --rm -v nora_postgres_data:/source -v $(pwd):/backup alpine tar czf /backup/postgres_data_$(date %Y%m%d).tar.gz -C /source .备份策略建议至少每天执行一次数据库逻辑备份pg_dump并定期如每周备份整个数据卷。将备份文件传输到另一台机器或对象存储服务如AWS S3、MinIO进行异地保存。5.2 日志收集与监控Nora自身日志使用docker compose logs -f可以查看实时日志。对于生产环境建议配置Docker的日志驱动将日志发送到集中式日志系统如ELK Stack、Loki或云服务商的日志服务。# 在docker-compose.yml中为每个服务配置日志驱动示例需修改原文件 # services: # backend-api: # ... # logging: # driver: json-file # options: # max-size: 10m # max-file: 3智能体运行时日志Nora的界面提供了每个智能体的日志查看功能。但对于大规模的日志分析和长期存储你可能需要额外配置。可以考虑在部署智能体时通过Docker的日志驱动将其stdout/stderr直接发送到外部日志系统。使用Nora的API未来版本可能提供定期拉取日志并转发。在智能体容器内安装轻量的日志转发agent如Fluent Bit。系统监控监控宿主机和Docker容器的资源使用情况CPU、内存、磁盘、网络。可以使用Prometheus Grafana组合使用cAdvisor监控Docker容器资源。使用node_exporter监控宿主机资源。配置Grafana仪表板进行可视化告警。5.3 常见问题与排查技巧以下是一些在实际操作中可能遇到的问题及解决方法问题1部署智能体时卡在“Provisioning”状态最后失败。排查思路检查Docker资源运行docker system df和docker stats查看是否磁盘空间不足或内存耗尽。检查供应器工作进程日志docker compose logs worker-provisioner。这里会有最详细的错误信息。常见错误包括Cannot connect to the Docker daemonDocker守护进程未运行或当前用户无权限。确保Docker服务正在运行且运行Nora的用户在docker组内。No such image拉取Docker镜像失败。可能是网络问题或镜像名称错误。尝试手动docker pull一下对应的OpenClaw或Hermes镜像。Port already allocated指定的主机端口已被占用。在Nora部署配置中更换一个端口。检查后端API日志docker compose logs backend-api看是否有前置的API请求错误。问题2无法通过Nora的终端或文件浏览器访问智能体。排查思路确认智能体状态首先确保智能体处于“Running”状态。检查容器内进程通过宿主机命令行执行docker exec -it 容器名 sh看是否能进入容器。如果不能可能是容器启动失败或立即退出了。检查Nora适配器配置对于OpenClawNora需要能访问其Gateway API。确保OpenClaw容器内的Gateway服务已正确启动并监听在预期端口默认可能是3000。检查Nora的OpenClaw适配器配置是否正确指向了这个内部端口。查看浏览器开发者工具打开浏览器的网络Network标签页尝试执行终端或文件操作观察哪个API请求失败了以及返回的错误信息。问题3忘记管理员密码。解决方法可以通过直接操作数据库来重置密码。# 进入PostgreSQL容器 docker compose exec postgres psql -U nora -d nora # 在psql命令行中更新对应用户的密码假设邮箱是 adminexample.com # Nora使用bcrypt加密密码我们需要生成一个bcrypt哈希。 # 可以先在另一个终端用Node.js生成例如node -e console.log(require(bcryptjs).hashSync(你的新密码, 10)) # 假设生成的哈希是 $2a$10$... UPDATE users SET password $2a$10$...生成的哈希值... WHERE email adminexample.com; \q问题4如何升级Nora到新版本标准流程备份数据库如前所述执行pg_dump。拉取最新代码git pull origin master。检查环境变量变更比较新的.env.example和你的.env看是否有新增或变更的变量并相应更新你的.env文件。重建并重启服务docker compose down docker compose up -d --build。执行数据库迁移如果有某些版本可能包含数据库模式变更。查看项目的CHANGELOG.md或发布说明通常升级命令会包含docker compose run --rm backend-api npm run db:migrate之类的指令。问题5性能瓶颈可能出现在哪里数据库PostgreSQL是核心。如果智能体数量很多数百个或者市场模板、活动日志数据量巨大需要考虑对数据库进行优化如添加索引、升级硬件、读写分离。Redis队列BullMQ用于处理异步任务。如果部署/销毁任务大量堆积检查worker-provisioner的数量和性能。可以考虑增加工作者实例。Docker守护进程当单主机上运行大量智能体容器时Docker守护进程本身可能成为瓶颈。考虑将工作负载分散到多个Docker主机使用Docker Swarm或切换到Kubernetes后端。网络带宽如果智能体需要频繁拉取大模型文件GB级别或者与外部API有大量通信需要保证宿主机的网络带宽充足。实操心得在生产环境中给Nora的部署增加一个反向代理如Nginx来管理SSL终止、静态文件缓存和负载均衡是一个好习惯。即使你用了Nora自带的Nginx在其前面再加一层用于管理多个服务也是常见的架构。此外定期查看docker compose logs中的警告和错误信息并将其接入你的监控告警系统可以帮助你提前发现问题。对于关键业务可以考虑部署Nora的高可用架构这通常意味着需要将PostgreSQL和Redis也配置为集群模式这超出了基础部署的范围但Nora的架构允许这样的扩展。