在阿里云上部署 Node.js 后端 + Vue 前端,推荐采用 “云服务器 ECS + Nginx 反向X_X + PM2 进程管理 + 静态资源托管” 的组合方案。以下是具体步骤和架构建议:
✅ 推荐架构概览
用户访问
↓
[阿里云 SLB / 直接通过域名]
↓
[Nginx(反向X_X)]
├─ /api/* → 转发至 Node.js 后端(ECS 上的 PM2 进程)
└─ /* → 返回 Vue 构建后的静态文件(/dist)
↓
[ECS 服务器]
├─ Node.js 应用(PM2 管理)
└─ Vue 静态文件(Nginx 提供)
💡 优势:成本低、运维简单、支持 HTTPS、便于扩展(后续可拆分为独立服务)。
🛠️ 详细实施步骤
1. 准备环境
- 购买阿里云 ECS(推荐 CentOS 7+/Ubuntu 20.04+,2 核 2G 起步)
-
安装基础依赖:
# Ubuntu/Debian sudo apt update && sudo apt install -y nginx nodejs npm git curl # CentOS/RHEL sudo yum install -y nginx epel-release sudo yum install -y nginx nodejs npm git curl - 验证版本:
node -v && npm -v && nginx -v
2. 部署 Vue 前端(构建为静态资源)
在项目根目录执行:
npm run build
# 生成 dist/ 目录
将 dist/ 整个目录上传到 ECS(如 /var/www/myapp/dist):
scp -r ./dist root@your-ecs-ip:/var/www/myapp/dist
3. 部署 Node.js 后端
- 将后端代码上传至 ECS(如
/var/www/myapp/backend) - 安装依赖并启动:
cd /var/www/myapp/backend npm install --production npm install -g pm2 pm2 start app.js --name my-backend # 替换为你的入口文件 pm2 save pm2 startup
🔐 建议配置环境变量(
.env),并通过pm2的ecosystem.config.js管理配置。
4. 配置 Nginx 反向X_X
编辑 Nginx 配置文件(如 /etc/nginx/sites-available/default 或新建 /etc/nginx/conf.d/myapp.conf):
server {
listen 80;
server_name your-domain.com; # 替换为你的域名
# 前端静态资源
location / {
root /var/www/myapp/dist;
try_files $uri $uri/ /index.html; # SPA 路由支持
}
# 后端 API 接口
location /api/ {
proxy_pass http://127.0.0.1:3000; # Node.js 监听端口
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# 可选:强制 HTTPS(需先申请证书)
# return 301 https://$server_name$request_uri;
}
测试并重启 Nginx:
sudo nginx -t
sudo systemctl reload nginx
5. 配置域名与 HTTPS(强烈推荐)
方式一:使用阿里云 SSL 证书服务(免费 DV 证书)
- 在 阿里云控制台 → 搜索 SSL 证书
- 申请免费通配符或单域名证书
- 下载
.crt和.key文件上传至 ECS - 修改 Nginx 配置启用 HTTPS:
server {
listen 443 ssl;
server_name your-domain.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
# ... 同上 location 配置
}
server {
listen 80;
server_name your-domain.com;
return 301 https://$server_name$request_uri;
}
方式二:Let’s Encrypt(Certbot)
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com
6. 安全加固(重要!)
- 开放防火墙仅允许必要端口:
sudo ufw allow 'Nginx Full' sudo ufw allow OpenSSH sudo ufw enable - 禁用 SSH 密码登录,改用密钥对
- 定期更新系统:
apt upgrade/yum update - 设置日志轮转 & 监控(可用云监控 + 告警)
📦 进阶优化建议
| 场景 | 推荐方案 |
|---|---|
| 高并发/流量大 | 升级 ECS 配置 + 接入 SLB(负载均衡) + Auto Scaling |
| 多环境隔离 | 使用 Docker 容器化部署(ECS + Docker Compose 或 ACK) |
| CI/CD 自动化 | 结合 阿里云效 或 GitHub Actions + 弹性伸缩部署脚本 |
| 数据库分离 | 将 MySQL/Redis 迁移至 RDS / Tair 等托管服务 |
| 前端 CDN 提速 | 将 Vue 静态资源同步至 OSS + CDN,Nginx 中指向 CDN 地址 |
需要我为你生成完整的 docker-compose.yml 方案、CI/CD 流水线模板,或针对特定框架(如 NestJS + Vite)的配置示例吗?
CLOUD云枢