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