Eigent 开发者模式:如何保留 Docker 数据库并对 server API 进行热重载
Eigent 开发者模式如何保留 Docker 数据库并对 server API 进行热重载【免费下载链接】eigentEigent: The Open Source Cowork Desktop - Local and Free Alternative to Claude Cowork and Codex项目地址: https://gitcode.com/GitHub_Trending/ei/eigent如果你正在开发 Eigent 的本机后端server/目录下的 FastAPI PostgreSQL 服务会遇到一个典型问题API 代码跑在 Docker 容器里每次改动代码都要重新构建镜像无法边改边测。Eigent 的 server/README_EN.md 提供了一个“Developer Mode”先停止容器中的 API 服务、保留 Postgres 数据库然后在本地用uvicorn --reload启动同一个 API代码保存即生效而数据仍然留在 Docker 卷里不丢失。本文按 README_CN.md 与 README_EN.md 中给出的命令走通这条“保留 Docker 数据库 本地热重载 API”的完整路径。为什么数据库可以“留在 Docker 里”在动手前需要确认数据落在哪里。server/README_EN.md 的 “Data Persistence” 一节说明DB 数据存放在 Docker 卷server_postgres_data对应容器内路径/var/lib/postgresql/data数据库迁移在容器启动时自动执行start.sh中的alembic upgrade head见 server/start.sh。因此在 server/docker-compose.yml 中postgres服务把数据挂载到命名卷postgres_data而api服务只是消费数据库的一个普通进程。只停掉eigent_api容器Postgres 容器与数据卷都保持原样这正是开发者模式的基础。准备条件Docker Desktop已安装并运行且服务已经按 README 的 Quick Start 用docker-compose up --build -d启动过API 容器eigent_api、Postgres 容器eigent_postgres均已存在Python3.12.*server/pyproject.toml 要求3.12,3.13uv本地启动命令均为uv run ...形式Node.js18.0.0 23.0.0仅在你需要同时启动前端时用到。第一步停止容器中的 API保留数据库# 只停 API 容器数据库容器不动 docker stop eigent_api # 确认 Postgres 仍在运行 docker psdocker ps里应还能看到eigent_postgres处于 running 状态。注意这一步只停 API不要执行docker compose stop那会把 API 和 DB 一起停掉属于 README 中“停止/启动全部”的另一组命令与本场景目标不同。第二步本地执行数据库迁移cd server uv run alembic upgrade headREADME 注明这条命令用于“首次或数据库结构变更时”初始化数据库。如果你此前已经用容器跑过容器启动时的alembic upgrade head已完成迁移本地再执行一次是幂等的确认操作拉取到新代码、出现新迁移文件server/alembic/versions/下后必须先跑这一步再启动本地 API。第三步提供数据库连接串并启动热重载 APIDocker 网络内 API 用的是postgresql://postgres:123456postgres:5432/eigent本地进程连的是宿主机端口所以连接串换成localhost:5432# 在当前 shell 导出环境变量方式 A export database_urlpostgresql://postgres:123456localhost:5432/eigent账号密码postgres:123456、库名eigent与 server/docker-compose.yml 中POSTGRES_USER/POSTGRES_PASSWORD/POSTGRES_DB的设置一致可直接使用。server/README_CN.md 还给出方式 B把同样的database_url写入server/.env应用启动时会加载.env见 server/app/core/environment.py 中的load_dotenv()然后执行同一条 uvicorn 命令。启动本地 APIuv run uvicorn main:api --reload --port 3001 --host 0.0.0.0--reload是热重载开关保存server/下的代码后进程自动重启端口3001与容器模式宿主机端口一致README 的 Ports 一节API 宿主机3001→ 容器5678因此切换前后前端代理、浏览器访问地址都不用改。一个容易忽略的点容器模式通过 compose 给 API 注入了redis_url、celery_broker_url等指向 Docker 网络的变量本地进程在 Docker 网络之外。server/.env.example 中专门有一段 “Configuration if not running in docker” 的注释块列出了本地应指向的localhost地址redis_urlredis://localhost:6379/0、celery_broker_urlredis://localhost:6379/0、celery_result_urlredis://localhost:6379/0、SESSION_REDIS_URLredis://localhost:6379/1。由于本场景只停 API、Redis 容器仍在宿主机6379端口运行按需取消这些行注释写入server/.env即可README 开发者模式正文只演示了database_url其余变量请以你的实际报错为准。验证热重载是否生效1. 打开 Swagger UI。浏览器访问http://localhost:3001/docs。本地 uvicorn 与容器 API 用的是同一个宿主机端口能正常列出接口即说明本地进程已经接管了 3001。2. 请求健康检查端点。应用暴露了GET /health定义在 server/main.py返回status、version、server_hash字段server_hash来自本地git log -1 -- server/可用于确认当前跑的确实是你改过的代码而不是旧构建。3. 改一行代码看是否自动重启。修改任意一个路由后保存uvicorn 终端应出现 reload 提示再次访问/health或/docs验证新代码生效。4. 前端联调可选。按 README 的本地模式在项目根目录创建或修改.env.developmentVITE_BASE_URL/api VITE_USE_LOCAL_PROXYtrue VITE_PROXY_URLhttp://localhost:3001然后执行npm install和npm run dev。代理指向的仍是localhost:3001与本地热重载 API 同端口前端请求会直接打到你的本地进程。切回容器模式开发完成后先用 CtrlC 停掉本地 uvicorn避免两个进程抢 3001 端口再执行docker start eigent_api容器启动时start.sh会等待数据库就绪并再次执行alembic upgrade head然后以uvicorn main:api --host 0.0.0.0 --port 5678启动容器内端口 5678 映射到宿主机 3001。README 的 Common Commands 一节也给出了docker compose stop/docker compose start作为“全部停止/启动”的对照命令。边界与限制开发者模式是 README 标注为 “Optional” 的本地开发路径它不替代容器化部署如果你要使用应用触发器外部 Webhook 回调README 明确要求服务器必须有公开可访问的域名本地热重载进程不满足这一条件。容器模式的运行时日志在容器内/app/runtime/log/app.log本地运行时日志文件由应用写到runtime/log/app.log见 server/main.py 的 loguru 配置相对server/工作目录排查问题可查该文件或 uvicorn 终端输出。uv run首次执行会按server/pyproject.toml同步依赖其中camel-ai按[tool.uv.sources]从 git 仓库拉取本地环境需要可访问该源依赖同步失败时优先处理网络与源的问题而不是数据库配置。server/docker-compose.dev.yml 是只含postgresredis的精简编排无 API/celery 服务与本文“停 API 保留 DB”的效果类似可在需要彻底不跑容器 API 时参考其数据库凭据与主 compose 文件一致。【免费下载链接】eigentEigent: The Open Source Cowork Desktop - Local and Free Alternative to Claude Cowork and Codex项目地址: https://gitcode.com/GitHub_Trending/ei/eigent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

