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

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


✅ 一、前提准备

  1. 阿里云 ECS 实例

    • 操作系统:推荐 Ubuntu 22.04 LTS 或 CentOS 7+(本文以 Ubuntu 为例)
    • 安全组配置:放行 80(HTTP)和 443(HTTPS)端口(控制台 → 安全组 → 添加入方向规则)
    • 建议使用密钥对登录(更安全)
  2. 本地开发环境

    • 项目已通过 npm run build 成功生成 dist/(Vue)或 build/(React)目录
    • 确保 vue.config.js(Vue)或 craco.config.js/webpack.config.js(React)中正确配置了 publicPath
      // Vue: vue.config.js
      module.exports = {
      publicPath: './', // 或 '/'(若部署在根路径);若部署在子路径如 /myapp/,则设为 '/myapp/'
      outputDir: 'dist'
      }
      // React: craco.config.js(使用 craco)或 package.json 中的 homepage 字段
      // package.json
      "homepage": "./"  // 或 "/" 或 "/myapp/"

✅ 二、服务器端操作(SSH 登录后执行)

1️⃣ 安装并配置 Nginx(推荐,轻量高效)

# 更新 & 安装 Nginx
sudo apt update
sudo apt install -y nginx

# 启动并设置开机自启
sudo systemctl enable nginx
sudo systemctl start nginx

# 验证:访问 http://<你的ECS公网IP>,应看到 "Welcome to nginx!"

2️⃣ 上传构建产物(3 种推荐方式)

方式 说明 命令示例
① SCP(简单直接) 适合小项目、CI/CD 前手动部署 scp -r ./dist/ ubuntu@<ECS_IP>:/var/www/myapp/
② Git + Hook(自动化) 推荐!代码推送到服务器自动构建/部署 见下方扩展方案
③ SFTP(图形化) 使用 FileZilla / WinSCP 拖拽上传 连接后上传到 /var/www/myapp/

推荐目录结构(权限规范):

sudo mkdir -p /var/www/myapp
sudo chown -R $USER:$USER /var/www/myapp
sudo chmod -R 755 /var/www

将本地 dist/ 内容上传至 /var/www/myapp/(确保包含 index.html

3️⃣ 配置 Nginx 站点(关键!支持前端路由 & 静态资源)

# 编辑新站点配置
sudo nano /etc/nginx/sites-available/myapp

粘贴以下配置(适配 Vue Router / React Router 的 history 模式):

server {
    listen 80;
    server_name your-domain.com;  # ✅ 替换为你的域名(或留空用 IP 访问)
    root /var/www/myapp;
    index index.html;

    # 支持前端路由:所有非资源请求都返回 index.html
    location / {
        try_files $uri $uri/ /index.html;
    }

    # 静态资源缓存优化
    location ~* .(js|css|png|jpg|jpeg|gif|ico|svg)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }

    # 防止 .env / source 文件被访问(安全加固)
    location ~ /. {
        deny all;
    }
}

启用站点

# 创建软链接启用
sudo ln -sf /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/

# 测试配置语法
sudo nginx -t

# 重载 Nginx
sudo systemctl reload nginx

🔍 验证:浏览器访问 http://<ECS公网IP>,应正常显示你的前端页面!


✅ 三、【强烈推荐】配置 HTTPS(SSL 证书)

使用免费 Let’s Encrypt(Certbot):

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com  # ✅ 替换为你的已备案域名!
  • ✅ 域名需在阿里云 完成 ICP 备案(国内必需!)
  • ✅ DNS 解析 A 记录指向 ECS 公网 IP
  • Certbot 会自动修改 Nginx 配置,启用 HTTPS 并强制跳转

✅ 四、进阶优化(生产必备)

优化项 操作
✅ 自动化部署(Git Hook) 见下方扩展方案
✅ PM2 托管(仅需 SSR?) 若你用 Nuxt/Next.js SSR,才需 Node.js + PM2;纯静态无需!
✅ CDN 提速 阿里云 CDN + OSS:将 /var/www/myapp 同步到 OSS,CDN 回源 OSS,提速全球访问
✅ 日志与监控 sudo tail -f /var/log/nginx/access.log;配合阿里云 ARMS 或 Prometheus

⚠️ 常见问题排查

现象 原因 解决
白屏 / 路由 404 publicPath 错误 或 Nginx 未配置 try_files 检查 vue.config.jspublicPath: '/';确认 Nginx 配置含 try_files $uri $uri/ /index.html;
静态资源 404 资源路径错误(如 main.js 404) 查看浏览器 Network 标签,确认请求 URL;检查 publicPath 和构建输出路径
无法访问(超时) 安全组未开放 80/443 端口 阿里云控制台 → ECS 实例 → 安全组 → 添加入方向规则(端口 80,443)
权限拒绝(403) Nginx 用户无权读取 /var/www/myapp sudo chown -R www-data:www-data /var/www/myapp & sudo chmod -R 755 /var/www/myapp

🌟 扩展方案:Git 自动化部署(推荐)

# 在服务器创建裸仓库
mkdir /home/ubuntu/myapp.git && cd /home/ubuntu/myapp.git
git init --bare

# 编写 post-receive hook(自动部署)
nano hooks/post-receive
#!/bin/bash
GIT_REPO=/home/ubuntu/myapp.git
PUBLIC_WWW=/var/www/myapp

git --work-tree=$PUBLIC_WWW --git-dir=$GIT_REPO checkout -f

# 可选:安装依赖 & 构建(若需在服务器构建)
# cd $PUBLIC_WWW && npm ci && npm run build
chmod +x hooks/post-receive

本地推送即自动部署:

git remote add prod ubuntu@<ECS_IP>:/home/ubuntu/myapp.git
git push prod main

✅ 总结:核心步骤清单

  1. ✅ 本地 npm run build 生成静态文件
  2. ✅ 上传 dist/ 到 ECS /var/www/myapp/
  3. ✅ 配置 Nginx(try_files 支持 history 路由)
  4. ✅ 开放安全组端口(80/443)
  5. ✅ 配置 HTTPS(Let’s Encrypt + 域名备案)
  6. ✅ (可选)接入 CDN / Git 自动化 / 监控

💡 重要提醒

  • Vue/React 是纯前端框架,部署只需 Nginx,无需安装 Node.js 或运行 npm start(除非你做 SSR)。
  • 国内服务器必须完成 ICP 备案 才能绑定域名启用 HTTPS(阿里云备案系统直达)。
  • 不要将 .env、源码、node_modules 上传到服务器!

如需我为你生成:

  • 完整的 nginx.conf 示例
  • Vue/React 的 vue.config.js / craco.config.js 配置模板
  • 自动化部署脚本(Shell/Ansible)
  • Docker 部署方案(Nginx 容器化)
    欢迎随时告诉我 👍

祝你部署顺利!🚀

未经允许不得转载:云知识CLOUD » 如何在阿里云服务器上部署Vue或React前端项目?