发布于2026-07-16 阅读(0)
扫一扫,手机访问
把 Go 程序部署成 CentOS 系统服务,这件事本身并不复杂,但步骤里有些细节如果不注意,很容易踩坑。下面这份流程是经过多次验证的,跟着走基本不会出问题。

写好你的 Go 程序。假设你已经有一个 HTTP 服务器,就像下面这样:
// main.go
package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, World!")
})
fmt.Println("Server is running at http://localhost:8080")
http.ListenAndServe(":8080", nil)
}
确认 CGO 状态。如果你的程序没有用到 CGO,直接编译就好。如果用了 CGO,需要额外配置环境变量确保兼容。这一步容易忽略,建议先检查代码里是否有 import "C" 或依赖 cgo 的库。
交叉编译。在本地开发机器上,用 GOOS 和 GOARCH 指定目标平台。比如 CentOS 7 通常是 linux amd64:
GOOS=linux GOARCH=amd64 go build -o myservice main.go
执行后当前目录就会生成一个叫 myservice 的二进制文件。
传到 CentOS 服务器。用 scp 或者你习惯的文件传输工具都行:
scp myservice user@centos_server:/path/to/destination
给执行权限。到了服务器上,别忘了:
chmod +x /path/to/destination/myservice
创建 systemd 服务文件。这是整个流程的关键——让程序能开机自启、崩溃自动恢复。用 vi 或者其他编辑器新建一个文件:
sudo vi /etc/systemd/system/myservice.service
内容如下(记得替换用户和组):
[Unit]
Description=My Go Service
After=network.target
[Service]
ExecStart=/path/to/destination/myservice
Restart=always
User=
Group=
Environment=GO_ENV=production
[Install]
WantedBy=multi-user.target
启动并设置开机自启:
sudo systemctl start myservice
sudo systemctl enable myservice
检查状态,确认一切正常:
sudo systemctl status myservice
如果你的 Go 程序没有依赖特殊系统库或者 CGO,这八步走完,服务就已经跑起来了。需要说明的是,上面假设你的程序是纯 Go 写的,不依赖特定操作系统特性。如果涉及 CGO 或系统级依赖,那编译阶段还需要额外配置,比如设置 CGO_ENABLED=1 或指定 CC 编译器。那种情况虽然不常见,但提前了解可以避免临时抓瞎。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8