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)。