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