Vue 项目 Docker 多阶段构建部署指南(阿里云)

Vue 项目 Docker 多阶段构建部署指南(阿里云)

1. 核心配置文件

为了实现高效、小体积的部署,我们采用了 Docker 的**多阶段构建(Multi-stage Build)**方案。

1.1 nginx.conf (Nginx 配置)

解决 Vue 单页应用(SPA)刷新页面 404 的问题。

nginx 复制代码
server {
    listen       80;
    server_name  localhost;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        try_files $uri $uri/ /index.html; # 核心配置:支持 Vue Router History 模式
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

1.2 Dockerfile (多阶段构建)

dockerfile 复制代码
# --- 阶段一:构建阶段 ---
FROM node:20-alpine AS build-stage
WORKDIR /app
COPY package*.json ./
# 使用国内镜像源加速
RUN npm config set registry https://registry.npmmirror.com && npm install
COPY . .
RUN npm run build

# --- 阶段二:运行阶段 ---
FROM nginx:stable-alpine AS production-stage
# 从构建阶段拷贝打包后的静态文件
COPY --from=build-stage /app/dist /usr/share/nginx/html
# 拷贝自定义 Nginx 配置
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

1.3 .dockerignore (忽略文件)

注意: 务必确保不要在 .dockerignore 中忽略 nginx.conf

text 复制代码
node_modules
dist
.git
# nginx.conf <-- 绝对不能写这一行,否则构建会报错找不到文件

2. 部署流程

2.1 构建镜像

在项目根目录下执行:

bash 复制代码
docker build -t ai-web .

2.2 运行容器

bash 复制代码
# 停止并删除旧容器(如果有)
docker stop ai-web-container || true && docker rm ai-web-container || true

# 启动新容器,建议先尝试非 80 端口(如 8080)以排除备案干扰
docker run -d -p 8080:80 --name ai-web-container ai-web

3. 故障排查手册(重点)

在部署过程中,我们遇到了从"文件缺失"到"网络 502"的典型问题,以下是解决方案:

问题 A:构建报错 nginx.conf: not found

  • 原因.dockerignore 文件中错误地过滤了配置文件。
  • 解决 :检查并删除 .dockerignore 中关于 *.confnginx.conf 的过滤规则。

问题 B:浏览器访问报错 502 Bad Gateway

  • 关键发现 :通过浏览器 F12 查看 Remote Address127.0.0.1:17890
  • 原因本地代理软件(如 Clash/VPN) 拦截了对服务器 IP 的请求。
  • 解决:关闭本地代理软件,或将服务器 IP 加入代理白名单。

问题 C:服务器内部 curl 成功,外部访问超时

  • 原因 1:阿里云安全组未开放
    • 解决:在阿里云 ECS 控制台 -> 安全组规则 -> 入方向,添加 TCP 80 或 8080 端口的允许规则(0.0.0.0/0)。
  • 原因 2:80 端口被备案系统拦截
    • 解决 :阿里云中国内地地域对 80 端口监管严格。若未备案,建议更换为 8080 等非标准端口。

4. 验证部署是否成功的标准步骤

  1. 内部验证 :在服务器执行 curl -I http://127.0.0.1:80。返回 200 OK 说明容器正常。
  2. 公网验证
    • 关闭本地 VPN/代理。
    • 使用手机 5G 网络(非 WiFi)访问 http://服务器IP:端口
  3. 日志检查 :若有问题,执行 docker logs ai-web-container 查看 Nginx 实时错误。

5. 后续建议

  • 域名与备案:若想使用 80 端口并绑定域名,需尽快完成阿里云 ICP 备案。
  • HTTPS:生产环境建议配合阿里云 SSL 证书,将 Nginx 端口改为 443。
  • 自动化:可以考虑使用阿里云"云效"或 GitHub Actions 实现代码提交即自动构建镜像并部署。
相关推荐
终端行者8 分钟前
Jenkins Pipeline 企业级用法 参数化构建+Ansible发布---上
docker·ansible·jenkins·cicd
北风toto1 小时前
为什么 IntelliJ IDEA Community 无法开发 Vue?——附解决方案
java·vue.js·intellij-idea
跟着珅聪学java1 小时前
Element UI 的 Tabs 标签页开发教程
javascript·vue.js·elementui
亚空间仓鼠1 小时前
Docker容器化高可用架构部署方案(十三)
docker·容器·架构
米高梅狮子2 小时前
01.mysql的备份与恢复
运维·数据库·mysql·docker·容器·kubernetes·github
console.log('npc')2 小时前
Windows 11 → WSL2 → Ubuntu → Docker → Codex → Sub2API
windows·ubuntu·docker
jiayong232 小时前
前端面试题库 - Vue框架篇
前端·vue.js·面试
三*一3 小时前
Mapbox GL JS 前端多边形分割实战:从踩坑到优雅实现
开发语言·前端·javascript·vue.js
xChive3 小时前
前端请求取消:用 AbortController 从 fetch 到 axios
前端·vue.js·axios·fetch·abortcontroller
踩着两条虫3 小时前
AI 低代码引擎可视化设计器交互机制实战
前端·vue.js·人工智能·低代码·架构