gin项目需编译为静态二进制,通过systemd配置开机自启、崩溃自动重启,并配合nginx反向代理透传信任头。具体步骤:goos=linux goarch=amd64 cgo_enabled=0 go build -o myapp main.go;上传至服务器;创建/etc/systemd/system/myapp.service,设restart=always、user=www-data;执行systemctl daemon-reload、enable、start;nginx需配置proxy_set_header透传x-forwarded-*头,gin侧调用settrustedproxies匹配代理网段。

把Gin项目部署到Linux服务器并确保它持续运行、崩溃自动重启、开机自启,不是简单地执行./myapp就完事——手动启动的进程一断SSH连接就消失,系统重启后服务彻底离线,线上业务直接中断。
编译生成静态二进制文件
进入项目根目录(必须含go.mod),执行:
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o myapp main.go
【CGO_ENABLED=0不可省略】否则生成的二进制会动态链接libc,换到精简版Linux(如Alpine或最小化CentOS)立刻报not found错误。
确认输出文件可执行:
chmod +x myapp
别把go.mod、go.sum、vendor/一起传上去——Go二进制已静态链接全部依赖,多传不仅冗余,还可能被误读为配置文件引发安全风险。
上传并校验监听地址
用scp或rsync把myapp传到服务器目标路径,例如/opt/myapp/myapp。
在代码里检查router.Run()是否显式指定地址:
✅ 正确写法:router.Run(":8080") 或 router.Run("127.0.0.1:8080")
❌ 错误写法:router.Run()(默认0.0.0.0:8080但权限/端口冲突时静默失败)或 router.Run("localhost:8080")(某些系统解析为::1,Nginx用127.0.0.1连不上)。
手动运行一次验证:
./myapp
然后立即执行:
ss -tulpn | grep :8080
若无输出,说明监听失败,需回查端口占用、权限、绑定地址三处。
配置systemd守护服务
第一步:创建服务单元文件
sudo nano /etc/systemd/system/myapp.service
第二步:填入以下内容(按实际路径和用户修改):
[Unit]
Description=Gin Web Service
After=network.target
[Service]
Type=simple
ExecStart=/opt/myapp/myapp
Restart=always
RestartSec=5
User=www-data
WorkingDirectory=/opt/myapp
LimitNOFILE=65536
PrivateTmp=true
[Install]
WantedBy=multi-user.target
注意User=www-data必须是已存在的非root用户——用root运行Web服务是严重安全隐患,systemd会拒绝加载服务。
第三步:启用并启动服务
sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp
第四步:验证状态
sudo systemctl status myapp
若显示active (running)且无红色错误行,即成功。
第五步:实时查看日志
journalctl -u myapp -f
反向代理与信任头配置(Nginx必需)
方法一:Nginx location块中加入四行透传头:
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
方法二:Gin侧启用代理信任(与Nginx部署位置匹配):
若Nginx与Gin同机:router.SetTrustedProxies([]string{"127.0.0.1", "::1"})
若Nginx走内网(如192.168.10.0/24):router.SetTrustedProxies([]string{"192.168.10.0/24"})
【漏配X-Forwarded-Proto会导致HTTPS重定向跳转成HTTP】前端Cookie的Secure标志失效,登录态瞬间丢失。











