使用受支持的 Go 版本(建议 1.23.x 或更新),新版本包含编译器与标准库优化、漏洞修复与构建工具链改进。
在 CentOS 上安装构建与运维工具:
构建与压缩:go、make、upx、binutils(提供 strip)
容器化:docker 或 podman
建议启用 Go Modules 管理依赖,保持可重复构建与版本可追溯。
二 本地构建与优化
交叉编译目标为 Linux amd64(适用于大多数 CentOS 7/8/9 x86_64):
纯 Go 依赖时关闭 CGO,生成静态二进制,减少外部依赖与运行期故障面:
命令:CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags “-s -w” -o myapp
减小体积与符号信息:
去除调试符号:-ldflags “-s -w”
进一步压缩符号表:strip --strip-all myapp
可执行压缩:upx --best myapp(可选,注意启动时间与内存开销)
提升构建效率:
并行构建:go build -p $(nproc)
控制 GC 以加速构建:GOGC=20
如需完全静态链接(极少数需要 libc 的场景):
命令:CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -installsuffix cgo -ldflags “-extldflags ‘-static’” -o myapp
多架构构建脚本示例(bash):
for arch in amd64 arm64; do GOOS=linux GOARCH=$arch CGO_ENABLED=0 go build -ldflags “-s -w” -o “myapp-linux-$arch”; done
三 容器化打包与多阶段构建
多阶段构建(减小镜像体积、提升可移植性):
示例 Dockerfile:
FROM golang:1.23-alpine AS build
WORKDIR /src
COPY . .
RUN go mod download
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags “-s -w” -o /bin/myapp ./cmd/myapp
FROM alpine:latest
RUN apk add --no-cache ca-certificates
WORKDIR /app
COPY --from=build /bin/myapp /app/
CMD [“./myapp”]
构建与运行:
构建:docker build -t myapp:latest .
运行:docker run --rm -p 8080:8080 myapp:latest
如需在 CI 中自动构建并部署到 CentOS 服务器,可使用 GitHub Actions 执行构建、SCP 上传与远程启停脚本,注意先停旧进程、再传包、后启动,避免文件占用与不一致。