chore(docker): 更新 Dockerfile 和部署脚本以优化构建流程
- 将基础镜像版本更新至 golang:1.25-alpine,确保与最新的 Go 语言特性兼容。 - 安装构建所需的工具,包括 git、protoc 和 make,简化构建过程。 - 在 Dockerfile 中添加自动生成 proto 文件的步骤,确保构建时生成所需文件。 - 更新部署脚本,检查 grpc 目录和 Makefile 的存在性,确保构建前的必要文件完整性。
This commit is contained in:
parent
e17b2ddf6d
commit
c2eb997511
23
Dockerfile
23
Dockerfile
|
|
@ -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 减小二进制文件大小,移除调试信息
|
||||
|
|
|
|||
|
|
@ -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 \
|
||||
|
|
|
|||
Loading…
Reference in New Issue