Golang打包项目在CentOS环境的配置与部署指南
确保CentOS系统已更新至最新版本(避免依赖冲突),并根据系统版本选择包管理工具:
yum;dnf。# CentOS 7 sudo yum update -y # CentOS 8及以上 sudo dnf update -y 有两种安装方式,推荐手动下载二进制包(更灵活,避免包管理器版本滞后):
go1.21.linux-amd64.tar.gz);/usr/local目录:sudo tar -C /usr/local -xzf go1.21.linux-amd64.tar.gz ~/.bashrc(或~/.bash_profile),添加以下内容:export GOROOT=/usr/local/go # Go安装路径 export GOPATH=$HOME/go # 工作空间路径(存放项目与依赖) export PATH=$PATH:$GOROOT/bin:$GOPATH/bin # 将Go命令加入PATH source ~/.bashrc go version,若输出Go版本信息则安装成功。Go 1.11及以上版本推荐使用Go Modules管理依赖(避免GOPATH的繁琐限制):
your-module-name为项目名称):go mod init your-module-name import语句中的包):go mod tidy goproxy.cn):export GOPROXY=https://goproxy.cn,direct 可将其添加至~/.bashrc以永久生效。为CentOS环境打包需使用交叉编译(生成适用于Linux的二进制文件,无需目标机器安装Go环境):
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o your-app-name main.go 参数说明: CGO_ENABLED=0:禁用CGO(避免依赖CentOS的C库,提升可移植性);GOOS=linux:目标系统为Linux;GOARCH=amd64:目标架构为64位(根据服务器CPU调整,如arm64对应ARM架构)。Makefile简化流程。在项目根目录创建Makefile,内容如下:.PHONY: build build: CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o your-app-name main.go 运行make build即可执行打包。使用scp(安全拷贝)将打包好的二进制文件上传至服务器(替换user、server-ip、/path/to/dest为实际值):
scp your-app-name user@server-ip:/path/to/dest 确保二进制文件有执行权限:
chmod +x /path/to/dest/your-app-name 使用nohup命令让程序在后台持续运行,并将日志输出至app.log:
nohup /path/to/dest/your-app-name > app.log 2>&1 & 若项目需作为系统服务(开机自启、进程守护、日志管理),可创建Systemd服务文件:
/etc/systemd/system/目录下创建服务文件(如your-app.service):[Unit] Description=Your Golang Application # 服务描述 After=network.target # 依赖网络服务启动 [Service] User=www # 运行用户(建议用非root,如www) Group=www # 运行组 WorkingDirectory=/path/to/dest # 工作目录(程序运行时的当前目录) ExecStart=/path/to/dest/your-app-name # 启动命令 Restart=always # 失败时自动重启 Environment="ENV_VAR=value" # 环境变量(如数据库连接串) [Install] WantedBy=multi-user.target # 开机自启的目标 sudo systemctl daemon-reload # 重新加载服务配置 sudo systemctl start your-app.service # 启动服务 sudo systemctl enable your-app.service # 设置开机自启 sudo systemctl status your-app.service 若显示active (running)则表示服务已正常运行。若需将项目打包为RPM(便于通过yum或dnf安装),可使用rpmbuild工具:
rpm-build:sudo yum install -y rpm-build mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS} SOURCES目录:cp your-app-name ~/rpmbuild/SOURCES/ ~/rpmbuild/SPECS/your-app.spec),内容如下:Name: your-app Version: 1.0 Release: 1%{?dist} Summary: Your Golang Application License: MIT URL: http://example.com Source0: %{name}-%{version}.tar.gz BuildRequires: golang Requires: golang %description A brief description of your application. %prep %setup -q %build go build -o %{buildroot}/usr/bin/your-app-name . %install rm -rf %{buildroot} mkdir -p %{buildroot}/usr/bin cp %{buildroot}/usr/bin/your-app-name %{buildroot}/usr/bin/ %files /usr/bin/your-app-name %changelog * Tue Sep 20 2025 Your Name <your-email@example.com> - 1.0-1 - Initial package. rpmbuild -ba ~/rpmbuild/SPECS/your-app.spec 构建完成后,RPM包将生成于~/rpmbuild/RPMS/x86_64/目录下,可通过rpm -ivh命令安装。go.mod与go.sum冲突);root用户运行应用(降低安全风险);nohup或Systemd的StandardOutput/StandardError配置日志轮转(如使用logrotate工具);600)。