Dockerfile 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. # ============================================
  2. # 多阶段构建:构建阶段
  3. # ============================================
  4. FROM golang:1.24-alpine AS builder
  5. WORKDIR /app
  6. # 安装必要的构建工具
  7. RUN apk add --no-cache git ca-certificates tzdata curl
  8. # 复制 go mod 文件
  9. COPY go.mod go.sum ./
  10. # 下载依赖
  11. RUN go mod download
  12. # 复制源代码
  13. COPY . .
  14. # 离线 IP 库(访客地理位置,见 backend/data/README.md)
  15. RUN mkdir -p data && curl -fsSL -o data/ip2region_v4.xdb \
  16. https://github.com/lionsoul2014/ip2region/raw/master/data/ip2region_v4.xdb
  17. # 构建应用
  18. # CGO_ENABLED=0: 禁用 CGO,生成纯 Go 二进制文件
  19. # GOOS=linux: 目标操作系统
  20. # GOARCH=amd64: 目标架构
  21. RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -installsuffix cgo -ldflags '-extldflags "-static"' -o backend main.go
  22. # ============================================
  23. # 运行阶段
  24. # ============================================
  25. FROM alpine:latest
  26. WORKDIR /app
  27. # 安装必要的运行时依赖
  28. RUN apk --no-cache add ca-certificates tzdata
  29. # 从构建阶段复制二进制文件
  30. COPY --from=builder /app/backend .
  31. # ip2region 数据文件
  32. COPY --from=builder /app/data/ip2region_v4.xdb /app/data/ip2region_v4.xdb
  33. # 从构建阶段复制时区数据(可选)
  34. COPY --from=builder /usr/share/zoneinfo /usr/share/zoneinfo
  35. # 设置时区(可选,默认 UTC)
  36. ENV TZ=Asia/Shanghai
  37. # 创建必要的目录
  38. RUN mkdir -p uploads/avatars uploads/messages
  39. # 暴露端口
  40. EXPOSE 8080
  41. # 启动应用
  42. CMD ["./backend"]