温馨提示×

Go语言在CentOS上打包的步骤是什么

小樊
44
2025-12-17 18:23:02
栏目: 编程语言

在 CentOS 上打包 Go 程序的常用做法


一 准备环境

  • 安装 Go(示例为 yum 安装,版本以仓库为准):
    • 命令:sudo yum install golang -y
  • 验证安装:
    • 命令:go version
  • 使用 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 ~/.bashrcsource /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-macrosmock 标准化构建与多平台复现。

四 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 中标准化交付。

0