# ============================================================ # 阶段1: 构建 # ============================================================ FROM golang:1.26-alpine AS builder # 设置工作目录 WORKDIR /app # 安装必要的构建工具 RUN apk add --no-cache git make # 复制 go.mod 和 go.sum 并下载依赖(利用 Docker 缓存) COPY go.mod go.sum ./ RUN go mod download && go mod verify # 复制源代码 COPY . . # 构建二进制文件 RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build \ -ldflags="-s -w" \ -o /app/sdk-generator \ ./cmd/server # ============================================================ # 阶段2: 运行 # ============================================================ FROM alpine:latest # 安装运行时依赖 RUN apk add --no-cache ca-certificates tzdata git # 设置时区 ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # 创建非 root 用户 RUN adduser -D -g '' appuser # 设置工作目录 WORKDIR /app # 从构建阶段复制二进制文件 COPY --from=builder /app/sdk-generator /app/sdk-generator # 复制 Web 静态文件和模板 COPY --chown=appuser:appuser ./web /app/web # 创建数据目录并设置权限 RUN mkdir -p /app/outputs /app/uploads && \ chown -R appuser:appuser /app # 切换到非 root 用户 USER appuser # 暴露端口 EXPOSE 5002 # 健康检查 HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD wget --no-verbose --tries=1 --spider http://localhost:8080/health || exit 1 # 启动 ENTRYPOINT ["/app/sdk-generator"] #docker run -d \ # -p 8080:8080 \ # -v /var/www/sdk-generator/outputs:/app/outputs \ # --name sdk-generator \ # sdk-generator