diff --git a/.gitea/workflows/mysqldown.yaml b/.gitea/workflows/mysqldown.yaml index e77a296..cc445af 100644 --- a/.gitea/workflows/mysqldown.yaml +++ b/.gitea/workflows/mysqldown.yaml @@ -48,6 +48,7 @@ jobs: - name: 构建并推送迁移镜像 run: | docker build \ + --build-arg GOPROXY=https://goproxy.cn,direct \ -f scripts/dockerfile/Dockerfile.migrate \ -t "$IMAGE:$MIGRATE_TAG" \ . diff --git a/.gitea/workflows/mysqlup.yaml b/.gitea/workflows/mysqlup.yaml index a7c9f77..ea85460 100644 --- a/.gitea/workflows/mysqlup.yaml +++ b/.gitea/workflows/mysqlup.yaml @@ -52,6 +52,7 @@ jobs: - name: 构建并推送迁移镜像 run: | docker build \ + --build-arg GOPROXY=https://goproxy.cn,direct \ -f scripts/dockerfile/Dockerfile.migrate \ -t "$IMAGE:$MIGRATE_TAG" \ . diff --git a/scripts/dockerfile/Dockerfile.migrate b/scripts/dockerfile/Dockerfile.migrate new file mode 100644 index 0000000..32253df --- /dev/null +++ b/scripts/dockerfile/Dockerfile.migrate @@ -0,0 +1,43 @@ +# 迁移镜像:只携带 Go 工具链与源码,构建期不产出二进制。 +# 真正的编译发生在容器启动时(go run),因此镜像内保留完整源码与模块缓存。 +ARG GO_VERSION=1.27 + +FROM golang:${GO_VERSION}-alpine + +# Go 模块代理:默认官方代理;国内或受限网络可覆盖: +# --build-arg GOPROXY=https://goproxy.cn,direct +ARG GOPROXY=https://proxy.golang.org,direct +ENV GOPROXY=${GOPROXY} + +# alpine 为 musl libc,关闭 CGO 避免编译期依赖 gcc;二进制为纯静态。 +ENV CGO_ENABLED=0 +ENV TZ=Asia/Shanghai + +# ca-certificates:MySQL 启用 TLS 时需要根证书;tzdata:配合 TZ 输出本地时区日志。 +RUN apk add --no-cache ca-certificates tzdata + +# 工作目录必须是 /app:setting 通过 viper 的 AddConfigPath("configs/") 定位配置, +# 该路径相对工作目录解析,配置须挂载到 /app/configs/config.yaml。 +WORKDIR /app + +# 先只复制依赖清单,下载模块;源码未变动时复用这一层缓存。 +COPY go.mod go.sum ./ +RUN go mod download + +# 源码进入镜像。迁移脚本已由 pkg/migration 通过 go:embed 打包,无需单独 COPY sql 文件。 +COPY . . + +# configs/:配置挂载点(config.yaml 含密钥,由 .dockerignore 排除,不进镜像层)。 +RUN mkdir -p /app/configs + +# 预热 Go 构建缓存,缩短容器启动后 go run 的等待时间。 +# 这一步不产出任何二进制;失败也不影响镜像构建(|| true)。 +# 缓存目录为默认的 /root/.cache/go-build,可挂载卷在多次运行间复用。 +RUN go build -o /dev/null ./cmd/migrate || true + +# 用法: +# docker run --rm --network host \ +# -v <宿主目录>/configs:/app/configs \ +# -v <缓存卷>:/root/.cache/go-build \ +# up|down|steps N|version|force V +ENTRYPOINT ["go", "run", "./cmd/migrate"]