加油
努力

使用Alibaba Cloud Linux 3.2104 LTS部署前端Vue项目有哪些步骤?

在 Alibaba Cloud Linux 3.2104 LTS(基于 RHEL/CentOS 8 兼容内核,使用 dnf 包管理器)上部署 Vue 前端项目,通常采用 静态文件 + Nginx 服务 的标准生产方案(不推荐直接用 vue-cli-service serve)。以下是完整、安全、可维护的部署步骤:


✅ 前提条件

  • 已登录 Alibaba Cloud Linux 3.2104 LTS 实例(ECS)
  • 已配置好安全组(开放 80/443 端口)
  • 拥有 sudo 权限
  • 项目已本地构建完成(或可在服务器构建)

📌 部署步骤详解

1️⃣ 安装必要工具(Nginx + 构建依赖可选)

# 更新系统
sudo dnf update -y

# 安装 Nginx(官方仓库默认可用)
sudo dnf install -y nginx

# 【可选】如需在服务器构建 Vue 项目(不推荐生产环境构建,建议本地构建后上传)
# 安装 Node.js 18.x(LTS,兼容 Vue 3)——推荐使用 NodeSource 源
curl -fsSL https://rpm.nodesource.com/setup_lts.x | sudo bash -
sudo dnf install -y nodejs

# 验证
node -v  # v18.x.x
npm -v   # ≥ 9.x
nginx -v # ≥ 1.14(Alibaba Cloud Linux 3 默认提供 1.20+)

💡 最佳实践建议
本地构建 + 上传 dist(更安全、可控、节省服务器资源)
❌ 避免在生产服务器运行 npm install && npm run build(存在权限、缓存、依赖风险)


2️⃣ 准备 Vue 项目静态文件

方式 A(推荐):本地构建后上传

# 本地(开发机)执行:
cd your-vue-project
npm install
npm run build  # 生成 dist/ 目录

→ 将 dist/ 文件夹整体上传至服务器(如使用 scp 或 SFTP):

# 示例:上传到 /opt/my-vue-app/
scp -r ./dist/ user@your-server-ip:/opt/my-vue-app/

方式 B(备用):服务器构建(仅调试/小项目)

sudo mkdir -p /opt/my-vue-app
sudo chown $USER:$USER /opt/my-vue-app
cd /opt/my-vue-app
# 上传源码(如 git clone 或 tar.gz),然后:
npm install --production=false  # 注意:--production=false 才会安装 devDependencies(如 vue-cli-service)
npm run build
# 构建后确保输出在 dist/ 下

✅ 最终目录结构应为:

/opt/my-vue-app/dist/
├── index.html
├── assets/
├── favicon.ico
└── ...

3️⃣ 配置 Nginx 服务

创建站点配置文件

sudo vim /etc/nginx/conf.d/my-vue-app.conf

粘贴以下配置(支持 SPA 路由、gzip、缓存、HTTPS 重定向):

server {
    listen       80;
    server_name  your-domain.com;  # 替换为你的域名(或注释掉,用 IP 访问)
    root         /opt/my-vue-app/dist;
    index        index.html;

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

    # 禁止访问敏感文件
    location ~ /. {
        deny all;
    }
}

启动并启用 Nginx

# 测试配置语法
sudo nginx -t

# 若提示失败,请检查路径权限或语法错误(常见:root 路径不存在/权限不足)

# 设置目录权限(确保 nginx 可读取)
sudo chown -R root:root /opt/my-vue-app/dist
sudo chmod -R 755 /opt/my-vue-app/dist

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

# 查看状态
sudo systemctl status nginx

✅ 此时可通过 http://<ECS公网IP>http://your-domain.com 访问应用。


4️⃣ 【进阶】配置 HTTPS(强烈推荐)

使用 Alibaba Cloud SSL 证书 + Nginx(免费证书可从 阿里云SSL证书服务 申请):

# 上传证书到服务器(例如):
# /etc/nginx/ssl/my-domain.pem(证书)
# /etc/nginx/ssl/my-domain.key(私钥)

# 修改 /etc/nginx/conf.d/my-vue-app.conf,添加 443 server 块:
server {
    listen 443 ssl http2;
    server_name your-domain.com;

    ssl_certificate     /etc/nginx/ssl/my-domain.pem;
    ssl_certificate_key /etc/nginx/ssl/my-domain.key;

    # 推荐 SSL 配置(可复用阿里云推荐配置)
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:...;
    ssl_prefer_server_ciphers off;

    root   /opt/my-vue-app/dist;
    index  index.html;

    location / {
        try_files $uri $uri/ /index.html;
    }
}

# 同时重定向 HTTP → HTTPS
server {
    listen 80;
    server_name your-domain.com;
    return 301 https://$server_name$request_uri;
}

→ 再次 sudo nginx -t && sudo systemctl reload nginx


5️⃣ 【可选】配置反向X_X(如需对接后端 API)

若前端需跨域调用同服务器的后端(如 /api/xxx),在 Nginx 中X_X避免 CORS:

location /api/ {
    proxy_pass http://127.0.0.1:3000/;  # 后端服务地址
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

⚠️ Vue 项目中 API 请求应使用相对路径(如 axios.get('/api/users')),构建时无需修改 baseURL


✅ 验证与排错清单

问题 检查点
❌ 白屏 / 404 ls -l /opt/my-vue-app/dist/index.html 是否存在?Nginx root 路径是否正确?try_files 是否生效?
❌ 路由刷新 404(SPA) 确认 location / { try_files $uri $uri/ /index.html; } 已配置且无拼写错误
❌ 无法加载 JS/CSS 检查浏览器控制台 Network 标签页,确认请求 URL 是否带多余 base path(如 /myapp/)→ 则需在 vue.config.js 中设置 publicPath: '/myapp/' 并重新构建
❌ 权限拒绝 sudo ls -ld /opt/my-vue-app/dist → 应为 drwxr-xr-x,属主 rootsudo nginx -tpermission denied 多因 SELinux 或路径权限
🔒 SELinux 干扰(Alibaba Cloud Linux 默认 enforcing) 临时测试:sudo setenforce 0;永久关闭(不推荐)或配置策略:sudo setsebool -P httpd_read_user_content 1

💡 提示:Alibaba Cloud Linux 3 默认启用 SELinux。若遇权限问题,推荐方案:

sudo semanage fcontext -a -t httpd_sys_content_t "/opt/my-vue-app/dist(/.*)?"
sudo restorecon -Rv /opt/my-vue-app/dist

🧩 补充:自动化部署建议(生产环境)

  • 使用 GitHub Actions / GitLab CI 本地构建 → 自动上传 dist 到 ECS(SFTP/SCP)
  • 结合阿里云 OSS + CDN:将 dist/ 上传至 OSS,通过 CDN 提速,Nginx 仅作回源或跳转
  • 使用 PM2 管理(仅限 SSR 项目,如 Nuxt);纯静态 Vue 不需要 Node 进程

总结流程图
本地 npm run build
scp dist/ to /opt/my-vue-app/
配置 /etc/nginx/conf.d/my-vue-app.conf
sudo nginx -t && sudo systemctl reload nginx
访问 http(s)://your-domain

如需我为你生成:

  • 完整的 vue.config.js(适配子路径/CDN)
  • 自动化部署脚本(Bash/Ansible)
  • Docker 部署方案(Nginx-alpine 多阶段)
  • 阿里云 OSS+CDN+DNS 一体化配置指南
    欢迎随时提出 👍

是否需要我为你定制一份 nginx.conf 模板或部署检查脚本?

云服务器