Files
ailine/QUICKSTART.md
root ebbd73ddf0
Some checks failed
构建并部署 AI Agent 服务 / deploy (push) Failing after 1m17s
```
docs(quickstart): 更新快速开始文档以支持Nginx反向代理配置

- 修改环境变量配置方式,从直接创建.env文件改为复制模板文件
- 添加必需和可选配置项的详细说明
- 更新Docker Compose启动命令以使用正确的路径
- 增加Nginx反向代理访问方式的说明
- 为本地开发模式添加额外的数据库配置说明

fix(readme): 修正部署说明中的环境变量配置方法

- 将硬编码的环境变量配置改为使用模板文件复制方式
- 更新Docker Compose启动命令路径
- 补充Nginx反向代理访问说明
- 修正数据库配置注意事项

feat(backend): 支持从环境变量读取数据库连接配置

- 添加os模块导入
- 修改DB_URI配置逻辑,优先从环境变量读取
- 适配Docker和本地开发环境的不同数据库连接地址

refactor(docker): 优化Docker Compose配置支持Nginx代理

- 限制后端端口仅本机访问
- 修改前端API URL为相对路径,通过Nginx代理访问
- 限制前端端口仅本机访问

refactor(frontend): 适配Nginx反向代理后端API调用

- 将硬编码的后端API地址改为相对路径
- 支持通过Nginx代理转发请求到后端服务

chore(scripts): 更新启动脚本中的访问地址提示信息

- 修改前端启动成功后的访问地址提示
- 添加Nginx代理访问方式的说明
```
2026-04-14 01:44:55 +08:00

409 lines
7.5 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.

