# Build context: server/
# Example:
#   docker build -f Dockerfile -t iotlcm-app-server:latest .

FROM crpi-svwhn8x8nvask31h.cn-beijing.personal.cr.aliyuncs.com/xjzlpublic/golangalpine:1.25.7-alpine3.23 AS builder

ENV GIT_TERMINAL_PROMPT=0
ENV GOPRIVATE=git.xiujie.cn
ENV GOPROXY=https://goproxy.cn,direct
ENV TZ=Asia/Shanghai

WORKDIR /src/server

COPY go.mod go.sum ./
RUN go mod download

COPY . ./

ARG BuildVersion=0.0.0
ARG BuildTime=
ARG CommitID=

RUN go build -v -o /out/iotlcm-app-server \
    -ldflags "-X main.BuildVersion=${BuildVersion} -X main.CommitID=${CommitID} -X main.BuildTime=${BuildTime}" \
    .

FROM crpi-svwhn8x8nvask31h.cn-beijing.personal.cr.aliyuncs.com/xjzlpublic/alpine AS runtime

ENV TZ=Asia/Shanghai
ENV APP_UPLOAD_DIR=/data/app/iotlcmadmin-web-svc/upload

WORKDIR /app

COPY --from=builder /usr/share/zoneinfo/Asia/Shanghai /usr/share/zoneinfo/Asia/Shanghai
COPY --from=builder /out/iotlcm-app-server /app/iotlcm-app-server
COPY resource/public /app/resource/public

# The environment-specific config is mounted read-only by Docker Compose at runtime.
RUN mkdir -p "${APP_UPLOAD_DIR}" /app/config /app/resource/log/server /app/resource/log/server/sql /app/resource/cache /app/resource/certs

EXPOSE 8010
VOLUME ["/data/app/iotlcmadmin-web-svc/upload", "/app/resource/certs"]

CMD ["./iotlcm-app-server"]
