From 0fe947b5bb0ae6743c4c9a75a16a20c54aef7349 Mon Sep 17 00:00:00 2001 From: zhouyonggao <1971162852@qq.com> Date: Sat, 20 Dec 2025 14:32:11 +0800 Subject: [PATCH] =?UTF-8?q?chore(docker):=20=E6=9B=B4=E6=96=B0=20Dockerfil?= =?UTF-8?q?e=20=E5=92=8C=E9=83=A8=E7=BD=B2=E8=84=9A=E6=9C=AC=E4=BB=A5?= =?UTF-8?q?=E6=94=AF=E6=8C=81=20go.work=20=E5=92=8C=20gRPC=20=E6=A8=A1?= =?UTF-8?q?=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 Dockerfile 中添加对 go.work 和 gRPC 用户模块依赖文件的复制,确保构建过程中的工作区配置正确。 - 更新部署脚本,增加对 go.work 和 gRPC 模块文件存在性的检查,确保构建前的必要文件完整性。 - 提供警告提示,确保 proto 文件生成,避免构建失败。 --- .dockerignore | 4 ++++ Dockerfile | 21 ++++++++++++++++++++- scripts/deploy_docker.sh | 23 +++++++++++++++++++++++ 3 files changed, 47 insertions(+), 1 deletion(-) diff --git a/.dockerignore b/.dockerignore index 32b8f9a..8382135 100644 --- a/.dockerignore +++ b/.dockerignore @@ -6,3 +6,7 @@ server/config.yaml server/config.test.yaml server/config.prod.yaml scripts/*.tar +# 注意:不要忽略以下文件,它们对构建很重要 +# !go.work +# !go.work.sum +# !grpc/user/userv1/ diff --git a/Dockerfile b/Dockerfile index c2973cb..1579fdb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,10 +4,29 @@ ENV GO111MODULE=on ENV GOPROXY=https://goproxy.cn,direct RUN apk add --no-cache git tzdata WORKDIR /app + +# 复制 go.work 文件(用于工作区配置,必须在项目根目录) +COPY go.work go.work.sum* ./ + +# 复制 server 模块的依赖文件(先复制依赖文件以利用 Docker 缓存) COPY server/go.mod server/go.sum ./server/ WORKDIR /app/server RUN go mod download -COPY server/ ./ + +# 复制 grpc/user/userv1 模块的依赖文件 +WORKDIR /app +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 所在的目录下构建,才能正确识别工作区 +WORKDIR /app +COPY server/ ./server/ +COPY grpc/user/userv1/ ./grpc/user/userv1/ + +# 构建应用(在项目根目录,go.work 会自动生效) +WORKDIR /app/server RUN go build -o /out/server ./cmd/server/main.go FROM alpine:3.19 diff --git a/scripts/deploy_docker.sh b/scripts/deploy_docker.sh index 623922e..701e338 100755 --- a/scripts/deploy_docker.sh +++ b/scripts/deploy_docker.sh @@ -7,10 +7,33 @@ TAG="$ENV_NAME" PORT="${PORT:-8077}" cd "$ROOT_DIR" +# 检查必要的文件是否存在 +if [ ! -f "$ROOT_DIR/go.work" ]; then + echo "错误: go.work 文件不存在,请确保已正确配置工作区" >&2 + exit 1 +fi + +if [ ! -f "$ROOT_DIR/grpc/user/userv1/go.mod" ]; then + echo "错误: grpc/user/userv1/go.mod 文件不存在" >&2 + exit 1 +fi + +# 检查 proto 文件是否已生成(至少检查一个关键文件) +if [ ! -f "$ROOT_DIR/grpc/user/userv1/user.pb.go" ]; then + echo "警告: proto 文件未生成,构建可能会失败" >&2 + echo "提示: 运行 'cd grpc && make generate' 生成 proto 文件" >&2 + read -p "是否继续构建? (y/N) " -n 1 -r + echo + if [[ ! $REPLY =~ ^[Yy]$ ]]; then + exit 1 + fi +fi + # 如果镜像存在,则直接使用;否则构建 if docker image inspect "$IMAGE:$TAG" >/dev/null 2>&1; then echo "镜像 $IMAGE:$TAG 已存在,跳过构建。" else + echo "开始构建 Docker 镜像..." DOCKER_BUILDKIT=1 docker build \ --build-arg BUILDKIT_INLINE_CACHE=1 \ --build-arg GOPROXY="${GOPROXY:-https://goproxy.cn,direct}" \