Bläddra i källkod

build(deploy): 更新 Dockerfile构建流程并解决部署问题- 修改 Dockerfile 中的 Go构建流程,解决多包编译问题
- 更新 README 中的 Go 版本问题解决指南- 添加新的部署问题解决章节,涵盖 Go 版本不匹配和多包编译问题

fusu 3 månader sedan
förälder
incheckning
b20df55887
2 ändrade filer med 46 tillägg och 6 borttagningar
  1. 43 3
      README.md
  2. 3 3
      deploy/build/Dockerfile

+ 43 - 3
README.md

@@ -116,7 +116,9 @@ systemctl start go-app
 3. 生产环境中,建议配置SSL证书以启用HTTPS
 4. 您可能需要调整配置文件中的数据库连接信息等配置
 
-## Go版本问题解决
+## 部署问题解决
+
+### 1. Go版本不匹配问题
 
 如果在构建Docker镜像时遇到如下错误:
 
@@ -125,9 +127,15 @@ invalid go version '1.23.0': must match format 1.23
 unknown directive: toolchain
 ```
 
+或者:
+
+```
+go: go.mod requires go >= 1.23.0 (running go 1.22.12; GOTOOLCHAIN=local)
+```
+
 这是因为Dockerfile使用的Go版本与go.mod中声明的版本不匹配。有两种解决方案:
 
-### 方案一:更新Dockerfile中的Go版本
+#### 方案一:更新Dockerfile中的Go版本
 
 修改`deploy/build/Dockerfile`文件,将:
 ```dockerfile
@@ -138,13 +146,45 @@ FROM ${REGISTRY}/golang:1.19-alpine AS builder
 FROM ${REGISTRY}/golang:1.24-alpine AS builder
 ```
 
-### 方案二:修改go.mod文件
+#### 方案二:修改go.mod文件
 
 如果无法更新Docker环境中的Go版本,可以修改go.mod文件:
 
 1. 将`go 1.23.0`更改为`go 1.19`
 2. 删除`toolchain go1.24.1`行
 
+### 2. 多包编译问题
+
+如果遇到这样的错误:
+
+```
+go: cannot write multiple packages to non-directory ./bin/server
+```
+
+需要修改Dockerfile中的以下内容:
+
+1. 将:
+```dockerfile
+RUN rm -rf /data/app/bin/
+RUN export GOPROXY=https://goproxy.cn,direct && go mod tidy && go build -ldflags="-s -w" -o ./bin/server ${APP_RELATIVE_PATH}
+```
+
+更改为:
+```dockerfile
+RUN mkdir -p /data/app/bin/
+RUN export GOPROXY=https://goproxy.cn,direct && go mod tidy && go build -ldflags="-s -w" -o ./bin/server/main ${APP_RELATIVE_PATH}
+```
+
+2. 同时需要更新ENTRYPOINT:
+```dockerfile
+ENTRYPOINT [ "./server" ]
+```
+
+更改为:
+```dockerfile
+ENTRYPOINT [ "./server/main" ]
+```
+
 ## 验证部署
 部署完成后,您可以通过以下方式验证服务是否正常运行:
 

+ 3 - 3
deploy/build/Dockerfile

@@ -7,8 +7,8 @@ ARG APP_RELATIVE_PATH
 COPY .. /data/app
 WORKDIR /data/app
 
-RUN rm -rf /data/app/bin/
-RUN export GOPROXY=https://goproxy.cn,direct && go mod tidy && go build -ldflags="-s -w" -o ./bin/server ${APP_RELATIVE_PATH}
+RUN mkdir -p /data/app/bin/
+RUN export GOPROXY=https://goproxy.cn,direct && go mod tidy && go build -ldflags="-s -w" -o ./bin/server/main ${APP_RELATIVE_PATH}
 RUN mv config /data/app/bin/
 
 
@@ -28,7 +28,7 @@ WORKDIR /data/app
 COPY --from=builder /data/app/bin /data/app
 
 EXPOSE 8000
-ENTRYPOINT [ "./server" ]
+ENTRYPOINT [ "./server/main" ]
 
 #docker build -t  1.1.1.1:5000/demo-api:v1 --build-arg APP_CONF=config/prod.yml --build-arg  APP_RELATIVE_PATH=./cmd/server/...  .
 #docker run -it --rm --entrypoint=ash 1.1.1.1:5000/demo-api:v1