chore(docker): 更新 Dockerfile 和部署脚本以优化构建流程

- 将基础镜像版本更新至 golang:1.25-alpine,确保与最新的 Go 语言特性兼容。
- 安装构建所需的工具,包括 git、protoc 和 make,简化构建过程。
- 在 Dockerfile 中添加自动生成 proto 文件的步骤,确保构建时生成所需文件。
- 更新部署脚本,检查 grpc 目录和 Makefile 的存在性,确保构建前的必要文件完整性。
This commit is contained in:
zhouyonggao 2025-12-20 15:20:37 +08:00
parent e17b2ddf6d
commit c2eb997511
2 changed files with 29 additions and 15 deletions

View File

@ -2,8 +2,8 @@ FROM golang:1.21-alpine AS builder
ENV CGO_ENABLED=0
ENV GO111MODULE=on
ENV GOPROXY=https://goproxy.cn,direct
# 安装构建所需的工具
RUN apk add --no-cache git
# 安装构建所需的工具git、protoc、make
RUN apk add --no-cache git protobuf make
WORKDIR /app
# 复制 go.work 文件(用于工作区配置,必须在项目根目录)
@ -20,11 +20,24 @@ COPY grpc/user/userv1/go.mod grpc/user/userv1/go.sum ./grpc/user/userv1/
WORKDIR /app/grpc/user/userv1
RUN go mod download
# 复制所有源代码(包括生成的 proto 文件)
# 注意:必须在 go.work 所在的目录下构建,才能正确识别工作区
# 安装 protoc 插件(需要在有 go.mod 的环境中安装)
WORKDIR /app
RUN go install google.golang.org/protobuf/cmd/protoc-gen-go@latest && \
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest && \
go install github.com/envoyproxy/protoc-gen-validate@latest && \
go install github.com/go-kratos/kratos/cmd/protoc-gen-go-http@latest && \
go install github.com/go-kratos/kratos/cmd/protoc-gen-go-errors@latest
# 复制 grpc 目录(包括 proto 文件和 Makefile
COPY grpc/ ./grpc/
# 在容器内生成 proto 文件
WORKDIR /app/grpc
RUN make generate
# 复制 server 源代码
WORKDIR /app
COPY server/ ./server/
COPY grpc/user/userv1/ ./grpc/user/userv1/
# 构建应用在项目根目录go.work 会自动生效)
# 使用 -ldflags 减小二进制文件大小,移除调试信息

View File

@ -18,18 +18,19 @@ if [ ! -f "$ROOT_DIR/grpc/user/userv1/go.mod" ]; then
exit 1
fi
# 检查 proto 文件是否已生成(至少检查一个关键文件)
if [ ! -f "$ROOT_DIR/grpc/user/userv1/user.pb.go" ]; then
echo "proto 文件未生成,正在自动生成..." >&2
cd "$ROOT_DIR/grpc" && make generate
cd "$ROOT_DIR"
if [ ! -f "$ROOT_DIR/grpc/user/userv1/user.pb.go" ]; then
echo "错误: proto 文件生成失败" >&2
exit 1
fi
echo "proto 文件生成成功" >&2
# 检查 grpc 目录和 Makefile 是否存在
if [ ! -d "$ROOT_DIR/grpc" ]; then
echo "错误: grpc 目录不存在" >&2
exit 1
fi
if [ ! -f "$ROOT_DIR/grpc/Makefile" ]; then
echo "错误: grpc/Makefile 文件不存在" >&2
exit 1
fi
# proto 文件将在容器内自动生成,无需在构建前生成
# 每次重新构建镜像
echo "开始构建 Docker 镜像..."
DOCKER_BUILDKIT=1 docker build \