将 Vue 前端和 Node.js 后端部署在同一台阿里云主机上是常见做法,尤其适用于中小型项目。以下是部署时需要注意的关键事项和最佳实践:
一、服务器环境准备
-
选择合适的 ECS 实例
- 根据项目规模选择 CPU、内存(建议至少 2GB RAM)。
- 操作系统推荐:Ubuntu 20.04/22.04 LTS 或 CentOS 7/8。
-
安全组配置
- 开放必要端口:
80(HTTP)443(HTTPS)22(SSH)- 若调试用可临时开放后端 API 端口(如
3000),但生产环境应通过 Nginx 反向,不直接暴露。
- 建议关闭其他不必要的端口。
- 开放必要端口:
-
更新系统与安装基础工具
sudo apt update && sudo apt upgrade -y sudo apt install nginx git curl wget -y
二、Node.js 和 npm 安装
使用 nvm 管理 Node.js 版本更灵活:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
source ~/.bashrc
nvm install 18 # 推荐 LTS 版本
验证安装:
node -v
npm -v
三、部署前端(Vue)
-
构建 Vue 项目
在本地或 CI 中执行:npm run build生成
dist/目录。 -
上传 dist 文件到服务器
使用scp、rsync或 Git 部署:scp -r dist/* user@your-server-ip:/var/www/vue-app/ -
目录权限设置
sudo chown -R www-data:www-data /var/www/vue-app sudo chmod -R 755 /var/www/vue-app
四、部署后端(Node.js)
-
上传代码
将 Node.js 项目上传至服务器,例如/var/www/api/。 -
安装依赖
cd /var/www/api npm install --production -
使用 PM2 管理进程
安装 PM2:npm install -g pm2启动服务:
pm2 start app.js --name "my-api" pm2 startup # 设置开机自启 pm2 save -
配置环境变量
使用.env文件管理敏感信息(数据库密码、密钥等),并确保.gitignore忽略该文件。
五、使用 Nginx 统一入口(关键!)
避免前后端分别占用不同端口,推荐使用 Nginx 作为反向和静态资源服务器。
示例 Nginx 配置(/etc/nginx/sites-available/default)
server {
listen 80;
server_name your-domain.com; # 或公网 IP
# 前端:Vue SPA 路由支持
location / {
root /var/www/vue-app;
try_files $uri $uri/ /index.html;
expires 1h;
add_header Cache-Control "public, must-revalidate";
}
# 后端 API
location /api/ {
proxy_pass http://localhost:3000/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
}
# WebSocket 支持(如有)
location /ws/ {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
测试并重载 Nginx:
sudo nginx -t
sudo systemctl reload nginx
✅ 优点:用户访问
http://your-domain.com即可访问前端,API 请求自动转发到 Node.js。
六、域名与 HTTPS(可选但推荐)
-
绑定域名
- 在阿里云控制台解析域名到 ECS 公网 IP。
-
申请免费 SSL 证书(Let’s Encrypt)
使用 Certbot:sudo apt install certbot python3-certbot-nginx -y sudo certbot --nginx -d your-domain.com自动配置 HTTPS 并启用自动续期。
七、安全与性能优化
-
隐藏服务器信息
修改 Nginx 隐藏版本号:server_tokens off; -
防止暴力攻击
使用fail2ban监控 SSH 登录尝试。 -
日志监控
- 查看 Nginx 日志:
/var/log/nginx/access.log,error.log - 查看 PM2 日志:
pm2 logs
- 查看 Nginx 日志:
-
定期备份
备份数据库、代码、SSL 证书等重要数据。
八、常见问题排查
| 问题 | 解决方案 |
|---|---|
| 前端页面 404(刷新路由失效) | 使用 try_files $uri $uri/ /index.html; |
| API 请求 502 Bad Gateway | 检查 Node.js 是否运行,端口是否监听 |
| 跨域错误 | 不应出现,因 Nginx 统一了前后端 |
| 权限不足 | 检查文件夹权限和用户归属 |
总结:最佳实践清单
✅ 使用 Nginx 统一入口
✅ 前端部署在 /var/www/vue-app
✅ 后端用 PM2 守护进程运行
✅ API 通过 Nginx 反向(不暴露 3000 端口)
✅ 配置 HTTPS 提高安全性
✅ 使用域名而非 IP 访问
✅ 定期更新系统和软件包
通过以上配置,你可以在一台阿里云 ECS 上稳定运行 Vue + Node.js 全栈应用。后续可根据流量增长考虑前后端分离部署或使用负载均衡。
CLOUD技术笔记