3 步搞定抖音无水印批量下载:douyin-downloader 上手指南

3 步搞定抖音无水印批量下载:douyin-downloader 上手指南

3 步搞定抖音无水印批量下载:douyin-downloader 上手指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback su…

2026/10/24 3:08:51 阅读更多 →
Qwen Code Web Shell 全局回合导航:稀疏回合索引与随机访问的设计与实践

Qwen Code Web Shell 全局回合导航:稀疏回合索引与随机访问的设计与实践

Qwen Code Web Shell 全局回合导航:稀疏回合索引与随机访问的设计与实践 【免费下载链接】qwen-code An open-source AI coding agent that lives in your terminal. 项目地址: https://gitcode.com/GitHub_Trending/qw/qwen-code 导读 本文基于 qwen-code …

2026/11/7 3:51:31 阅读更多 →
Wasp 用户名密码认证:从零搭建自定义登录注册 UI(wasp/client/auth 实战指南)

Wasp 用户名密码认证:从零搭建自定义登录注册 UI(wasp/client/auth 实战指南)

Wasp 用户名密码认证:从零搭建自定义登录注册 UI(wasp/client/auth 实战指南) 【免费下载链接】wasp The batteries-included full-stack framework for the AI era. Develop JS/TS web apps (React, Node.js, and Prisma) using declarative…

2026/11/2 2:32:57 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/13 5:13:25 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/13 5:13:25 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/13 5:13:25 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/12 18:22:26 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/12 18:22:25 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/13 5:13:25 阅读更多 →

日新闻

周新闻

月新闻