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代理访问方式的说明 ```
This commit is contained in:
29
.env.example
Normal file
29
.env.example
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
# =============================================================================
|
||||||
|
# 环境变量配置模板
|
||||||
|
# 复制此文件为 .env 并填入真实值:cp .env.example .env
|
||||||
|
# =============================================================================
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# AI 模型 API 密钥(必需)
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# 智谱 AI API 密钥(用于在线模型调用 GLM-4.7-Flash)
|
||||||
|
# 获取地址: https://open.bigmodel.cn/
|
||||||
|
ZHIPUAI_API_KEY=your_zhipuai_api_key_here
|
||||||
|
|
||||||
|
# 本地 vLLM 服务认证 Token(用于本地 Gemma 模型调用)
|
||||||
|
# 如果使用本地 vLLM 容器,需要设置此值与 vLLM 容器的 --api-key 参数一致
|
||||||
|
VLLM_LOCAL_KEY=token-abc123
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# 数据库配置(可选 - 代码中有默认值)
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# PostgreSQL 数据库连接字符串
|
||||||
|
# Docker Compose 部署时使用服务名 'postgres':
|
||||||
|
# DB_URI=postgresql://postgres:mysecretpassword@postgres:5432/langgraph_db?sslmode=disable
|
||||||
|
|
||||||
|
# 本地开发时使用 localhost:
|
||||||
|
# DB_URI=postgresql://postgres:mysecretpassword@localhost:5432/langgraph_db?sslmode=disable
|
||||||
|
|
||||||
|
# 如果不设置,代码将使用默认值(Docker 环境指向 postgres 服务)
|
||||||
@@ -13,20 +13,32 @@
|
|||||||
#### 1. 配置环境变量
|
#### 1. 配置环境变量
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cat > .env << EOF
|
# 复制模板文件
|
||||||
ZHIPUAI_API_KEY=your_zhipuai_api_key_here
|
cp .env.example .env
|
||||||
VLLM_LOCAL_KEY=token-abc123
|
|
||||||
EOF
|
# 编辑 .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. 启动服务
|
#### 2. 启动服务
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker compose up -d --build
|
docker compose -f docker/docker-compose.yml up -d --build
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 3. 访问应用
|
#### 3. 访问应用
|
||||||
|
|
||||||
|
**如果配置了 Nginx 反向代理**:
|
||||||
|
- 访问地址:`http://your-domain.com` 或 `http://your-server-ip`
|
||||||
|
|
||||||
|
**如果未配置 Nginx(直接访问容器)**:
|
||||||
- **前端**: http://localhost:8501
|
- **前端**: http://localhost:8501
|
||||||
- **后端 API**: http://localhost:8001
|
- **后端 API**: http://localhost:8001
|
||||||
|
|
||||||
@@ -77,10 +89,21 @@ pip install -r requirement.txt
|
|||||||
|
|
||||||
#### 3. 配置环境变量
|
#### 3. 配置环境变量
|
||||||
|
|
||||||
编辑 `.env` 文件:
|
复制并编辑 `.env` 文件:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cp .env.example .env
|
||||||
|
vim .env
|
||||||
|
```
|
||||||
|
|
||||||
|
**本地开发需要额外配置数据库连接**:
|
||||||
|
|
||||||
```env
|
```env
|
||||||
ZHIPUAI_API_KEY=your_api_key_here
|
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. 启动服务
|
#### 4. 启动服务
|
||||||
@@ -95,7 +118,7 @@ python backend.py
|
|||||||
streamlit run frontend.py
|
streamlit run frontend.py
|
||||||
```
|
```
|
||||||
|
|
||||||
浏览器自动打开 http://localhost:8501
|
浏览器自动打开前端页面(如果配置了 Nginx,访问 `http://your-domain.com`;否则访问 http://localhost:8501)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
27
README.md
27
README.md
@@ -104,21 +104,24 @@ Agent1/
|
|||||||
|
|
||||||
### 方式一:Docker Compose(推荐)
|
### 方式一:Docker Compose(推荐)
|
||||||
|
|
||||||
```bash
|
```
|
||||||
# 1. 配置 .env 文件
|
# 1. 配置环境变量
|
||||||
echo "ZHIPUAI_API_KEY=your_key_here" > .env
|
cp .env.example .env
|
||||||
|
# 编辑 .env 文件,填入真实的 API Key
|
||||||
|
|
||||||
# 2. 启动所有服务
|
# 2. 启动所有服务
|
||||||
docker compose up -d --build
|
docker compose -f docker/docker-compose.yml up -d --build
|
||||||
|
|
||||||
# 3. 访问应用
|
# 3. 访问应用
|
||||||
# 前端: http://localhost:8501
|
# 如果配置了 Nginx 反向代理:http://your-domain.com 或 http://your-server-ip
|
||||||
# 后端: http://localhost:8001
|
# 如果未配置 Nginx(直接访问):
|
||||||
|
# - 前端: http://localhost:8501
|
||||||
|
# - 后端 API: http://localhost:8001
|
||||||
```
|
```
|
||||||
|
|
||||||
### 方式二:本地开发模式
|
### 方式二:本地开发模式
|
||||||
|
|
||||||
```bash
|
```
|
||||||
# 1. 启动 PostgreSQL
|
# 1. 启动 PostgreSQL
|
||||||
docker run -d --name postgres-langgraph \
|
docker run -d --name postgres-langgraph \
|
||||||
-e POSTGRES_PASSWORD=mysecretpassword \
|
-e POSTGRES_PASSWORD=mysecretpassword \
|
||||||
@@ -178,7 +181,7 @@ streamlit run frontend.py
|
|||||||
|
|
||||||
在 `tools.py` 中添加新的 `@tool` 装饰函数:
|
在 `tools.py` 中添加新的 `@tool` 装饰函数:
|
||||||
|
|
||||||
```python
|
```
|
||||||
@tool
|
@tool
|
||||||
def my_new_tool(param: str) -> str:
|
def my_new_tool(param: str) -> str:
|
||||||
"""
|
"""
|
||||||
@@ -200,7 +203,7 @@ def my_new_tool(param: str) -> str:
|
|||||||
|
|
||||||
在 `agent.py` 的 `initialize()` 方法中添加模型配置:
|
在 `agent.py` 的 `initialize()` 方法中添加模型配置:
|
||||||
|
|
||||||
```python
|
```
|
||||||
model_configs = {
|
model_configs = {
|
||||||
"zhipu": self._create_zhipu_llm,
|
"zhipu": self._create_zhipu_llm,
|
||||||
"local": self._create_local_llm,
|
"local": self._create_local_llm,
|
||||||
@@ -227,7 +230,7 @@ model_configs = {
|
|||||||
|
|
||||||
在 `.env` 文件中配置:
|
在 `.env` 文件中配置:
|
||||||
|
|
||||||
```env
|
```
|
||||||
# 智谱 AI API Key(必需)
|
# 智谱 AI API Key(必需)
|
||||||
ZHIPUAI_API_KEY=your_api_key_here
|
ZHIPUAI_API_KEY=your_api_key_here
|
||||||
|
|
||||||
@@ -242,6 +245,10 @@ VLLM_LOCAL_KEY=token-abc123
|
|||||||
postgresql://postgres:mysecretpassword@localhost:5432/langgraph_db
|
postgresql://postgres:mysecretpassword@localhost:5432/langgraph_db
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**注意**:
|
||||||
|
- **本地开发模式**:使用 `localhost` 或 `127.0.0.1`
|
||||||
|
- **Docker Compose 部署**:后端容器内应使用服务名 `postgres`(通过环境变量 `DB_URI` 自动配置)
|
||||||
|
|
||||||
如使用 Docker Compose,数据库会在内部网络中自动配置。
|
如使用 Docker Compose,数据库会在内部网络中自动配置。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ FastAPI 后端 - 支持动态模型切换,使用 PostgreSQL 持久化记忆
|
|||||||
采用依赖注入模式,优雅管理资源生命周期
|
采用依赖注入模式,优雅管理资源生命周期
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
import uuid
|
import uuid
|
||||||
from contextlib import asynccontextmanager
|
from contextlib import asynccontextmanager
|
||||||
|
|
||||||
@@ -13,8 +14,11 @@ from langgraph.checkpoint.postgres.aio import AsyncPostgresSaver
|
|||||||
|
|
||||||
from app.agent import AIAgentService
|
from app.agent import AIAgentService
|
||||||
|
|
||||||
# PostgreSQL 连接字符串
|
# PostgreSQL 连接字符串(优先从环境变量读取,适配 Docker 和本地开发)
|
||||||
DB_URI = "postgresql://postgres:mysecretpassword@localhost:5432/langgraph_db?sslmode=disable"
|
DB_URI = os.getenv(
|
||||||
|
"DB_URI",
|
||||||
|
"postgresql://postgres:mysecretpassword@postgres:5432/langgraph_db?sslmode=disable"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@asynccontextmanager
|
@asynccontextmanager
|
||||||
|
|||||||
@@ -37,6 +37,8 @@ services:
|
|||||||
postgres:
|
postgres:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- "127.0.0.1:8001:8001" # 仅本机访问,供 Nginx 反向代理使用
|
||||||
|
|
||||||
frontend:
|
frontend:
|
||||||
build:
|
build:
|
||||||
@@ -44,9 +46,9 @@ services:
|
|||||||
dockerfile: docker/Dockerfile.frontend
|
dockerfile: docker/Dockerfile.frontend
|
||||||
container_name: ai-frontend
|
container_name: ai-frontend
|
||||||
environment:
|
environment:
|
||||||
- API_URL=http://backend:8001/chat
|
- API_URL=/api/chat # 通过 Nginx 反向代理访问后端
|
||||||
ports:
|
ports:
|
||||||
- "8501:8501"
|
- "127.0.0.1:8501:8501" # 仅本机访问,供 Nginx 反向代理使用
|
||||||
networks:
|
networks:
|
||||||
- ai-network
|
- ai-network
|
||||||
depends_on:
|
depends_on:
|
||||||
|
|||||||
@@ -9,8 +9,12 @@ import uuid
|
|||||||
import requests
|
import requests
|
||||||
import streamlit as st
|
import streamlit as st
|
||||||
|
|
||||||
# 后端 API 地址(端口 8001)
|
|
||||||
API_URL = "http://localhost:8001/chat"
|
# 原来的硬编码,本地测试
|
||||||
|
# API_URL = "http://115.190.121.151:8001/chat"
|
||||||
|
|
||||||
|
# 改为相对路径(由 Nginx 代理转发)
|
||||||
|
API_URL = "/api/chat"
|
||||||
|
|
||||||
st.set_page_config(page_title="AI 个人助手", page_icon="🤖")
|
st.set_page_config(page_title="AI 个人助手", page_icon="🤖")
|
||||||
st.title("🤖 个人生活与数据分析助手")
|
st.title("🤖 个人生活与数据分析助手")
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ start_frontend() {
|
|||||||
streamlit run frontend/frontend.py &
|
streamlit run frontend/frontend.py &
|
||||||
FRONTEND_PID=$!
|
FRONTEND_PID=$!
|
||||||
echo -e "${GREEN}✓ 前端服务已启动 (PID: $FRONTEND_PID)${NC}"
|
echo -e "${GREEN}✓ 前端服务已启动 (PID: $FRONTEND_PID)${NC}"
|
||||||
echo -e "${GREEN}✓ 请在浏览器中打开: http://localhost:8501${NC}"
|
echo -e "${GREEN}✓ 请在浏览器中打开: http://localhost:8501(本地开发)或 http://your-domain.com(Nginx 代理)${NC}"
|
||||||
}
|
}
|
||||||
|
|
||||||
# 清理函数
|
# 清理函数
|
||||||
|
|||||||
Reference in New Issue
Block a user