核心三步:交叉编译(GOOS=linux GOARCH=amd64)、scp上传至/opt/myapp/、systemd守护(含安全组放行与gin.ReleaseMode)。

直接部署到腾讯云服务器,核心就三件事:编译成静态二进制、传到服务器、后台常驻运行。不需要装 Go 环境,也不依赖 Docker(除非你主动选)。
怎么交叉编译出能在腾讯云 CVM 上跑的二进制
腾讯云 Linux 服务器(如 CentOS Stream 8 / Ubuntu 22.04)默认是 amd64 架构、glibc 环境。你在本地开发机(Mac M1/M2 或 Windows WSL)上必须显式指定目标平台编译,否则生成的二进制大概率无法运行。
- Linux 服务器用:
GOOS=linux GOARCH=amd64 go build -o server ./main.go - 如果你的 CVM 是 ARM 实例(比如 C7a 型),改用:
GOOS=linux GOARCH=arm64 go build -o server ./main.go - 加
-ldflags="-s -w"可减小体积、去掉调试信息(推荐) - 别用
go run部署——它只在开发机有效,且依赖 Go 环境
怎么把程序传到腾讯云并开机自启
上传后不能直接 ./server 运行就完事。前台运行一关终端就退出;没做进程守护,崩溃后不会自动拉起;端口(比如 :8080)默认被防火墙或安全组拦住。
- 用
scp或rsync传二进制(例如传到/opt/myapp/server) - 开放安全组:腾讯云控制台 → 实例 → 安全组 → 入站规则,放行你的应用端口(如
8080或80) - 用
systemd管理进程(Ubuntu/CentOS 7+ 都支持):
写一个/etc/systemd/system/myapp.service,内容包含ExecStart=/opt/myapp/server、Restart=always、RestartSec=5 - 执行
sudo systemctl daemon-reload && sudo systemctl enable myapp && sudo systemctl start myapp
为什么 gin.Default() 在服务器上会报 warning
因为 gin.Default() 默认启用 DebugMode,启动时会打印一堆日志,并暴露敏感错误堆栈。线上环境必须关掉。
- 在
main()开头加一行:gin.SetMode(gin.ReleaseMode) - 或者设环境变量:
GIN_MODE=release(放在 systemd service 文件的Environment=行里更稳妥) - 不关的话,攻击者可能通过 500 错误看到你的文件路径、函数名甚至部分代码逻辑
-
gin.ReleaseMode不仅隐藏堆栈,还跳过一些开发期检查(比如路由重复注册警告),性能略优
真正容易被忽略的是:Gin 默认绑定 0.0.0.0:8080,但腾讯云 CVM 的公网 IP 和内网 IP 是分离的,0.0.0.0 没问题;可一旦你写了 127.0.0.1:8080,外网完全访问不到——这个细节在本地测试时永远发现不了。


















