Go语言在CentOS上打包的步骤是什么
小樊
44
2025-12-17 18:23:02
在 CentOS 上打包 Go 程序的常用做法
一 准备环境
- 安装 Go(示例为 yum 安装,版本以仓库为准):
- 命令:sudo yum install golang -y
- 验证安装:
- 使用 Go Modules 管理依赖(项目根目录执行):
- 初始化:go mod init example.com/myapp
- 整理依赖:go mod tidy
- 可选:配置环境变量(写入 ~/.bashrc 或 /etc/profile)
- 示例:
- export GOROOT=/usr/local/go
- export GOPATH=$HOME/go
- export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
- 使配置生效:source ~/.bashrc 或 source /etc/profile。
二 编译为 Linux 可执行文件
- 本机为 CentOS(amd64)时直接构建:
- 命令:go build -o myapp main.go
- 需要交叉编译(例如在 macOS 或 Windows 上构建 CentOS 目标):
- 常用组合:CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o myapp main.go
- 说明:
- CGO_ENABLED=0 关闭 cgo,便于生成静态二进制,减少外部依赖
- GOOS=linux 指定目标操作系统
- GOARCH=amd64 指定目标架构(常见还有 arm64 等)
- 体积优化(可选):
- 去除符号与调试信息:go build -ldflags “-s -w” -o myapp main.go
- 进一步压缩(需安装 upx):upx --best myapp。
三 打包与发布方式
- 方式 A 压缩包发布(简单通用)
- 打包命令:tar -czvf myapp.tar.gz myapp(可同时打包配置、脚本等)
- 传输示例:scp myapp.tar.gz user@host:/opt/app
- 目标机运行:
- 解压:tar -xzvf myapp.tar.gz
- 赋权:chmod +x myapp
- 启动:
- 前台:**./**myapp
- 后台:nohup ./myapp 1>info.log 2>&1 &
- 方式 B 制作 RPM 包(便于在 CentOS 系分发与安装)
- 安装工具:sudo yum install rpm-build rpmdevtools -y
- 初始化 rpmbuild 目录:rpmdev-setuptree
- 将可执行文件放入 ~/rpmbuild/SOURCES/myapp
- 编写 ~/rpmbuild/SPECS/myapp.spec(示例要点)
- Name/Version/Release/Summary/License/Source0
- BuildRequires/Requires(如:golang)
- %description、%prep、%build、%install、%files、%changelog
- 构建:rpmbuild -ba ~/rpmbuild/SPECS/myapp.spec
- 产物:~/rpmbuild/RPMS/x86_64/myapp-*.rpm
- 安装:sudo yum install ~/rpmbuild/RPMS/x86_64/myapp-*.rpm
- 进阶:在 CentOS 7/8 可配合 go-srpm-macros 与 mock 标准化构建与多平台复现。
四 Docker 多阶段构建与运行
- 示例 Dockerfile(多阶段,减小镜像体积)
- 构建阶段:
- FROM golang:1.23-alpine AS build
- WORKDIR /src
- RUN go mod download
- RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -installsuffix cgo -o /bin/app ./cmd/app
- 运行阶段:
- FROM alpine:latest
- COPY --from=build /bin/app /app/app
- CMD [“/app/app”]
- 构建与运行:
- 构建:docker build -t myapp .
- 运行:docker run --rm myapp
- 说明:多阶段构建能显著减小最终镜像,适合在 CI/CD 中标准化交付。