温馨提示×

CentOS环境Golang打包流程是怎样的

小樊
37
2025-12-13 19:21:10
栏目: 编程语言

CentOS环境Golang打包流程

一 准备环境

  • 安装 Go(任选其一)
    • 使用包管理器安装:sudo yum install -y golang
    • 或手动安装二进制包:
      • 下载:wget https://dl.google.com/go/go1.22.0.linux-amd64.tar.gz
      • 解压:sudo tar -C /usr/local -xzf go1.22.0.linux-amd64.tar.gz
  • 配置环境变量(写入 ~/.bashrc/etc/profile
    • 建议设置:export GOROOT=/usr/local/go
    • 启用模块:export GO111MODULE=on
    • 路径:export PATH=$PATH:$GOROOT/bin
    • 可选:export GOPATH=$HOME/go
  • 使配置生效并验证
    • 生效:source ~/.bashrcsource /etc/profile
    • 验证:go version(应输出版本号,如:go1.22.0 linux/amd64

二 编译与本地打包

  • 进入项目目录并拉取依赖
    • cd /path/to/app
    • go mod tidy
  • 编译为 Linux 可执行文件(在 CentOS 本机编译时通常可省略 GOOS/GOARCH)
    • 本机:go build -o myapp
    • 交叉编译示例:GOOS=linux GOARCH=amd64 go build -o myapp
  • 简单运行脚本(可选)
    • 创建:cat > run.sh <<‘EOF’
      • #!/bin/bash
      • exec ./myapp “$@”
      • EOF
    • 赋权:chmod +x run.sh
  • 打包发布物
    • 仅二进制:tar -czvf myapp.tar.gz myapp
    • 含脚本与配置:tar -czvf myapp.tar.gz myapp run.sh config/

三 生成 RPM 包便于分发

  • 安装工具:sudo yum install -y rpm-build
  • 准备目录结构:mkdir -p $HOME/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
  • 放入源码/二进制(示例将二进制放入 SOURCES)
    • 示例:cp myapp $HOME/rpmbuild/SOURCES/
  • 编写 SPEC(示例 $HOME/rpmbuild/SPECS/myapp.spec
    • 参考要点:
      • Name: myapp
      • Version: 1.0
      • Release: 1%{?dist}
      • Summary: My Go application
      • License: MIT
      • Source0: %{name}-%{version}.tar.gz
      • %description 一行描述
      • %prep 阶段可用 %setup -q
      • %build 阶段可本地编译或留空(若已提供二进制)
      • %install 阶段将文件安装到 %{buildroot}(如:mkdir -p %{buildroot}/usr/bin && cp %{SOURCE0} %{buildroot}/usr/bin/myapp
      • %files 声明安装文件(如:/usr/bin/myapp
      • %changelog 变更记录
  • 构建:rpmbuild -ba $HOME/rpmbuild/SPECS/myapp.spec
  • 产物位置:$HOME/rpmbuild/RPMS/x86_64/myapp-1.0-1.el7.x86_64.rpm(路径随系统和版本变化)

四 部署与运行

  • 传输产物
    • 压缩包:scp myapp.tar.gz user@host:/opt/app/
    • RPM:scp $HOME/rpmbuild/RPMS/x86_64/myapp-*.rpm user@host:/opt/app/
  • 在目标机器部署
    • 压缩包方式:
      • 解压:tar -xzvf myapp.tar.gz -C /opt/app
      • 赋权:chmod +x /opt/app/myapp
      • 启动:前台 /opt/app/myapp;后台 nohup /opt/app/myapp &
    • RPM 方式:
      • 安装:sudo rpm -ivh /opt/app/myapp-*.rpm
      • 运行:/usr/bin/myapp
  • 运行建议
    • 使用专用用户运行,结合 systemd 或进程管理工具(如 supervisord)做守护与日志轮转。

五 常见问题与建议

  • 交叉编译时请使用 GOOS=linux GOARCH=amd64(或目标架构如 arm64),避免误用 set 命令(那是 Windows CMD 语法)。
  • 启用 CGO 的本地依赖时,交叉编译会更复杂;纯 Go 项目建议关闭 CGO 并使用静态编译:CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -ldflags ‘-s -w’ -o myapp,可减小体积并提升可移植性。
  • 建议在打包时同时提供 systemd service 文件config 示例,便于运维标准化部署。

0