# ============================================
# 多阶段构建：构建阶段
# ============================================
FROM golang:1.24-alpine AS builder

WORKDIR /app

# 安装必要的构建工具
RUN apk add --no-cache git ca-certificates tzdata curl

# 复制 go mod 文件
COPY go.mod go.sum ./

# 下载依赖
RUN go mod download

# 复制源代码
COPY . .

# 离线 IP 库（访客地理位置，见 backend/data/README.md）
RUN mkdir -p data && \
    curl -fsSL -o data/ip2region_v4.xdb \
      https://github.com/lionsoul2014/ip2region/raw/master/data/ip2region_v4.xdb && \
    curl -fsSL -o data/ip2region_v6.xdb \
      https://github.com/lionsoul2014/ip2region/raw/master/data/ip2region_v6.xdb

# 构建应用
# CGO_ENABLED=0: 禁用 CGO，生成纯 Go 二进制文件
# GOOS=linux: 目标操作系统
# GOARCH=amd64: 目标架构
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -installsuffix cgo -ldflags '-extldflags "-static"' -o backend main.go

# ============================================
# 运行阶段
# ============================================
FROM alpine:latest

WORKDIR /app

# 安装必要的运行时依赖
RUN apk --no-cache add ca-certificates tzdata

# 从构建阶段复制二进制文件
COPY --from=builder /app/backend .

# ip2region 数据文件
COPY --from=builder /app/data/ip2region_v4.xdb /app/data/ip2region_v4.xdb
COPY --from=builder /app/data/ip2region_v6.xdb /app/data/ip2region_v6.xdb

# 从构建阶段复制时区数据（可选）
COPY --from=builder /usr/share/zoneinfo /usr/share/zoneinfo

# 设置时区（可选，默认 UTC）
ENV TZ=Asia/Shanghai

# 创建必要的目录
RUN mkdir -p uploads/avatars uploads/messages

# 暴露端口
EXPOSE 8080

# 启动应用
CMD ["./backend"]