部署心得与性能优化

服务器配置

  • 规格:阿里云轻量应用服务器 2核2G
  • 系统:Ubuntu 22.04
  • 磁盘:40GB ESSD

部署架构

[Nginx :80/:443]
    ├── /static/* → 直接返回静态文件
    └── /* → Go网关 (:8080)
              ├── / → 首页
              ├── /blog* → 博客
              └── /api/chat → SSE代理 → Python (:8001)

Nginx配置

server {
    listen 80;
    server_name your-domain.com;

    # 静态文件直接由Nginx处理
    location /static/ {
        alias /opt/travelagent5/static/;
        expires 7d;
        add_header Cache-Control "public, immutable";
    }

    # SSE代理 - 关闭缓冲
    location /api/chat {
        proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;
        proxy_set_header Connection '';
        proxy_buffering off;
        proxy_cache off;
        chunked_transfer_encoding off;
    }

    # 其他请求转发到Go网关
    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

关键点:SSE端点必须关闭proxy_buffering,否则流式消息会被Nginx缓冲,前端收不到实时数据。

进程管理:systemd

# /etc/systemd/system/travelagent5-go.service
[Unit]
Description=TravelAgent-5 Go Gateway
After=network.target

[Service]
Type=simple
ExecStart=/opt/travelagent5/travelagent5
WorkingDirectory=/opt/travelagent5
Restart=always
RestartSec=5

# /etc/systemd/system/travelagent5-py.service
[Unit]
Description=TravelAgent-5 Python Backend
After=network.target

[Service]
Type=simple
ExecStart=/opt/travelagent5/venv/bin/uvicorn backend.main:app --host 0.0.0.0 --port 8001
WorkingDirectory=/opt/travelagent5
Restart=always
RestartSec=5
EnvironmentFile=/opt/travelagent5/.env

性能优化

1. Go端

  • embed.FS:所有静态文件编译进二进制,零文件系统IO
  • goldmark缓存:博客Markdown只在首次请求时渲染,后续直接返回缓存HTML
  • 连接池:Go到Python的HTTP连接复用

2. Python端

  • 模型选择:DeepSeek-V3,响应快、价格低
  • 工具缓存:flyai-cli结果可加TTL缓存(减少重复调用)
  • 超时控制:每个Agent设置30秒超时,避免阻塞

3. 前端

  • CDN加载marked.js:不占用服务器带宽
  • SSE而非WebSocket:更轻量,Nginx原生支持
  • CSS Grid:浏览器原生布局,无JS计算开销

监控

# 查看Go网关状态
systemctl status travelagent5-go

# 查看Python后端状态
systemctl status travelagent5-py

# 查看内存使用
free -h

# 查看日志
journalctl -u travelagent5-go -f
journalctl -u travelagent5-py -f

问题优化(不断更新中)

Q: Python后端OOM怎么办?

A: 2G内存下,Python进程可能因LLM调用过多而OOM。解决方案:

  • 限制并发请求数(uvicorn workers设为1)
  • 每个Agent设置超时
  • 监控内存使用,设置systemd的MemoryMax

Q: SSE连接断开怎么办?

A: 前端实现自动重连:

// 断线后3秒重连
source.onerror = () => setTimeout(connect, 3000);

导航

← 上一篇:技术选型详解:为什么选这些技术栈? → 下一篇:TravelAgent-5 记忆系统:三层记忆架构与上下文管理