61 lines
2.5 KiB
Docker
61 lines
2.5 KiB
Docker
# =====================================================================
|
||
# 翼云Hub · LAOP-web 前端镜像 Dockerfile
|
||
# 多阶段构建:阶段1 用 Node 构建 Vite 产物;阶段2 用 nginx 提供静态服务
|
||
# --------------------------------------------------------------------
|
||
# 说明:
|
||
# - 前端是 Vue3 + Vite SPA,构建产物为 dist/ 静态文件
|
||
# - 运行时只需 nginx 提供静态服务 + 反向代理后端 API
|
||
# - 与后端 laop-admin 容器通过 docker 网络互通,nginx 用 service name 解析
|
||
# - 挂载宿主机 /home/laop/web 时,首次启动会自动从镜像内置备份初始化
|
||
# 静态目录,避免空挂载导致 nginx 403
|
||
# =====================================================================
|
||
|
||
# -------------------------------------------------------------------
|
||
# 阶段1:构建期(Node + Vite)
|
||
# -------------------------------------------------------------------
|
||
FROM node:20-alpine AS builder
|
||
|
||
WORKDIR /app
|
||
|
||
# 先 COPY 依赖描述文件,利用 Docker 缓存层加速安装
|
||
COPY package.json package-lock.json ./
|
||
|
||
# 安装依赖(使用 npm ci 保证可重复构建)
|
||
RUN npm ci
|
||
|
||
# 复制源码
|
||
COPY . .
|
||
|
||
# 构建生产环境产物(Vite 会自动读取 .env.production)
|
||
RUN npm run build
|
||
|
||
|
||
# -------------------------------------------------------------------
|
||
# 阶段2:运行期(nginx 静态服务)
|
||
# -------------------------------------------------------------------
|
||
FROM nginx:stable-alpine
|
||
|
||
LABEL maintainer="laop-web"
|
||
LABEL description="翼云Hub · 无人机信息开放平台 前端 Web 服务"
|
||
|
||
# 时区设置
|
||
ENV TZ=Asia/Shanghai
|
||
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
|
||
|
||
# 清空 nginx 默认配置,使用自定义配置(包含 SPA 路由 + API 反向代理)
|
||
RUN rm /etc/nginx/conf.d/default.conf
|
||
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
||
|
||
# 拷贝构建产物到备份目录(运行时由 entrypoint 脚本复制到 nginx 静态目录)
|
||
# 不直接放到 /usr/share/nginx/html 是为了支持宿主机目录挂载:
|
||
# 挂载点会覆盖 /usr/share/nginx/html,但 /app/dist-backup 不受影响
|
||
COPY --from=builder /app/dist /app/dist-backup
|
||
|
||
# 注册初始化脚本到 nginx entrypoint 自动执行目录(/docker-entrypoint.d/*.sh)
|
||
# nginx 官方镜像 entrypoint 会按文件名顺序执行该目录下所有 .sh 脚本
|
||
COPY docker-entrypoint.d/30-init-static.sh /docker-entrypoint.d/30-init-static.sh
|
||
RUN chmod +x /docker-entrypoint.d/30-init-static.sh
|
||
|
||
# 容器内暴露 80 端口(由 docker-compose 映射到宿主机 18080)
|
||
EXPOSE 80
|