在阿里云服务器(ECS)上部署 Vue 或 React 前端项目,本质是将构建后的静态文件(dist/ 或 build/ 目录)通过 Web 服务器(如 Nginx)对外提供服务。以下是完整、安全、生产级的部署流程(以 Ubuntu 22.04/CentOS 7+ 为例,推荐 Ubuntu),涵盖 Vue 和 React 的通用步骤:
✅ 一、前提准备
-
已购买并启动阿里云 ECS 实例
- 推荐配置:2核4G(轻量级项目)、系统镜像选 Ubuntu 22.04 LTS(稳定、社区支持好)
- 安全组规则:放行 80(HTTP)和 443(HTTPS)端口(控制台 → 安全组 → 配置规则)
-
本地开发环境已构建完成
# Vue 项目(Vue CLI 或 Vite) npm run build # 输出到 dist/ # React 项目(CRA 或 Vite) npm run build # 输出到 build/✅ 确保
dist/或build/中有index.html、assets/等静态资源。
✅ 二、服务器基础配置(SSH 登录后执行)
# 1. 更新系统
sudo apt update && sudo apt upgrade -y # Ubuntu
# 或 CentOS: sudo yum update -y
# 2. 安装 Nginx(高性能静态 Web 服务器)
sudo apt install nginx -y
sudo systemctl enable nginx
sudo systemctl start nginx
# 3. 验证 Nginx 是否运行(浏览器访问 http://<你的ECS公网IP> 应看到 "Welcome to nginx!")
✅ 三、上传构建产物到服务器(3 种推荐方式)
| 方式 | 命令示例 | 说明 |
|---|---|---|
| ① SCP(最简单) | scp -r ./dist/ user@<ECS_IP>:/var/www/my-app/ |
替换 user(如 ubuntu 或 root),确保目标目录存在 |
| ② SFTP(图形化) | 使用 FileZilla / WinSCP 连接,拖拽 dist/ 到 /var/www/my-app/ |
适合不熟悉命令行的用户 |
| ③ Git + 钩子(自动化,进阶) | 需配置 Git 仓库和 post-receive 钩子 | 适合团队 CI/CD,此处略 |
🔑 关键权限设置(避免 403 错误):
sudo mkdir -p /var/www/my-app sudo chown -R $USER:$USER /var/www/my-app sudo chmod -R 755 /var/www
✅ 四、配置 Nginx 服务(核心步骤)
# 编辑站点配置(推荐独立配置文件,而非修改 default)
sudo nano /etc/nginx/sites-available/my-app
✅ 粘贴以下配置(适配 Vue/React 路由 History 模式!):
server {
listen 80;
server_name your-domain.com; # 👈 替换为你的域名(或留空用 IP 访问)
root /var/www/my-app;
index index.html;
# 关键:支持前端路由 history 模式(如 /user/123)
location / {
try_files $uri $uri/ /index.html;
}
# 静态资源缓存优化
location ~* .(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
# 防止 .htaccess / .env 等敏感文件被访问
location ~ /. {
deny all;
}
}
✅ 启用配置:
# 创建软链接启用站点
sudo ln -sf /etc/nginx/sites-available/my-app /etc/nginx/sites-enabled/
# 测试 Nginx 配置语法
sudo nginx -t
# 重载配置(不中断服务)
sudo systemctl reload nginx
⚠️ 如果使用 IP 直接访问(无域名),
server_name可删掉或写成server_name _;
✅ 五、(强烈推荐)配置 HTTPS(SSL)
使用免费证书(Let’s Encrypt + Certbot):
# 安装 Certbot
sudo apt install certbot python3-certbot-nginx -y
# 获取并自动配置证书(需域名已解析到该 ECS IP!)
sudo certbot --nginx -d your-domain.com
# 自动续期(Certbot 已配置 systemd timer,无需额外操作)
sudo certbot renew --dry-run # 测试续期
✅ 完成后,Nginx 会自动添加 443 端口配置,并强制 HTTP 重定向到 HTTPS。
✅ 六、常见问题排查
| 问题 | 解决方案 |
|---|---|
| ❌ 页面空白 / 白屏 | 检查 index.html 中资源路径是否为相对路径(Vite 默认 base: "/",CRA/Vue CLI 构建时确保 publicPath: "/");检查浏览器控制台 Network 标签看 JS/CSS 是否 404 |
| ❌ 刷新 404(History 路由) | 确认 Nginx location / { try_files ... } 配置已生效,且未被其他 location 覆盖 |
| ❌ 403 Forbidden | 检查 /var/www/my-app 目录权限:sudo chown -R www-data:www-data /var/www/my-app(Ubuntu)或 nginx:nginx(CentOS) |
| ❌ 无法访问(超时) | 检查阿里云安全组是否开放 80/443 端口;检查 ECS 实例是否运行中;sudo ufw status(Ubuntu)确认防火墙未拦截 |
✅ 七、进阶建议(生产环境)
-
使用 PM2 管理 SSR 项目(如 Vue Nuxt / Next.js):
npm install -g pm2 pm2 start npm --name "my-ssr" -- start pm2 startup && pm2 save -
CI/CD 自动化:GitHub Actions / Gitee Go 触发构建 → 自动上传到 ECS(配合 SSH 密钥)
-
多环境部署:通过
.env.production设置VUE_APP_API_BASE_URL或REACT_APP_API_URL,指向后端真实地址(不要写 localhost!) -
性能优化:开启 gzip、Brotli 压缩(Nginx 配置中添加
gzip on;)
📌 总结流程图
本地构建 → 上传 dist/ → Nginx 配置(含 history 支持)→ 开放端口 → HTTPS → 上线 ✅
💡 最后一步验证:
在浏览器打开http://<ECS公网IP>或https://your-domain.com,应正常显示你的 Vue/React 应用。
需要我为你生成:
- ✅ 完整的
nginx.conf示例? - ✅ Vue CLI / Vite / CRA 的
vue.config.js/vite.config.ts/craco.config.js中publicPath配置? - ✅ 自动化部署脚本(Shell/Python)?
- ✅ Docker 部署方案?
欢迎随时告诉我你的具体技术栈(如 “Vue3 + Vite + 阿里云 DNS”),我可以为你定制详细配置! 🚀
云服务器