LAOP-web/Dockerfile
2026-09-18 16:50:27 +08:00

61 lines
2.5 KiB
Docker
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# =====================================================================
# 翼云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