💜 想真正擅长编程? 从一门课程开始,100% 免费

《笔记》第二十七篇 Gin的打包部署注意点

第27讲 Gin的打包部署注意点

本讲基于视频实际讲解内容整理


一、本讲概述

本地用 go run main.go 能跑起来,但要把项目部署到服务器(通常是 Linux)上对外服务,还有很多注意事项。本讲讲解 Gin 项目的编译打包与部署要点:交叉编译、静态资源与模板的携带、运行模式、以及后台运行。


二、编译打包

2.1 普通编译

Shell
# 在项目根目录
go build -o bbs main.go

编译后会生成名为 bbs 的可执行文件,直接 ./bbs 即可运行,不再依赖 Go 环境。

2.2 交叉编译(在 Windows 上编译 Linux 程序)

我们开发常在 Windows,服务器多是 Linux,需要交叉编译:

Shell
# Windows 的 cmd / PowerShell 中
SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build -o bbs main.go
环境变量 含义
CGO_ENABLED=0 禁用 CGO,生成纯静态二进制,避免依赖系统 C 库
GOOS=linux 目标操作系统为 Linux
GOARCH=amd64 目标 CPU 架构为 64 位 x86

老师强调:CGO_ENABLED=0 很关键。如果项目用到 SQLite 这类依赖 C 库的组件,没关 CGO 会导致编译出的程序在目标机上缺少动态库而跑不起来。纯静态编译最省心。

2.3 在 Git Bash / Linux 下的写法

Shell
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o bbs main.go

三、模板与静态资源的携带

3.1 模板目录要一起部署

r.LoadHTMLGlob("templates/*") 用的是相对路径,所以部署时必须把 templates 目录和可执行文件放在同一级:

TEXT
部署包/
├── bbs              ← 可执行文件
├── templates/       ← 模板目录(必须带)
│   ├── base.html
│   ├── index.html
│   └── login.html
└── static/          ← 静态资源(如果有)
    └── css/

老师指出:最常见部署翻车就是"只传了可执行文件,忘了传 templates",一访问页面就报模板找不到。模板、静态资源要和可执行文件一起打包。

3.2 静态文件服务

如果项目有 css/js/图片,记得注册静态目录:

Go
r.Static("/static", "./static")

这样模板里 <link href="/static/css/style.css"> 才能正常加载。


四、运行模式

4.1 设置为 Release 模式

Gin 默认是 debug 模式(有热重载提示、打印多余日志)。生产环境应切到 release:

Go
func main() {
    gin.SetMode(gin.ReleaseMode)   // 放在最前面
    r := gin.Default()
    // ...
    r.Run(":8080")
}
模式 特点
gin.DebugMode 开发用,输出详细日志
gin.ReleaseMode 生产用,性能更好、日志更少
gin.TestMode 测试用

老师提醒:生产环境一定要设 Release,否则不仅日志刷屏,还会暴露调试信息。

4.2 端口与防火墙

  • 代码里 r.Run(":8080") 监听 8080,部署时确保服务器防火墙/安全组放开了该端口
  • 若用 80 端口,Linux 下可能需要权限或以反向代理(Nginx)转发

五、在服务器上后台运行

5.1 用 nohup 后台运行

Shell
nohup ./bbs > bbs.log 2>&1 &

nohup ... & 让程序在后台持续运行,退出终端也不中断,日志写入 bbs.log。

5.2 更稳妥:用 systemd / supervisor(了解)

生产环境推荐用进程守护工具(如 systemd、supervisor)管理,宕机自动重启。本讲老师以 nohup 演示为主,进阶可了解进程守护。


六、本讲小结

知识点 要点
编译 go build -o bbs main.go
交叉编译 CGO_ENABLED=0 GOOS=linux GOARCH=amd64
模板携带 templates 目录必须随可执行文件一起部署
静态资源 r.Static("/static", "./static")
运行模式 生产设 gin.SetMode(gin.ReleaseMode)
后台运行 nohup ./bbs > bbs.log 2>&1 &

七、课后练习

  1. 在本地用 go build -o bbs 编译出可执行文件并直接运行,确认能访问
  2. 设置 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 交叉编译出 Linux 版本
  3. 把可执行文件和 templates、static 目录一起打成压缩包,模拟部署
  4. 在 main 最前面加 gin.SetMode(gin.ReleaseMode),对比 debug 模式日志差异
  5. 用 r.Static 注册静态目录,并在模板中正确引用 css
  6. 思考:如果部署后页面打不开,你会按什么顺序排查(端口?模板?防火墙?)?