在阿里云服务器(ECS)上部署 Vue 或 React 前端项目,本质上是将构建后的静态资源(HTML/CSS/JS)通过 Web 服务器(如 Nginx)托管并对外提供服务。以下是完整、安全、生产就绪的部署流程(以 Ubuntu 22.04 LTS 为例,也适用于 CentOS/RHEL/Alibaba Cloud Linux):
✅ 一、前提准备
-
已开通阿里云 ECS 实例
- 推荐配置:2核4G(轻量级项目)、系统镜像选
Ubuntu 22.04 LTS或Alibaba Cloud Linux 3 - 安全组规则:放行 80(HTTP) 和 443(HTTPS) 端口(如需 HTTPS,后续配置 SSL)
- 推荐配置:2核4G(轻量级项目)、系统镜像选
-
本地开发环境已构建完成
- Vue 项目:
npm run build→ 输出dist/目录 - React 项目:
npm run build→ 输出build/目录
✅ 确保
vue.config.js(Vue)或craco.config.js/package.json中的homepage字段正确(如"homepage": "/"或"/myapp/"),避免路由/资源路径错误。
- Vue 项目:
✅ 二、服务器环境配置(ECS 上操作)
1. 更新系统 & 安装必要工具
sudo apt update && sudo apt upgrade -y
sudo apt install -y nginx git curl wget unzip
2. 创建部署目录(推荐非 root 用户操作)
# 创建专用用户(可选但推荐)
sudo adduser deploy
sudo usermod -aG sudo deploy
sudo su - deploy
# 创建网站根目录
mkdir -p /var/www/my-vue-app
sudo chown -R $USER:$USER /var/www/my-vue-app
3. 上传构建产物(3 种常用方式)
| 方式 | 命令示例 | 说明 |
|---|---|---|
| ① SCP(推荐,简单安全) | scp -r ./dist/* deploy@<ECS公网IP>:/var/www/my-vue-app/ |
本地执行,需提前配置 SSH 密钥免密登录 |
| ② Git + 钩子(适合 CI/CD) | git clone https://xxx.git /var/www/my-vue-app |
需确保代码仓库公开或配置 deploy key |
| ③ SFTP 工具(如 FileZilla) | 图形化拖拽上传 dist/ 内容到 /var/www/my-vue-app/ |
适合新手 |
✅ 上传后检查文件权限:
ls -la /var/www/my-vue-app/应有index.html等文件。
✅ 三、配置 Nginx(关键步骤!)
1. 编写 Nginx 配置文件
sudo nano /etc/nginx/sites-available/my-vue-app
粘贴以下内容(适配 Vue Router history 模式 / React Router v6+):
server {
listen 80;
server_name your-domain.com; # 替换为你的域名(或留空用 IP 访问)
root /var/www/my-vue-app;
index index.html;
# 支持前端路由(history 模式)→ 所有未匹配静态资源的请求都返回 index.html
location / {
try_files $uri $uri/ /index.html;
}
# 静态资源缓存优化
location ~* .(js|css|png|jpg|jpeg|gif|ico|svg|woff2|ttf|eot)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
# 禁止访问敏感文件
location ~ /.ht {
deny all;
}
}
2. 启用站点并测试配置
# 创建软链接启用站点
sudo ln -sf /etc/nginx/sites-available/my-vue-app /etc/nginx/sites-enabled/
# 测试 Nginx 配置语法
sudo nginx -t
# 重启 Nginx
sudo systemctl restart nginx
# 设置开机自启(如未启用)
sudo systemctl enable nginx
✅ 验证是否成功:
- 浏览器访问
http://<ECS公网IP>或http://your-domain.com - 应看到你的 Vue/React 页面 ✅
- 打开开发者工具 → Network 标签 → 刷新,确认
index.html和 JS/CSS 加载成功。
✅ 四、(强烈推荐)配置 HTTPS(使用免费 Let’s Encrypt)
# 安装 Certbot
sudo apt install -y certbot python3-certbot-nginx
# 获取证书(自动修改 Nginx 配置)
sudo certbot --nginx -d your-domain.com -d www.your-domain.com
# 自动续期(Certbot 已配置 systemd timer,无需额外操作)
sudo certbot renew --dry-run # 测试续期
🔐 后续所有流量将自动重定向到 HTTPS,Nginx 配置会自动更新为
listen 443 ssl。
✅ 五、进阶建议(生产环境必备)
| 场景 | 推荐方案 | 说明 |
|---|---|---|
| 自动部署 | GitHub Actions / Gitee Webhook + SSH 脚本 | 提交代码后自动构建并推送 dist 到服务器 |
| 多环境支持 | 构建时传入 --mode staging,配合 .env.staging |
区分开发/测试/生产 API 地址 |
| API X_X(开发时) | vue.config.js 中 devServer.proxy / craco.config.js 中 devServer.proxy |
仅开发阶段,生产环境必须由 Nginx 反向X_X API(见下方) |
| 反向X_X后端 API | 在 Nginx 配置中添加 location /api { proxy_pass http://backend-server; } |
避免跨域,统一域名,提升安全性 |
| 性能监控 | 集成 Sentry / Vercel Analytics(需 CDN 支持) | 错误追踪与性能分析 |
❌ 常见问题排查
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 白屏 / 404 | router 使用了 history 模式但 Nginx 未配置 try_files |
✅ 检查上述 Nginx location / 配置 |
| 资源加载 404(JS/CSS) | publicPath 配置错误(如设为 /sub/ 但没部署在子路径) |
检查 vue.config.js 的 publicPath 或 build.outputDir,保持与 Nginx root 一致 |
| 无法访问(超时) | 安全组未放行 80/443 端口 | 登录阿里云控制台 → ECS 实例 → 安全组 → 添加入方向规则 |
| 权限拒绝(403) | Nginx 进程无权读取 /var/www/... 文件 |
sudo chown -R www-data:www-data /var/www/my-vue-app(Ubuntu)或 nginx:nginx(CentOS) |
| 构建后页面空白(控制台报错) | 混淆了 process.env.NODE_ENV 或动态 import() 路径错误 |
构建前运行 npm run build -- --report 查看资源依赖图 |
🌟 补充:快速验证脚本(一键部署参考)
# 将此保存为 deploy.sh,上传后执行
#!/bin/bash
APP_DIR="/var/www/my-vue-app"
BACKUP_DIR="/var/www/my-vue-app-backup-$(date +%s)"
sudo cp -r "$APP_DIR" "$BACKUP_DIR"
rsync -av --delete ./dist/ "$APP_DIR/"
sudo nginx -t && sudo systemctl reload nginx
echo "✅ Deployed! Backup: $BACKUP_DIR"
需要我为你:
- ✨ 生成完整的
nginx.conf示例(含 HTTPS + API X_X)? - 🐳 提供 Docker 部署方案(更隔离、易迁移)?
- 🤖 写一个 GitHub Actions 自动化部署 YAML?
- 📱 配置阿里云 CDN 提速静态资源?
欢迎随时告诉我你的具体需求(比如你用的是 Vue 3 + Vite?还是 React 18 + Create React App?是否有后端 API?是否已备案域名?),我可以为你定制最简最优方案!🚀
CLOUD技术博