# ---- 构建阶段 ----
FROM golang:1.26-alpine AS builder

WORKDIR /app

# 使用国内 Go 代理
ENV GOPROXY=https://goproxy.cn,https://goproxy.io,direct

# 先复制依赖清单，利用 Docker 缓存层
COPY go.mod go.sum ./

# --mount=type=cache 复用 Go module 缓存，依赖不变时跳过下载
RUN --mount=type=cache,target=/go/pkg/mod \
    go mod download

# 复制源码并构建
COPY . .

# 复用 module 缓存 + 编译缓存；-ldflags="-s -w" 裁剪符号表减小 ~30% 体积
RUN --mount=type=cache,target=/go/pkg/mod \
    --mount=type=cache,target=/root/.cache/go-build \
    CGO_ENABLED=0 GOOS=linux \
    go build -ldflags="-s -w" -o /camtalk ./cmd/server

# ---- 运行阶段 ----
FROM alpine:3.20

RUN apk add --no-cache ca-certificates tzdata

WORKDIR /app

# 复制二进制和配置文件（敏感配置通过 docker-compose env_file 注入覆盖）
COPY --from=builder /camtalk .
COPY config/ ./config/

EXPOSE 8080

ENTRYPOINT ["./camtalk"]