# 快速开始指南
详细的启动和部署指南,面向开发者和运维人员。
---
## 🚀 快速启动3 步)
### 方式一Docker Compose推荐 ⭐)
适合生产环境,一键启动所有服务。
#### 1. 配置环境变量
```bash
# 复制模板文件
cp .env.example .env
# 编辑 .env 文件,填入真实的 API Key
vim .env # 或使用你喜欢的编辑器
```
**必需配置项**
- `ZHIPUAI_API_KEY` - 智谱 AI API 密钥(从 [智谱开放平台](https://open.bigmodel.cn/) 获取)
- `VLLM_LOCAL_KEY` - 本地 vLLM 服务认证 Token与 vLLM 容器的 `--api-key` 参数一致)
**可选配置项**
- `DB_URI` - PostgreSQL 连接字符串(默认已配置,通常无需修改)
#### 2. 启动服务
```bash
docker compose -f docker/docker-compose.yml up -d --build
```
#### 3. 访问应用
**如果配置了 Nginx 反向代理**
- 访问地址:`http://your-domain.com``http://your-server-ip`
**如果未配置 Nginx直接访问容器**
- **前端**: http://localhost:8501
- **后端 API**: http://localhost:8001
#### 常用命令
```bash
# 查看服务状态
docker compose ps
# 查看日志
docker compose logs -f
# 重启特定服务
docker compose restart backend
# 停止所有服务
docker compose down
```
---
### 方式二:本地开发模式
适合开发和调试。
#### 前置要求
- Python 3.10+
- Docker用于 PostgreSQL
#### 1. 启动 PostgreSQL
```bash
docker run -d \
--name postgres-langgraph \
-e POSTGRES_PASSWORD=mysecretpassword \
-e POSTGRES_DB=langgraph_db \
-p 5432:5432 \
-v ~/docker_volumes/postgres_data:/var/lib/postgresql/data \
postgres:16
```
#### 2. 安装依赖
```bash
pip install -r requirement.txt
```
#### 3. 配置环境变量
复制并编辑 `.env` 文件:
```bash
cp .env.example .env
vim .env
```
**本地开发需要额外配置数据库连接**
```env
ZHIPUAI_API_KEY=your_api_key_here
VLLM_LOCAL_KEY=token-abc123
# 本地开发时,数据库主机改为 localhost
DB_URI=postgresql://postgres:mysecretpassword@localhost:5432/langgraph_db?sslmode=disable
```
#### 4. 启动服务
**终端 1 - 后端:**
```bash
python backend.py
```
**终端 2 - 前端:**
```bash
streamlit run frontend.py
```
浏览器自动打开前端页面(如果配置了 Nginx访问 `http://your-domain.com`;否则访问 http://localhost:8501
---
## 🐳 Docker 部署详解
### 文件说明
| 文件 | 用途 |
|------|------|
| `docker-compose.yml` | 服务编排配置 |
| `Dockerfile.backend` | 后端镜像构建 |
| `Dockerfile.frontend` | 前端镜像构建 |
| `.gitea/workflows/deploy.yml` | CI/CD 自动化部署 |
### docker-compose.yml 结构
```yaml
services:
postgres: # PostgreSQL 数据库
backend: # FastAPI 后端服务
frontend: # Streamlit 前端界面
```
**特性:**
- ✅ PostgreSQL 健康检查,确保数据库就绪后才启动后端
- ✅ 数据持久化到 Docker volume
- ✅ 自动重启策略(`restart: unless-stopped`
- ✅ 内部网络隔离,外部无法直接访问数据库
### 只更新特定服务
```bash
# 只重新构建后端(不影响数据库)
docker compose up -d --build backend
# 只重新启动前端
docker compose up -d frontend
```
### 数据持久化
PostgreSQL 数据存储在命名 volume `pg_data` 中:
```bash
# 查看 volume
docker volume ls | grep pg_data
# 备份数据
docker run --rm -v pg_data:/data -v $(pwd):/backup alpine tar czf /backup/pg_backup.tar.gz /data
# 恢复数据
docker run --rm -v pg_data:/data -v $(pwd):/backup alpine tar xzf /backup/pg_backup.tar.gz -C /
```
---
## 🔧 开发指南
### 添加新工具
`tools.py` 中添加:
```python
@tool
def my_new_tool(param: str) -> str:
"""
工具描述(会显示给 LLM
Args:
param: 参数说明
Returns:
返回值说明
"""
# 实现逻辑
return result
```
工具会自动注册,无需修改其他文件。
### 添加新模型
`agent.py` 中:
```python
def _create_new_model_llm(self):
"""创建新模型的 LLM"""
return YourChatModel(
model="model-name",
api_key=os.getenv("YOUR_API_KEY"),
)
# 在 initialize() 方法中注册
model_configs = {
"zhipu": self._create_zhipu_llm,
"local": self._create_local_llm,
"new_model": self._create_new_model_llm, # 新增
}
```
在前端 `frontend.py` 中添加选项:
```python
MODEL_OPTIONS = {
"智谱 GLM-4": "zhipu",
"本地 Gemma-4": "local",
"新模型": "new_model", # 新增
}
```
### 调试技巧
```bash
# 进入后端容器
docker compose exec backend bash
# 查看实时日志
docker compose logs -f backend
# 检查数据库连接
docker compose exec postgres psql -U postgres -d langgraph_db -c "\dt"
# 测试后端 API
curl http://localhost:8001/
```
---
## 🔄 CI/CD 自动化部署
### Gitea Workflows
项目包含自动化部署配置 `.gitea/workflows/deploy.yml`
**触发条件:**
- 推送到 `main``master` 分支
- 手动触发workflow_dispatch
**部署流程:**
1. 检出代码
2. 安装 Python 依赖(验证用)
3. 准备环境变量
4. 重新构建并启动前后端(不影响数据库)
5. 健康检查(等待后端就绪)
6. 清理无用 Docker 资源
**配置 Secrets**
在 Gitea 仓库设置中添加:
- `ZHIPUAI_API_KEY`
- `VLLM_LOCAL_KEY`
---
## 🐛 故障排查
### 常见问题
#### 1. PostgreSQL 连接失败
```bash
# 检查容器状态
docker compose ps postgres
# 查看日志
docker compose logs postgres
# 测试连接
docker compose exec postgres pg_isready -U postgres
```
**解决方案:**
- 确认容器正在运行
- 检查密码是否正确
- 等待健康检查通过(约 10-30 秒)
#### 2. 后端启动失败
```bash
# 查看详细日志
docker compose logs backend
# 检查端口占用
lsof -i :8001
```
**常见原因:**
- API Key 未配置或错误
- 端口 8001 被占用
- 依赖包缺失
#### 3. 前端无法连接后端
```bash
# 检查后端是否正常运行
curl http://localhost:8001/
# 检查网络连接
docker compose exec frontend ping backend
```
**解决方案:**
- 确认后端服务已启动
- 检查防火墙设置
- 重启前端服务
#### 4. 模型初始化失败
```bash
# 查看后端启动日志
docker compose logs backend | grep -i "model\|error"
```
**可能原因:**
- 智谱 API Key 无效
- vLLM 容器未启动(如使用本地模型)
- 网络连接问题
---
## 📊 监控和维护
### 查看资源使用
```bash
# Docker 容器资源使用
docker stats
# 磁盘空间
docker system df
# 清理无用资源
docker system prune -f
```
### 日志管理
```bash
# 查看所有服务日志
docker compose logs
# 查看特定服务最近 100 行日志
docker compose logs --tail=100 backend
# 实时跟踪日志
docker compose logs -f backend frontend
```
### 备份和恢复
```bash
# 备份数据库
docker compose exec postgres pg_dump -U postgres langgraph_db > backup.sql
# 恢复数据库
cat backup.sql | docker compose exec -T postgres psql -U postgres langgraph_db
```
---
## 🎯 性能优化建议
### 开发环境
- 使用 `docker compose watch` 实现热重载(需配置)
- 挂载代码目录而非复制到镜像
- 启用 Python 调试模式
### 生产环境
- 使用反向代理Nginx
- 启用 HTTPS
- 配置日志轮转
- 设置资源限制CPU、内存
- 定期备份数据库
---
## 📞 获取帮助
- **完整文档**: [README.md](README.md)
- **RAG 示例**: `rag_example.py`
- **报告问题**: 提交 Issue 并附上日志
---
**祝您部署顺利!** 🎉