如何在阿里云服务器上部署Vue或React前端项目?

在阿里云服务器(ECS)上部署 Vue 或 React 前端项目,本质上是将构建后的静态资源(HTML/CSS/JS)通过 Web 服务器(如 Nginx)托管并对外提供服务。以下是完整、安全、生产就绪的部署流程(以 Ubuntu 22.04 LTS 为例,也适用于 CentOS/RHEL/Alibaba Cloud Linux):


✅ 一、前提准备

  1. 已开通阿里云 ECS 实例

    • 推荐配置:2核4G(轻量级项目)、系统镜像选 Ubuntu 22.04 LTS 或 Alibaba Cloud Linux 3
    • 安全组规则:放行 80(HTTP) 和 443(HTTPS) 端口(如需 HTTPS,后续配置 SSL)
  2. 本地开发环境已构建完成

    • Vue 项目:npm run build → 输出 dist/ 目录
    • React 项目:npm run build → 输出 build/ 目录

      ✅ 确保 vue.config.js(Vue)或 craco.config.js/package.json 中的 homepage 字段正确(如 "homepage": "/" 或 "/myapp/"),避免路由/资源路径错误。


✅ 二、服务器环境配置(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技术博 » 如何在阿里云服务器上部署Vue或React前端项目?