Files
par/Dockerfile

70 lines
2.8 KiB
Docker
Raw Permalink 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.

# syntax=docker/dockerfile:1
# PAR Server - CI 专用精简镜像
# 参考 mediabot 的优化思路:Drone 流水线已完成编译,此处仅打包产物
# 相比 mediabot 的三阶段构建(web-builder → server-builder → runtime),
# 我们将编译前置到 drone host 缓存中,Docker 构建从 15-25min 降至秒级。
# 完整多阶段构建版本见 par-api/Dockerfile(适用于本地独立构建)
FROM 192.168.31.253/library/eclipse-temurin:21-jre-alpine
ARG VERSION=unknown
ARG BUILD_TIME=unknown
ARG BUILDKIT_INLINE_CACHE=1
# OCI 标准镜像标签(参考 mediabot)
LABEL org.opencontainers.image.source="https://github.com/yescent/par"
LABEL org.opencontainers.image.title="PAR Server"
LABEL org.opencontainers.image.description="PT Adapter Registry Server - 适配器配置注册中心"
LABEL org.opencontainers.image.version="${VERSION}"
LABEL org.opencontainers.image.created="${BUILD_TIME}"
# 运行时环境变量(参考 mediabot:注入版本信息方便运行时查看)
ENV TZ="Asia/Shanghai" \
APP_VERSION="${VERSION}" \
APP_BUILD_TIME="${BUILD_TIME}"
# 创建非 root 用户
RUN addgroup -S par && adduser -S par -G par
WORKDIR /app
# 创建运行时目录
RUN mkdir -p /app/data /app/logs /app/static/configs && \
chown -R par:par /app
# 直接复制 drone 已构建好的 jar(无需在 Docker 内重新编译)
COPY par-api/target/*.jar app.jar
USER par
# 暴露端口
EXPOSE 8080
# 健康检查
HEALTHCHECK --interval=30s --timeout=5s --start-period=60s --retries=3 \
CMD wget -qO- http://localhost:8080/health || exit 1
# 启动入口(兼容 DB_* 和 MYSQL_* 两种变量命名风格)
# Spring Boot 会优先读取 SPRING_DATASOURCE_* 环境变量,覆盖 application.yml 配置
ENTRYPOINT ["sh", "-c", "\
# 如果未设置完整的 SPRING_DATASOURCE_URL,则从环境变量构造\n\
if [ -z \"$SPRING_DATASOURCE_URL\" ]; then \n\
HOST=\"${MYSQL_HOST:-${DB_HOST:-localhost}}\"; \n\
PORT=\"${MYSQL_PORT:-${DB_PORT:-3306}}\"; \n\
DB=\"${MYSQL_DB:-${DB_NAME:-par_registry}}\"; \n\
export SPRING_DATASOURCE_URL=\"jdbc:mysql://${HOST}:${PORT}/${DB}?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8\"; \n\
fi; \n\
# 用户名密码:MYSQL_* 优先,DB_* 作为备选\n\
if [ -z \"$SPRING_DATASOURCE_USERNAME\" ]; then \n\
export SPRING_DATASOURCE_USERNAME=\"${MYSQL_USER:-${DB_USERNAME:-root}}\"; \n\
fi; \n\
if [ -z \"$SPRING_DATASOURCE_PASSWORD\" ]; then \n\
export SPRING_DATASOURCE_PASSWORD=\"${MYSQL_PASSWORD:-${DB_PASSWORD:-}}\"; \n\
fi; \n\
# 兼容 JWT_SECRET 和 HMAC_SECRET 两种命名\n\
if [ -z \"$HMAC_SECRET\" ] && [ -n \"$JWT_SECRET\" ]; then \n\
export HMAC_SECRET=\"$JWT_SECRET\"; \n\
fi; \n\
java $JAVA_OPTS -jar app.jar \n\
"]