# =====================================================================
# 翼云Hub · LAOP-admin 后端镜像 Dockerfile
# --------------------------------------------------------------------
# 设计：本地 mvn package 预先生成 jar，Dockerfile 只 COPY jar 进 JRE 镜像
# --------------------------------------------------------------------
# 为什么不用多阶段构建（FROM maven → mvn package → FROM jre）？
#   - 多阶段构建在镜像内执行 mvn package，每次都要下载依赖，慢
#   - 跨架构构建（Mac arm64 → 服务器 x86_64）需 QEMU 模拟，慢上加慢
#   - Java 字节码与 CPU 架构无关，本地 Mac 编译的 jar 可直接跑在 x86_64 JRE 上
# 改进后：
#   - 本地 mvn package 秒级完成（原生速度，无跨架构）
#   - Dockerfile 只 COPY jar，构建瞬间完成
#   - 不需要 QEMU，不需要基础镜像固化依赖
# --------------------------------------------------------------------
# 前置：本地执行过 mvn clean package -DskipTests -Pprod
#       生成 target/laop-admin.jar
# 脚本 build-and-push.sh 会自动完成这步并复制到 build context
# =====================================================================

FROM eclipse-temurin:17-jre-jammy

LABEL maintainer="laop-admin"
LABEL description="无人机信息开放平台 后端服务"

WORKDIR /app

# 时区设置为中国时区（与 application.yml 中 jackson.time-zone 一致）
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# 预创建静态文件挂载目录 /data/static
# - compose 通过 volumes 挂载宿主机 /home/laop/admin 到此处，持久化上传文件
# - 这里显式创建是为了：即使未挂载（如直接 docker run 调试），代码写文件也不会因目录缺失失败
# - 同时通过 ENV LAOP_STATIC_DIR=/data/static 给镜像内置默认值，与 compose 挂载点对齐
RUN mkdir -p /data/static
ENV LAOP_STATIC_DIR=/data/static

# 拷贝本地预编译好的 jar 包
# 脚本 build-and-push.sh 在构建前会执行：
#   cp target/laop-admin.jar ./laop-admin.jar
# 把 jar 复制到 build context 根目录（避免把整个 target/ 进入上下文）
COPY laop-admin.jar app.jar

# 容器内暴露端口（与 application.yml server.port=8081 一致）
EXPOSE 8081

# JVM 参数：容器内内存限制感知 + GC 优化（2核8G 服务器）
ENV JAVA_OPTS="-XX:+UseContainerSupport -XX:MaxRAMPercentage=75.0 -Djava.security.egd=file:/dev/./urandom"

# 运行：显式指定 prod profile，覆盖任何默认配置
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar --spring.profiles.active=prod"]
