# 视野后端构建：多阶段编译 → 精简运行镜像（纯 Go + SQLite，无 CGO 依赖）
# 基础镜像仓库：国内直连 docker.io 不通，默认走 DaoCloud 镜像站；构建时可用 --build-arg REGISTRY=docker.io/library 覆盖
ARG REGISTRY=docker.m.daocloud.io/library
FROM ${REGISTRY}/golang:1.26 AS builder

# 国内网络 proxy.golang.org 不通，默认走 goproxy.cn；构建时可用 --build-arg 覆盖
ARG GOPROXY=https://goproxy.cn,direct
ENV GOPROXY=${GOPROXY}

WORKDIR /build
# 依赖层缓存：go.mod/go.sum 变更才重拉依赖
COPY go.mod go.sum ./
# 清空 buildkit 注入的宿主代理（Docker Desktop 全局代理 127.0.0.1:7892 在容器内不通，
# proxyconnect connection refused）；依赖直连 goproxy.cn 拉取，后续 go build 离线无需网络
RUN http_proxy= https_proxy= HTTP_PROXY= HTTPS_PROXY= go mod download

COPY . .
RUN CGO_ENABLED=0 go build -o /out/observer-server .

ARG REGISTRY=docker.m.daocloud.io/library
FROM ${REGISTRY}/alpine:3.20
# 国内网络 dl-cdn.alpinelinux.org 不通，默认走阿里云镜像；构建时可用 --build-arg 覆盖
ARG APK_MIRROR=https://mirrors.aliyun.com
# 时区对齐宿主（自然日授权语义依赖本地时区）
# apk 走 http_proxy 环境变量：清空 buildkit 注入的宿主代理（同上方 go mod download，容器内代理不通）
RUN sed -i "s#https://dl-cdn.alpinelinux.org#${APK_MIRROR}#g" /etc/apk/repositories && \
    http_proxy= https_proxy= HTTP_PROXY= HTTPS_PROXY= apk add --no-cache tzdata && \
    cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    echo "Asia/Shanghai" > /etc/timezone
WORKDIR /app
COPY --from=builder /out/observer-server /app/observer-server
COPY config.yml /app/config.yml
# 管理端静态产物（server_admin 构建输出），由 /admin 路径托管
COPY --from=builder /build/admin_dist /app/admin_dist
# APK 下载引导页（源码目录 h5/），由 /download-page 路径托管
COPY --from=builder /build/h5 /app/h5
# 运行时数据目录（SQLite 库），由 docker-compose 挂载持久化
RUN mkdir -p /app/data
EXPOSE 8080
ENTRYPOINT ["/app/observer-server"]
