FROM rust:1-bookworm AS builder

WORKDIR /src

# 先拷贝 manifests,尽量利用 Docker layer cache
COPY Cargo.toml Cargo.lock ./
COPY crates ./crates

RUN cargo build --locked -p codexmanager-service --release

FROM debian:bookworm-slim

ARG APP_USER=codexmanager
ARG APP_UID=10001

ENV TZ=Asia/Shanghai

WORKDIR /app

RUN apt-get update \
    && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends ca-certificates wget tzdata \
    && rm -rf /var/lib/apt/lists/* \
    && groupadd --gid ${APP_UID} ${APP_USER} \
    && useradd --uid ${APP_UID} --gid ${APP_UID} --home-dir /app --no-create-home --shell /usr/sbin/nologin ${APP_USER} \
    && mkdir -p /data \
    && chown -R ${APP_UID}:${APP_UID} /app /data

COPY --from=builder /src/target/release/codexmanager-service /usr/local/bin/codexmanager-service

ENV CODEXMANAGER_SERVICE_ADDR=0.0.0.0:48760
ENV CODEXMANAGER_DB_PATH=/data/codexmanager.db
ENV CODEXMANAGER_RPC_TOKEN_FILE=/data/codexmanager.rpc-token
ENV CODEXMANAGER_GATEWAY_TRACE_STDOUT=1
ENV CODEXMANAGER_GATEWAY_ERROR_STDOUT=1

VOLUME ["/data"]
EXPOSE 48760

HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
  CMD wget --no-verbose --tries=1 --spider http://127.0.0.1:48760/health || exit 1

USER ${APP_USER}

CMD ["codexmanager-service"]