阿里云 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.targetbash
systemctl daemon-reload
systemctl enable langgraph-agent
systemctl start langgraph-agentNginx 配置
基本配置
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 证书
使用阿里云免费证书
- 在阿里云 SSL 证书控制台申请免费证书
- 下载 Nginx 版本证书
- 上传到
/etc/nginx/cert/your-domain/ - 配置 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 nginxDocker 部署
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 管理
- [ ] 日志轮转已配置
- [ ] 数据库备份策略
- [ ] 监控告警已设置