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 ~/.bashrc 或 source /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 示例,便于运维标准化部署。