将打包后的 Vue 项目(即静态文件)部署到 Alibaba Cloud 的 Alibaba Cloud Linux 3.2104 LTS(基于 RHEL/CentOS 8 兼容内核,使用 dnf 和 systemd)的 Web 服务器,推荐使用 Nginx(轻量、高性能、适合静态资源)。以下是完整、安全、生产就绪的部署流程:
✅ 前提条件
- 已在阿里云 ECS 实例上安装并运行 Alibaba Cloud Linux 3.2104 LTS(已确认
uname -r或cat /etc/os-release) - 已配置好安全组(开放端口:
80HTTP,可选443HTTPS) - 已通过 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-router 的 history 模式(即 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 吗? 😊
云小栈