加油
努力

如何将打包后的Vue项目部署到Alibaba Cloud Linux 3.2104 LTS的Web服务器?

将打包后的 Vue 项目(即静态文件)部署到 Alibaba Cloud 的 Alibaba Cloud Linux 3.2104 LTS(基于 RHEL/CentOS 8 兼容内核,使用 dnfsystemd)的 Web 服务器,推荐使用 Nginx(轻量、高性能、适合静态资源)。以下是完整、安全、生产就绪的部署流程:


✅ 前提条件

  • 已在阿里云 ECS 实例上安装并运行 Alibaba Cloud Linux 3.2104 LTS(已确认 uname -rcat /etc/os-release
  • 已配置好安全组(开放端口:80 HTTP,可选 443 HTTPS)
  • 已通过 SSH 登录服务器(如 ssh root@your-server-ip
  • 本地 Vue 项目已完成构建:npm run build → 输出 dist/ 目录(含 index.html, assets/, js/, css/ 等)

🚀 部署步骤(Nginx 方式)

1️⃣ 安装 Nginx(使用官方仓库)

# 更新系统(可选但推荐)
sudo dnf update -y

# 安装 nginx(Alibaba Cloud Linux 3 默认源已包含)
sudo dnf install -y nginx

# 启用并启动 nginx
sudo systemctl enable nginx
sudo systemctl start nginx

# 检查状态
sudo systemctl status nginx  # 应显示 active (running)

✅ 验证:浏览器访问 http://<你的ECS公网IP>,应看到 Nginx 默认欢迎页。


2️⃣ 上传 Vue 打包文件(dist/

✅ 推荐方式:使用 scp(安全、简单)

# 在本地终端执行(替换为你的实际路径和 IP)
scp -r ./dist/* root@<your-ecs-ip>:/usr/share/nginx/html/

⚠️ 注意:

  • ./dist/* 表示复制内容(不包含 dist 文件夹本身);
  • 目标路径 /usr/share/nginx/html/ 是 Nginx 默认根目录;
  • 若需保留原有 index.html 备份,先重命名:sudo mv /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.bak

🔁 替代方式(如无 scp 权限):

  • 使用 SFTP 工具(FileZilla / WinSCP / VS Code Remote Explorer)连接后拖入;
  • 或在服务器上用 wget 下载压缩包再解压(适合 CI/CD 场景)。

3️⃣ 配置 Nginx 支持 Vue Router(History 模式 ⚠️ 关键!)

若你的 Vue 项目使用 vue-routerhistory 模式(即 URL 无 #),必须配置 Nginx 回退到 index.html,否则刷新页面会 404。

✅ 编辑默认站点配置:

sudo vim /etc/nginx/conf.d/default.conf

替换全部内容为以下(生产推荐配置):

server {
    listen       80;
    server_name  _;

    # 设置根目录(确保与你上传路径一致)
    root         /usr/share/nginx/html;
    index        index.html;

    # 关键:支持 Vue Router history 模式
    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;
    }
}

✅ 保存退出(:wq),然后测试配置并重载:

sudo nginx -t  # 检查语法是否正确(应输出: "syntax is ok")
sudo systemctl reload nginx  # 平滑重载配置

✅ 验证:访问 http://<your-ecs-ip> 及任意子路由(如 /about)均能正常加载,刷新不 404。


4️⃣ (可选)配置 HTTPS(使用免费 Let’s Encrypt)

✅ 强烈建议生产环境启用 HTTPS(提升 SEO、安全性、避免混合内容警告)

# 安装 certbot
sudo dnf install -y epel-release
sudo dnf install -y certbot python3-certbot-nginx

# 获取证书(需域名已解析到该服务器 IP)
sudo certbot --nginx -d your-domain.com -d www.your-domain.com

# 自动续期(certbot 已自动添加 systemd timer,无需额外操作)
sudo systemctl list-timers | grep certbot

💡 提示:若暂无域名,可先用 HTTP 测试;后续绑定域名 + HTTPS 即可。


5️⃣ (可选)设置反向X_X或子路径部署(进阶)

若需将 Vue 项目部署在子路径(如 https://example.com/myapp/):

  • 构建时设置 vue.config.js
    module.exports = {
    publicPath: '/myapp/', // 注意结尾斜杠
    outputDir: 'dist'
    }
  • Nginx 配置新增 location /myapp/
    location /myapp/ {
      alias /usr/share/nginx/html/myapp/;
      try_files $uri $uri/ /myapp/index.html;
    }

🧪 部署后验证清单

检查项 命令 / 方法
✅ Nginx 运行中 sudo systemctl status nginx
✅ 静态文件存在 ls -l /usr/share/nginx/html/(含 index.html, assets/
✅ 配置无语法错误 sudo nginx -t
✅ 端口监听正常 sudo ss -tuln | grep ':80'
✅ 浏览器访问首页 http://<ECS公网IP> → 显示 Vue 页面
✅ 刷新子路由不 404 http://.../user/123 → 正常加载(非 404)
✅ 控制台无 404 资源 F12 → Network 标签页检查 JS/CSS 加载

🛡️ 安全加固建议(生产环境)

  • 🔐 关闭 Nginx 版本号暴露(防信息泄露):
    # 在 /etc/nginx/nginx.conf 的 http {} 块中添加:
    server_tokens off;
  • 🔒 限制上传目录(若未来需用户上传,单独配置);
  • 🌐 配置防火墙(Alibaba Cloud Linux 3 默认用 firewalld):
    sudo firewall-cmd --permanent --add-service=http
    sudo firewall-cmd --permanent --add-service=https
    sudo firewall-cmd --reload
  • 📦 日志轮转:Nginx 默认已配置 /var/log/nginx/ + logrotate;可检查 cat /etc/logrotate.d/nginx

📦 附:自动化部署脚本(可选)

创建 /root/deploy-vue.sh

#!/bin/bash
# 一键部署 Vue dist 目录(请先上传 dist.tar.gz 到 /tmp)
cd /tmp
tar -xzf dist.tar.gz -C /usr/share/nginx/html --strip-components=1
sudo nginx -t && sudo systemctl reload nginx
echo "✅ Vue deployed successfully!"

赋予执行权限:chmod +x /root/deploy-vue.sh


完成! 你的 Vue 应用已稳定运行在 Alibaba Cloud Linux 3.2104 LTS 上。

如需进一步支持(如 Docker 部署、PM2(不推荐用于纯静态)、CI/CD 集成 GitLab/GitHub Actions),欢迎继续提问!

需要我帮你生成 nginx.conf 完整模板、vue.config.js 示例,或写一个 GitHub Actions 自动化部署 YAML 吗? 😊

云服务器