# 单容器镜像:一个 deno compile 出的 umt-server 二进制,同时承担 API(含 web 静态 SPA)与 worker。
# PostgreSQL 不在本镜像内,见 docker-compose.yml。
# 构建:docker build -t uhd-media-tool .    运行时版本锁定 Deno 2.9.7(ADR-004)

FROM denoland/deno:2.9.7 AS build
WORKDIR /src
COPY . .
RUN deno install --frozen
ARG APP_VERSION=""
ENV APP_VERSION=${APP_VERSION}
RUN deno task check:tokens && cd apps/web && deno task build
# --node-modules-dir=none + --exclude-unused-npm:只嵌入 server 依赖图可达的 npm 包(约 110 MB,而不是整个 node_modules)
# 权限在编译时固定:--allow-read 只放 /app;不给 --allow-run / --allow-write
RUN cd apps/server && deno task compile

FROM debian:trixie-slim
# 不装额外包:Deno 自带 Mozilla 根证书(外呼 HTTPS 不依赖 ca-certificates),健康探测用二进制自身的 fetch
RUN useradd --system --uid 10001 --home-dir /app --shell /usr/sbin/nologin umt
WORKDIR /app
COPY --from=build --chown=root:root /src/dist/umt-server /app/umt-server
COPY --from=build --chown=root:root /src/apps/web/build/client /app/public
COPY --chown=root:root --chmod=0755 docker/entrypoint.sh /app/entrypoint.sh
ENV NODE_ENV=production \
    HOST=0.0.0.0 \
    PORT=4380 \
    WEB_ROOT=/app/public
USER umt
EXPOSE 4380
# 用二进制自带的 fetch 打本机回环端口,不装 curl
HEALTHCHECK --interval=15s --timeout=5s --start-period=20s --retries=3 CMD ["/app/umt-server", "--role", "probe"]
ENTRYPOINT ["/app/entrypoint.sh"]
