README.md 6.11 KB

部署指南(无 root 权限)

一、服务器准备

  1. 购买阿里云 ECS(Ubuntu 20.04+ 或 CentOS 7+)
  2. 安全组开放端口:222025
  3. SSH 连接服务器(使用普通用户,非 root)

二、检查环境

# 检查 Python 版本(需要 Python 3.8+)
python3 --version

# 如果没有 Python3,尝试安装(可能需要管理员协助)
# 或使用 conda/miniconda 等用户级 Python 环境

三、部署应用

1. 上传代码

# 方式1: 使用 scp(本地执行,替换 username 为你的用户名)
scp -r . username@服务器IP:~/langgraph/

# 方式2: 使用 Git
cd ~
git clone <仓库地址> langgraph

# 方式3: 使用 FTP/SFTP 工具上传到 ~/langgraph/

2. 安装依赖

cd ~/langgraph
python3 -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
pip install uvicorn python-dotenv

3. 配置环境变量

cd ~/langgraph
vim .env

添加内容:

OPENAI_API_KEY=your-api-key
OPENAI_BASE_URL=https://api.deepseek.com/v1

4. 创建日志目录

mkdir -p ~/langgraph/logs

四、启动服务

方式1: 使用启动脚本(推荐)

cd ~/langgraph
chmod +x deploy/start.sh deploy/stop.sh deploy/restart.sh

# 启动服务
./deploy/start.sh

# 停止服务
./deploy/stop.sh

# 重启服务
./deploy/restart.sh

方式2: 使用 nohup 后台运行

cd ~/langgraph
source venv/bin/activate
nohup python start_server_direct.py > logs/app.log 2>&1 &
echo $! > logs/app.pid  # 保存进程ID

方式3: 使用 screen(推荐用于长时间运行)

# 安装 screen(如果未安装,可能需要管理员协助)
# 或使用 tmux

# 创建 screen 会话
screen -S langgraph

# 在 screen 中启动
cd ~/langgraph
source venv/bin/activate
python start_server_direct.py

# 按 Ctrl+A 然后按 D 退出 screen(服务继续运行)

# 重新连接 screen
screen -r langgraph

方式4: 使用 tmux

# 创建 tmux 会话
tmux new -s langgraph

# 在 tmux 中启动
cd ~/langgraph
source venv/bin/activate
python start_server_direct.py

# 按 Ctrl+B 然后按 D 退出 tmux(服务继续运行)

# 重新连接 tmux
tmux attach -t langgraph

五、验证部署

# 检查服务是否运行
curl http://localhost:2025/ok

# 或从外部访问(替换为你的服务器IP)
curl http://服务器IP:2025/ok

# 查看日志
tail -f ~/langgraph/logs/app.log

# 检查进程
ps aux | grep start_server_direct

六、进程管理

查看进程

# 查看进程ID
cat ~/langgraph/logs/app.pid

# 查看进程状态
ps -p $(cat ~/langgraph/logs/app.pid 2>/dev/null)

停止服务

# 如果使用启动脚本
~/langgraph/deploy/stop.sh

# 如果使用 nohup
kill $(cat ~/langgraph/logs/app.pid)

# 如果使用 screen
screen -S langgraph -X quit

# 如果使用 tmux
tmux kill-session -t langgraph

# 手动查找并杀死进程
ps aux | grep start_server_direct | grep -v grep | awk '{print $2}' | xargs kill

重启服务

# 使用启动脚本
~/langgraph/deploy/restart.sh

# 或手动停止后重新启动
./deploy/stop.sh
./deploy/start.sh

七、更新代码

cd ~/langgraph

# 停止服务
./deploy/stop.sh

# 更新代码(根据你的方式)
git pull
# 或重新上传文件

# 更新依赖(如果有新依赖)
source venv/bin/activate
pip install -r requirements.txt

# 重启服务
./deploy/start.sh

八、日志管理

# 查看实时日志
tail -f ~/langgraph/logs/app.log

# 查看最近100行
tail -n 100 ~/langgraph/logs/app.log

# 查看错误日志
grep -i error ~/langgraph/logs/app.log

# 清空日志(谨慎使用)
> ~/langgraph/logs/app.log

九、开机自启(可选)

方法1: 添加到 ~/.bashrc 或 ~/.profile

# 编辑 ~/.bashrc
vim ~/.bashrc

# 添加以下内容(如果是交互式登录,使用 ~/.profile)
if [ -f ~/langgraph/deploy/start.sh ]; then
    ~/langgraph/deploy/start.sh
fi

注意:这种方法会在每次登录时启动,可能不是最佳选择。

方法2: 使用 cron(推荐)

# 编辑 crontab
crontab -e

# 添加以下行(服务器重启后自动启动)
@reboot sleep 30 && /bin/bash ~/langgraph/deploy/start.sh

十、故障排查

服务无法启动

# 检查 Python 环境
cd ~/langgraph
source venv/bin/activate
python --version
which python

# 检查依赖
pip list | grep langgraph

# 手动测试启动
python start_server_direct.py

端口被占用

# 查看端口占用
lsof -i :2025
# 或
netstat -tlnp | grep 2025

# 杀死占用进程
kill -9 <PID>

无法访问服务

  1. 检查防火墙:确认阿里云安全组已开放端口 2025
  2. 检查服务状态ps aux | grep start_server_direct
  3. 检查日志tail -f ~/langgraph/logs/app.log
  4. 测试本地访问curl http://localhost:2025/ok

API 密钥错误

# 检查 .env 文件
cat ~/langgraph/.env

# 测试环境变量
cd ~/langgraph
source venv/bin/activate
python -c "import os; from dotenv import load_dotenv; load_dotenv(); print(os.getenv('OPENAI_API_KEY'))"

常用命令速查

# 启动服务
~/langgraph/deploy/start.sh

# 停止服务
~/langgraph/deploy/stop.sh

# 重启服务
~/langgraph/deploy/restart.sh

# 查看状态
ps aux | grep start_server_direct | grep -v grep

# 查看日志
tail -f ~/langgraph/logs/app.log

# 测试服务
curl http://localhost:2025/ok

注意事项

  1. 端口权限:端口 2025 > 1024,普通用户可以使用,无需 root
  2. 目录权限:确保 ~/langgraph 目录有读写权限
  3. 日志轮转:定期清理日志文件,避免占用过多磁盘空间
  4. 进程监控:建议定期检查进程是否正常运行
  5. 备份:定期备份代码和 .env 文件

部署检查清单

  • 代码已上传到 ~/langgraph
  • 虚拟环境已创建
  • 依赖已安装
  • .env 文件已配置 API 密钥
  • 服务已启动
  • 可以访问 http://服务器IP:2025/ok
  • 日志输出正常
  • 阿里云安全组已开放端口 2025