zhouhui.jiang

update

1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<project version="4">
3 + <component name="VcsDirectoryMappings">
4 + <mapping directory="$PROJECT_DIR$" vcs="Git" />
5 + </component>
6 +</project>
...\ No newline at end of file ...\ No newline at end of file
...@@ -13,7 +13,7 @@ API_CONFIG = { ...@@ -13,7 +13,7 @@ API_CONFIG = {
13 "headers": { 13 "headers": {
14 "accept": "*/*", 14 "accept": "*/*",
15 "Content-Type": "application/json", 15 "Content-Type": "application/json",
16 - "Authorization": os.getenv("API_AUTHORIZATION", "Bearer 2.3e67bc239d7144bd9885cee8ffcbc8be"), 16 + "Authorization": os.getenv("API_AUTHORIZATION", "Bearer 2.343fa30a6a4d42b6afe62bdd0570a50b"),
17 "Ver": os.getenv("API_VER", "033BD94B1168D7E4F0D644C3C95E35BF.D73E33B659AD1D6B7D181D1DF8D05760"), 17 "Ver": os.getenv("API_VER", "033BD94B1168D7E4F0D644C3C95E35BF.D73E33B659AD1D6B7D181D1DF8D05760"),
18 "Referer": os.getenv("API_REFERER", "http://192.168.1.251/") 18 "Referer": os.getenv("API_REFERER", "http://192.168.1.251/")
19 } 19 }
......
1 +# 部署指南(无 root 权限)
2 +
3 +## 一、服务器准备
4 +
5 +1. 购买阿里云 ECS(Ubuntu 20.04+ 或 CentOS 7+)
6 +2. 安全组开放端口:`22``2025`
7 +3. SSH 连接服务器(使用普通用户,非 root)
8 +
9 +## 二、检查环境
10 +
11 +```bash
12 +# 检查 Python 版本(需要 Python 3.8+)
13 +python3 --version
14 +
15 +# 如果没有 Python3,尝试安装(可能需要管理员协助)
16 +# 或使用 conda/miniconda 等用户级 Python 环境
17 +```
18 +
19 +## 三、部署应用
20 +
21 +### 1. 上传代码
22 +
23 +```bash
24 +# 方式1: 使用 scp(本地执行,替换 username 为你的用户名)
25 +scp -r . username@服务器IP:~/langgraph/
26 +
27 +# 方式2: 使用 Git
28 +cd ~
29 +git clone <仓库地址> langgraph
30 +
31 +# 方式3: 使用 FTP/SFTP 工具上传到 ~/langgraph/
32 +```
33 +
34 +### 2. 安装依赖
35 +
36 +```bash
37 +cd ~/langgraph
38 +python3 -m venv venv
39 +source venv/bin/activate
40 +pip install --upgrade pip
41 +pip install -r requirements.txt
42 +pip install uvicorn python-dotenv
43 +```
44 +
45 +### 3. 配置环境变量
46 +
47 +```bash
48 +cd ~/langgraph
49 +vim .env
50 +```
51 +
52 +添加内容:
53 +```env
54 +OPENAI_API_KEY=your-api-key
55 +OPENAI_BASE_URL=https://api.deepseek.com/v1
56 +```
57 +
58 +### 4. 创建日志目录
59 +
60 +```bash
61 +mkdir -p ~/langgraph/logs
62 +```
63 +
64 +## 四、启动服务
65 +
66 +### 方式1: 使用启动脚本(推荐)
67 +
68 +```bash
69 +cd ~/langgraph
70 +chmod +x deploy/start.sh deploy/stop.sh deploy/restart.sh
71 +
72 +# 启动服务
73 +./deploy/start.sh
74 +
75 +# 停止服务
76 +./deploy/stop.sh
77 +
78 +# 重启服务
79 +./deploy/restart.sh
80 +```
81 +
82 +### 方式2: 使用 nohup 后台运行
83 +
84 +```bash
85 +cd ~/langgraph
86 +source venv/bin/activate
87 +nohup python start_server_direct.py > logs/app.log 2>&1 &
88 +echo $! > logs/app.pid # 保存进程ID
89 +```
90 +
91 +### 方式3: 使用 screen(推荐用于长时间运行)
92 +
93 +```bash
94 +# 安装 screen(如果未安装,可能需要管理员协助)
95 +# 或使用 tmux
96 +
97 +# 创建 screen 会话
98 +screen -S langgraph
99 +
100 +# 在 screen 中启动
101 +cd ~/langgraph
102 +source venv/bin/activate
103 +python start_server_direct.py
104 +
105 +# 按 Ctrl+A 然后按 D 退出 screen(服务继续运行)
106 +
107 +# 重新连接 screen
108 +screen -r langgraph
109 +```
110 +
111 +### 方式4: 使用 tmux
112 +
113 +```bash
114 +# 创建 tmux 会话
115 +tmux new -s langgraph
116 +
117 +# 在 tmux 中启动
118 +cd ~/langgraph
119 +source venv/bin/activate
120 +python start_server_direct.py
121 +
122 +# 按 Ctrl+B 然后按 D 退出 tmux(服务继续运行)
123 +
124 +# 重新连接 tmux
125 +tmux attach -t langgraph
126 +```
127 +
128 +## 五、验证部署
129 +
130 +```bash
131 +# 检查服务是否运行
132 +curl http://localhost:2025/ok
133 +
134 +# 或从外部访问(替换为你的服务器IP)
135 +curl http://服务器IP:2025/ok
136 +
137 +# 查看日志
138 +tail -f ~/langgraph/logs/app.log
139 +
140 +# 检查进程
141 +ps aux | grep start_server_direct
142 +```
143 +
144 +## 六、进程管理
145 +
146 +### 查看进程
147 +
148 +```bash
149 +# 查看进程ID
150 +cat ~/langgraph/logs/app.pid
151 +
152 +# 查看进程状态
153 +ps -p $(cat ~/langgraph/logs/app.pid 2>/dev/null)
154 +```
155 +
156 +### 停止服务
157 +
158 +```bash
159 +# 如果使用启动脚本
160 +~/langgraph/deploy/stop.sh
161 +
162 +# 如果使用 nohup
163 +kill $(cat ~/langgraph/logs/app.pid)
164 +
165 +# 如果使用 screen
166 +screen -S langgraph -X quit
167 +
168 +# 如果使用 tmux
169 +tmux kill-session -t langgraph
170 +
171 +# 手动查找并杀死进程
172 +ps aux | grep start_server_direct | grep -v grep | awk '{print $2}' | xargs kill
173 +```
174 +
175 +### 重启服务
176 +
177 +```bash
178 +# 使用启动脚本
179 +~/langgraph/deploy/restart.sh
180 +
181 +# 或手动停止后重新启动
182 +./deploy/stop.sh
183 +./deploy/start.sh
184 +```
185 +
186 +## 七、更新代码
187 +
188 +```bash
189 +cd ~/langgraph
190 +
191 +# 停止服务
192 +./deploy/stop.sh
193 +
194 +# 更新代码(根据你的方式)
195 +git pull
196 +# 或重新上传文件
197 +
198 +# 更新依赖(如果有新依赖)
199 +source venv/bin/activate
200 +pip install -r requirements.txt
201 +
202 +# 重启服务
203 +./deploy/start.sh
204 +```
205 +
206 +## 八、日志管理
207 +
208 +```bash
209 +# 查看实时日志
210 +tail -f ~/langgraph/logs/app.log
211 +
212 +# 查看最近100行
213 +tail -n 100 ~/langgraph/logs/app.log
214 +
215 +# 查看错误日志
216 +grep -i error ~/langgraph/logs/app.log
217 +
218 +# 清空日志(谨慎使用)
219 +> ~/langgraph/logs/app.log
220 +```
221 +
222 +## 九、开机自启(可选)
223 +
224 +### 方法1: 添加到 ~/.bashrc 或 ~/.profile
225 +
226 +```bash
227 +# 编辑 ~/.bashrc
228 +vim ~/.bashrc
229 +
230 +# 添加以下内容(如果是交互式登录,使用 ~/.profile)
231 +if [ -f ~/langgraph/deploy/start.sh ]; then
232 + ~/langgraph/deploy/start.sh
233 +fi
234 +```
235 +
236 +**注意**:这种方法会在每次登录时启动,可能不是最佳选择。
237 +
238 +### 方法2: 使用 cron(推荐)
239 +
240 +```bash
241 +# 编辑 crontab
242 +crontab -e
243 +
244 +# 添加以下行(服务器重启后自动启动)
245 +@reboot sleep 30 && /bin/bash ~/langgraph/deploy/start.sh
246 +```
247 +
248 +## 十、故障排查
249 +
250 +### 服务无法启动
251 +
252 +```bash
253 +# 检查 Python 环境
254 +cd ~/langgraph
255 +source venv/bin/activate
256 +python --version
257 +which python
258 +
259 +# 检查依赖
260 +pip list | grep langgraph
261 +
262 +# 手动测试启动
263 +python start_server_direct.py
264 +```
265 +
266 +### 端口被占用
267 +
268 +```bash
269 +# 查看端口占用
270 +lsof -i :2025
271 +# 或
272 +netstat -tlnp | grep 2025
273 +
274 +# 杀死占用进程
275 +kill -9 <PID>
276 +```
277 +
278 +### 无法访问服务
279 +
280 +1. **检查防火墙**:确认阿里云安全组已开放端口 2025
281 +2. **检查服务状态**`ps aux | grep start_server_direct`
282 +3. **检查日志**`tail -f ~/langgraph/logs/app.log`
283 +4. **测试本地访问**`curl http://localhost:2025/ok`
284 +
285 +### API 密钥错误
286 +
287 +```bash
288 +# 检查 .env 文件
289 +cat ~/langgraph/.env
290 +
291 +# 测试环境变量
292 +cd ~/langgraph
293 +source venv/bin/activate
294 +python -c "import os; from dotenv import load_dotenv; load_dotenv(); print(os.getenv('OPENAI_API_KEY'))"
295 +```
296 +
297 +## 常用命令速查
298 +
299 +```bash
300 +# 启动服务
301 +~/langgraph/deploy/start.sh
302 +
303 +# 停止服务
304 +~/langgraph/deploy/stop.sh
305 +
306 +# 重启服务
307 +~/langgraph/deploy/restart.sh
308 +
309 +# 查看状态
310 +ps aux | grep start_server_direct | grep -v grep
311 +
312 +# 查看日志
313 +tail -f ~/langgraph/logs/app.log
314 +
315 +# 测试服务
316 +curl http://localhost:2025/ok
317 +```
318 +
319 +## 注意事项
320 +
321 +1. **端口权限**:端口 2025 > 1024,普通用户可以使用,无需 root
322 +2. **目录权限**:确保 `~/langgraph` 目录有读写权限
323 +3. **日志轮转**:定期清理日志文件,避免占用过多磁盘空间
324 +4. **进程监控**:建议定期检查进程是否正常运行
325 +5. **备份**:定期备份代码和 `.env` 文件
326 +
327 +## 部署检查清单
328 +
329 +- [ ] 代码已上传到 `~/langgraph`
330 +- [ ] 虚拟环境已创建
331 +- [ ] 依赖已安装
332 +- [ ] `.env` 文件已配置 API 密钥
333 +- [ ] 服务已启动
334 +- [ ] 可以访问 `http://服务器IP:2025/ok`
335 +- [ ] 日志输出正常
336 +- [ ] 阿里云安全组已开放端口 2025
1 +[Unit]
2 +Description=LangGraph Application
3 +After=network.target
4 +
5 +[Service]
6 +Type=simple
7 +User=root
8 +WorkingDirectory=/opt/langgraph
9 +Environment="PATH=/opt/langgraph/venv/bin"
10 +EnvironmentFile=/opt/langgraph/.env
11 +ExecStart=/opt/langgraph/venv/bin/python /opt/langgraph/start_server_direct.py
12 +Restart=always
13 +RestartSec=10
14 +StandardOutput=journal
15 +StandardError=journal
16 +
17 +[Install]
18 +WantedBy=multi-user.target
19 +
1 +server {
2 + listen 80;
3 + server_name _;
4 +
5 + client_max_body_size 50M;
6 +
7 + location / {
8 + proxy_pass http://127.0.0.1:2025;
9 + proxy_http_version 1.1;
10 + proxy_set_header Upgrade $http_upgrade;
11 + proxy_set_header Connection 'upgrade';
12 + proxy_set_header Host $host;
13 + proxy_set_header X-Real-IP $remote_addr;
14 + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
15 + proxy_cache_bypass $http_upgrade;
16 + }
17 +
18 + location /ws {
19 + proxy_pass http://127.0.0.1:2025;
20 + proxy_http_version 1.1;
21 + proxy_set_header Upgrade $http_upgrade;
22 + proxy_set_header Connection "upgrade";
23 + proxy_set_header Host $host;
24 + }
25 +}
26 +
1 +#!/bin/bash
2 +# 重启 LangGraph 服务
3 +
4 +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5 +
6 +echo "正在重启 LangGraph 服务..."
7 +"$SCRIPT_DIR/stop.sh"
8 +sleep 2
9 +"$SCRIPT_DIR/start.sh"
10 +
1 +#!/bin/bash
2 +# 启动 LangGraph 服务
3 +
4 +APP_DIR="$HOME/langgraph"
5 +LOG_DIR="$APP_DIR/logs"
6 +PID_FILE="$LOG_DIR/app.pid"
7 +LOG_FILE="$LOG_DIR/app.log"
8 +
9 +# 创建日志目录
10 +mkdir -p "$LOG_DIR"
11 +
12 +# 检查是否已在运行
13 +if [ -f "$PID_FILE" ]; then
14 + PID=$(cat "$PID_FILE")
15 + if ps -p "$PID" > /dev/null 2>&1; then
16 + echo "服务已在运行 (PID: $PID)"
17 + exit 1
18 + else
19 + rm -f "$PID_FILE"
20 + fi
21 +fi
22 +
23 +# 检查应用目录
24 +if [ ! -d "$APP_DIR" ]; then
25 + echo "错误: 应用目录不存在: $APP_DIR"
26 + exit 1
27 +fi
28 +
29 +# 进入应用目录
30 +cd "$APP_DIR" || exit 1
31 +
32 +# 激活虚拟环境
33 +if [ ! -d "venv" ]; then
34 + echo "错误: 虚拟环境不存在,请先创建虚拟环境"
35 + exit 1
36 +fi
37 +
38 +source venv/bin/activate
39 +
40 +# 检查 .env 文件
41 +if [ ! -f ".env" ]; then
42 + echo "警告: .env 文件不存在,请先配置环境变量"
43 +fi
44 +
45 +# 启动服务
46 +echo "正在启动 LangGraph 服务..."
47 +nohup python start_server_direct.py > "$LOG_FILE" 2>&1 &
48 +PID=$!
49 +
50 +# 保存进程ID
51 +echo $PID > "$PID_FILE"
52 +
53 +# 等待一下,检查进程是否启动成功
54 +sleep 2
55 +if ps -p "$PID" > /dev/null 2>&1; then
56 + echo "✅ 服务已启动 (PID: $PID)"
57 + echo "📝 日志文件: $LOG_FILE"
58 + echo "🌐 访问地址: http://$(hostname -I | awk '{print $1}'):2025"
59 + echo "📊 查看日志: tail -f $LOG_FILE"
60 +else
61 + echo "❌ 服务启动失败,请查看日志: $LOG_FILE"
62 + rm -f "$PID_FILE"
63 + exit 1
64 +fi
65 +
1 +#!/bin/bash
2 +# 查看 LangGraph 服务状态
3 +
4 +APP_DIR="$HOME/langgraph"
5 +PID_FILE="$APP_DIR/logs/app.pid"
6 +
7 +echo "LangGraph 服务状态"
8 +echo "=================="
9 +echo ""
10 +
11 +if [ -f "$PID_FILE" ]; then
12 + PID=$(cat "$PID_FILE")
13 + if ps -p "$PID" > /dev/null 2>&1; then
14 + echo "✅ 服务正在运行"
15 + echo " PID: $PID"
16 + echo " 进程信息:"
17 + ps -p "$PID" -o pid,ppid,cmd,etime,pcpu,pmem
18 + echo ""
19 + echo "📊 端口监听:"
20 + netstat -tlnp 2>/dev/null | grep ":2025 " || ss -tlnp 2>/dev/null | grep ":2025 " || echo " 未检测到端口监听"
21 + echo ""
22 + echo "📝 日志文件: $APP_DIR/logs/app.log"
23 + echo ""
24 + echo "🧪 测试连接:"
25 + if curl -s http://localhost:2025/ok > /dev/null 2>&1; then
26 + echo " ✅ 服务响应正常"
27 + else
28 + echo " ⚠️ 服务无响应"
29 + fi
30 + else
31 + echo "❌ 服务未运行(PID 文件存在但进程不存在)"
32 + rm -f "$PID_FILE"
33 + fi
34 +else
35 + echo "❌ 服务未运行"
36 + PID=$(ps aux | grep start_server_direct.py | grep -v grep | awk '{print $2}' | head -1)
37 + if [ -n "$PID" ]; then
38 + echo " 警告: 发现未管理的进程 (PID: $PID)"
39 + echo " 使用以下命令停止: kill $PID"
40 + fi
41 +fi
42 +
1 +#!/bin/bash
2 +# 停止 LangGraph 服务
3 +
4 +APP_DIR="$HOME/langgraph"
5 +PID_FILE="$APP_DIR/logs/app.pid"
6 +
7 +if [ ! -f "$PID_FILE" ]; then
8 + echo "PID 文件不存在,尝试查找进程..."
9 + PID=$(ps aux | grep start_server_direct.py | grep -v grep | awk '{print $2}' | head -1)
10 + if [ -z "$PID" ]; then
11 + echo "服务未运行"
12 + exit 0
13 + fi
14 +else
15 + PID=$(cat "$PID_FILE")
16 +fi
17 +
18 +if ps -p "$PID" > /dev/null 2>&1; then
19 + echo "正在停止服务 (PID: $PID)..."
20 + kill "$PID"
21 +
22 + # 等待进程结束
23 + for i in {1..10}; do
24 + if ! ps -p "$PID" > /dev/null 2>&1; then
25 + echo "✅ 服务已停止"
26 + rm -f "$PID_FILE"
27 + exit 0
28 + fi
29 + sleep 1
30 + done
31 +
32 + # 如果还在运行,强制杀死
33 + if ps -p "$PID" > /dev/null 2>&1; then
34 + echo "强制停止服务..."
35 + kill -9 "$PID"
36 + sleep 1
37 + fi
38 +
39 + rm -f "$PID_FILE"
40 + echo "✅ 服务已停止"
41 +else
42 + echo "服务未运行"
43 + rm -f "$PID_FILE"
44 +fi
45 +