温馨提示×

Golang打包的CentOS环境如何搭建

小樊
43
2025-11-14 04:19:59
栏目: 编程语言

Golang 打包的 CentOS 环境搭建与部署

一 目标与准备

  • 目标:在 CentOS 上搭建可重复使用的 Go 打包与部署环境,支持本地或 CI 构建、生成 Linux 可执行文件、可选 systemd 托管与 RPM 分发。
  • 准备:一台 CentOS 7/8/Stream 服务器或虚拟机,具备 sudo 权限;安装基础工具(如 wget、tar);选择 Go 版本(建议 1.18+)。

二 在 CentOS 上安装 Go 与基础环境

  • 安装方式一(推荐,版本可控):
    • 下载并解压 Go 二进制包(示例为 go1.18.linux-amd64.tar.gz):
      • wget https://dl.google.com/go/go1.18.linux-amd64.tar.gz
      • sudo tar -C /usr/local -xzf go1.18.linux-amd64.tar.gz
    • 配置环境变量(写入 ~/.bashrc/etc/profile):
      • echo ‘export PATH=$PATH:/usr/local/go/bin’ >> ~/.bashrc
      • echo ‘export GOPATH=$HOME/go’ >> ~/.bashrc
      • source ~/.bashrc
    • 验证:go version
  • 安装方式二(yum 可用时):
    • sudo yum install -y golang
    • 配置环境变量(同上),验证 go version
  • 说明:Go 1.18+ 已弱化 GOPATH 要求,模块化项目可直接在任意目录构建。

三 构建与打包流程

  • 本地或 CI 构建(交叉编译为 Linux amd64):
    • 纯 Go 依赖(推荐,便于移植):
      • CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags “-s -w” -o myapp main.go
    • 如需调用 C 库(启用 CGO,需在 CentOS 安装 gcc、glibc-devel 等):
      • 安装编译依赖:sudo yum -y install gcc gcc-c++ make
      • 构建:CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -o myapp main.go
  • 产物优化与多平台:
    • 减小体积:go build -ldflags “-s -w” -o myapp main.go
    • 极致静态(仅当无 C 依赖时):CGO_ENABLED=0 go build -a -installsuffix cgo -ldflags “-extldflags ‘-static’” -o myapp main.go
    • 多平台打包:go install github.com/mitchellh/gox@latest,然后
      • gox -osarch=“linux/amd64 windows/amd64 darwin/amd64” -output=“myapp-{{.OS}}-{{.Arch}}”
  • 产物归档与分发:
    • 打包:tar -czvf myapp.tar.gz myapp config/ scripts/
    • 上传:scp myapp.tar.gz user@server:/opt/app
    • 解压:tar -xzvf myapp.tar.gz -C /opt/app

四 在 CentOS 部署与运行

  • 基本运行与后台:
    • chmod +x /opt/app/myapp
    • nohup /opt/app/myapp > /opt/app/log.log 2>&1 &
  • systemd 托管(推荐):
    • 创建服务文件:/etc/systemd/system/myapp.service
      • [Unit]
        • Description=My Go App
        • After=network.target
      • [Service]
        • ExecStart=/opt/app/myapp
        • Restart=always
        • User=www
        • Group=www
        • Environment=DATABASE_URL=your_db_url
      • [Install]
        • WantedBy=multi-user.target
    • 启用与启动:
      • systemctl daemon-reload
      • systemctl enable --now myapp
      • systemctl status myapp
  • 防火墙放行(如对外提供 80/443):
    • sudo firewall-cmd --permanent --add-service=http
    • sudo firewall-cmd --permanent --add-service=https
    • sudo firewall-cmd --reload

五 可选分发与工程化实践

  • 构建 RPM 包(便于内部分发与版本管理):
    • 安装工具:sudo yum install -y rpm-build
    • 准备目录:mkdir -p $HOME/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
    • 拷贝二进制到 SOURCES 并编写 SPEC(示例 myapp.spec),随后
      • rpmbuild -ba $HOME/rpmbuild/SPECS/myapp.spec
    • 产物位于 $HOME/rpmbuild/RPMS/** 下
  • 容器化交付(Docker):
    • 多阶段构建示例(减小镜像体积):
      • FROM golang:1.23.0-alpine AS build
        • WORKDIR /src
        • RUN go mod download
        • GOOS=linux GOARCH=amd64 go build -a -installsuffix cgo -o /bin/myapp ./cmd/myapp
      • FROM alpine:latest
        • COPY --from=build /bin/myapp /app/myapp
        • CMD [“./myapp”]
    • 构建与运行:
      • docker build -t myapp .
      • docker run -p 8080:8080 myapp
  • 工程效率建议:
    • 使用 .goreleaser.yml 或 Makefile 标准化构建与发布
    • 使用 upx 压缩二进制(可选):upx --best --lzma myapp
    • 清理缓存:go clean -cache;并行构建:go build -p 4

0