Skip to content

阿里云 ECS + Nginx 部署

将 LangChain/LangGraph 项目部署到阿里云 ECS 的完整指南。本文假设你已经有了一台阿里云 ECS 服务器。

服务器准备

实例推荐

场景推荐配置参考价格
开发测试2C4G~100 元/月
生产(轻量)4C8G~300 元/月
生产(高并发)8C16G + GPU~1000+ 元/月

系统初始化

bash
# Ubuntu 22.04
apt update && apt upgrade -y
apt install -y nginx python3 python3-pip python3-venv git

# 开启防火墙
ufw allow 22
ufw allow 80
ufw allow 443
ufw enable

应用部署

使用 Systemd 管理

创建应用服务:

ini
# /etc/systemd/system/langgraph-agent.service
[Unit]
Description=LangGraph Agent
After=network.target

[Service]
Type=simple
User=ubuntu
WorkingDirectory=/opt/langgraph-agent
Environment="ANTHROPIC_API_KEY=***"
Environment="LANGSMITH_TRACING=true"
Environment="LANGSMITH_API_KEY=***"
ExecStart=/opt/langgraph-agent/venv/bin/python -m uvicorn app:app --host 127.0.0.1 --port 8000
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
bash
systemctl daemon-reload
systemctl enable langgraph-agent
systemctl start langgraph-agent

Nginx 配置

基本配置

nginx
server {
    listen 443 ssl;
    server_name your-domain.com;

    # SSL 证书
    ssl_certificate /etc/nginx/cert/your-domain.pem;
    ssl_certificate_key /etc/nginx/cert/your-domain.key;
    ssl_protocols TLSv1.2 TLSv1.3;

    # 应用代理
    location /api/ {
        proxy_pass http://127.0.0.1:8000/;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    # Streaming / SSE 需要关闭缓冲
    location /api/stream {
        proxy_pass http://127.0.0.1:8000/stream;
        proxy_http_version 1.1;
        proxy_set_header Connection '';
        proxy_buffering off;
        proxy_cache off;
        proxy_read_timeout 86400s;
    }

    # WebSocket 支持
    location /ws/ {
        proxy_pass http://127.0.0.1:8000/ws/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 86400s;
    }

    # 静态文件
    location / {
        root /var/www/html;
        index index.html;
        try_files $uri $uri/ /index.html;
    }
}

HTTP 重定向到 HTTPS

nginx
server {
    listen 80;
    server_name your-domain.com;
    return 301 https://$host$request_uri;
}

HTTPS 证书

使用阿里云免费证书

  1. 在阿里云 SSL 证书控制台申请免费证书
  2. 下载 Nginx 版本证书
  3. 上传到 /etc/nginx/cert/your-domain/
  4. 配置 Nginx 并重启

使用 acme.sh 自动续签

bash
curl https://get.acme.sh | sh
~/.acme.sh/acme.sh --issue -d your-domain.com --nginx
~/.acme.sh/acme.sh --install-cert -d your-domain.com \
    --key-file /etc/nginx/cert/your-domain.key \
    --fullchain-file /etc/nginx/cert/your-domain.pem
systemctl reload nginx

Docker 部署

Dockerfile

dockerfile
FROM python:3.11-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install -r requirements.txt

COPY . .

EXPOSE 8000
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"]

docker-compose.yml

yaml
version: '3.8'
services:
  app:
    build: .
    ports:
      - "127.0.0.1:8000:8000"
    environment:
      - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
      - LANGSMITH_TRACING=true
      - LANGSMITH_API_KEY=${LANGSMITH_API_KEY}
    restart: always

  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
      - /etc/nginx/cert:/etc/nginx/cert
    depends_on:
      - app
    restart: always

数据库配置

PostgreSQL(生产推荐)

bash
apt install -y postgresql postgresql-client

# 创建数据库
sudo -u postgres psql
CREATE DATABASE langgraph;
CREATE USER agent WITH PASSWORD 'strong_password';
GRANT ALL PRIVILEGES ON DATABASE langgraph TO agent;

Redis(可选,用于缓存)

bash
apt install -y redis-server
systemctl enable redis-server
systemctl start redis-server

监控

基础监控

bash
# 安装 Node Exporter
wget https://github.com/prometheus/node_exporter/releases/download/v1.6.0/node_exporter-1.6.0.linux-amd64.tar.gz
tar xvf node_exporter-*.tar.gz
./node_exporter &

Nginx 日志轮转

nginx
# /etc/logrotate.d/nginx
/var/log/nginx/*.log {
    daily
    rotate 30
    compress
    delaycompress
    missingok
    notifempty
    sharedscripts
    postrotate
        [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

部署检查清单

  • [ ] 域名已备案且解析到服务器 IP
  • [ ] HTTPS 证书已配置
  • [ ] 防火墙只开放 22/80/443
  • [ ] SSH 密钥登录(禁用密码)
  • [ ] 应用进程通过 systemd 管理
  • [ ] 日志轮转已配置
  • [ ] 数据库备份策略
  • [ ] 监控告警已设置

参考

本站为非官方中文学习站点,不代表 LangChain 官方。部分内容参考官方文档并重新整理为中文学习笔记。