eigent/server/README_CN.md
2026-03-03 20:20:47 +08:00

148 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

### 背景与目标
本目录 `server/` 是在客户端本地下放的后端服务FastAPI + PostgreSQL。目标实现本地与云端完全数据分离。部署该服务后用户的注册信息、模型提供商配置、工具配置、聊天历史等敏感数据均保存在本机的数据库中不会上传到我们的云端除非你主动配置了外部服务如云端模型提供商或远程 MCP 服务器)。
### 本地下放的服务范围(主要模块)
- 用户与账号
- `POST /register`:邮箱 + 密码注册(仅本地 DB
- `POST /login`:邮箱 + 密码登录,返回本地签发的 Token
- `GET/PUT /user``/user/profile``/user/privacy``/user/current_credits``/user/stat`
- 模型提供商 Provider保存你的模型访问配置
- `GET /providers``POST /provider``PUT /provider/{id}``DELETE /provider/{id}`
- `POST /provider/prefer`:设置首选 Provider前端与后端将优先使用
- 配置中心 Config保存各类工具/能力所需的密钥或参数)
- `GET /configs``POST /configs``PUT /configs/{id}``DELETE /configs/{id}``GET /config/info`
- 聊天与数据
- 历史、快照、分享等接口位于 `app/controller/chat/`,数据全部落在本地数据库
- MCP 服务管理(导入本地/远程 MCP 服务器)
- `GET /mcps``POST /mcp/install``POST /mcp/import/{Local|Remote}`
说明:上述数据均保存在 Docker 中的本地 PostgreSQL 卷中(见“数据持久化”),不经我们云端。若你配置了外部模型或远程 MCP则相应请求会发往你指定的第三方服务。
---
### 快速开始Docker 推荐)
#### 前置要求
- **Docker Desktop**:已安装并运行
- **Python**3.10.\*(推荐使用 3.10.15
- **Node.js**>=18.0.0 \<23.0.0
#### Triggers 托管配置
**重要提示**:如果你计划使用 **应用触发器**(外部 Webhook 回调),你必须使用**公开可访问的域名**来托管此服务器。应用触发器需要外部服务能够通过 HTTPS 回调 URL 访问你的服务器。
- 本地开发时,可以使用 `ngrok` 等工具暴露你的本地服务器
- 生产环境请使用正式域名并配置 SSL 证书
#### 启动步骤
1. 启动服务
```bash
cd server
# 复制 .env.example 为 .env(或者按照.env.example的格式创建.env)
cp .env.example .env
# .env 中的环境变量会自动传递给 Docker 镜像
docker-compose up --build -d
```
**注意:**
- 数据库迁移由 Alembic 在容器启动时自动执行
- `.env` 中定义的所有环境变量都会自动传递给 Docker 镜像
2. 启动前端(本地模式)
- 在项目根目录创建或修改 `.env.development`,开启本地模式并指向本地后端:
```bash
VITE_BASE_URL=/api
VITE_USE_LOCAL_PROXY=true
VITE_PROXY_URL=http://localhost:3001
```
- 启动前端应用:
```bash
npm install
npm run dev
```
### 访问 API 文档
- 浏览器打开 `http://localhost:3001/docs`Swagger UI
### 容器与端口
- API 服务:本机 `3001` → 容器 `5678`
- PostgreSQL本机 `5432` → 容器 `5432`
### 数据持久化
- 数据库数据存放在 Docker 卷 `server_postgres_data`,容器路径 `/var/lib/postgresql/data`
- 容器启动时会自动执行数据库迁移(见 `start.sh` 中的 `alembic upgrade head`
### 常用命令
```bash
# 查看运行中的容器
docker ps
# 停止/启动 API 容器(保留数据库)
docker stop eigent_api
docker start eigent_api
# 停止/启动全部API + DB
docker compose stop
docker compose start
# 查看日志
docker logs -f eigent_api | cat
docker logs -f eigent_postgres | cat
```
提示:若拉取镜像缓慢,可在 Docker Desktop 配置国内镜像加速后重试。
---
### 开发模式(可选)
如果希望在本地以热重载方式开发 API数据库仍用 Docker 中的 Postgres
```bash
# 1) 停止容器中的 API 服务,仅保留数据库
docker stop eigent_api
# 2) 初始化数据库(首次或数据库结构变更时)
cd server
uv run alembic upgrade head
# 3) 本地启动(需提供数据库连接串)
# 方式 A在当前 shell 导出环境变量
export database_url=postgresql://postgres:123456@localhost:5432/eigent
uv run uvicorn main:api --reload --port 3001 --host 0.0.0.0
# 方式 B在 server/.env 中写入(示例)
# database_url=postgresql://postgres:123456@localhost:5432/eigent
# 然后直接运行同样的 uvicorn 命令
uv run uvicorn main:api --reload --port 3001 --host 0.0.0.0
```
---
### 其它
- API 文档:`http://localhost:3001/docs`
- 运行时日志:容器内 `/app/runtime/log/app.log`
- i18n 相关(仅开发者使用)
```bash
uv run pybabel extract -F babel.cfg -o messages.pot .
uv run pybabel init -i messages.pot -d lang -l zh_CN
uv run pybabel compile -d lang -l zh_CN
```
如需完全离线环境,请仅使用本地模型与本地 MCP 服务器,并避免配置任何外部 Provider 与远程 MCP 地址。