Skip to content

Gin 实战 12:部署上线

最后一步把项目从本地开发模式交付到服务器。Go 项目部署的核心是:编译二进制、准备配置文件、连接 MySQL、交给进程管理或容器运行。

1. 本地构建

bash
go build -o bin/youlai-gin main.go

Linux 服务器部署时,可以在 Windows 或 macOS 上交叉编译:

bash
GOOS=linux GOARCH=amd64 go build -o bin/youlai-gin main.go

Windows PowerShell:

powershell
$env:GOOS="linux"
$env:GOARCH="amd64"
go build -o bin/youlai-gin main.go

2. 生产配置

创建 configs/prod.yaml,把端口、数据库和 JWT 密钥改成生产环境值:

yaml
server:
  port: 8000

database:
  host: prod-mysql
  port: 3306
  username: youlai
  password: "replace-with-secret"
  dbname: youlai_admin

security:
  sessionType: jwt
  jwt:
    secretKey: "replace-with-a-long-random-secret-at-least-32-characters"
    accessTokenTTL: 7200
    refreshTokenTTL: 2592000

生产密钥不要提交到 Git,可以通过 Secret、环境变量或挂载配置文件管理。

3. 启动服务

bash
APP_ENV=prod ./bin/youlai-gin

如果用 systemd:

ini
[Service]
WorkingDirectory=/opt/youlai-gin
ExecStart=/opt/youlai-gin/bin/youlai-gin
Environment=APP_ENV=prod
Restart=always

4. Dockerfile

dockerfile
# 第一阶段:使用 Go 镜像编译二进制。
FROM golang:1.25-alpine AS builder
WORKDIR /app

# 先复制 go.mod/go.sum 并下载依赖,可以提高 Docker 构建缓存命中率。
COPY go.mod go.sum ./
RUN go mod download

# 再复制完整源码并编译。
COPY . .
RUN go build -o youlai-gin main.go

# 第二阶段:使用更小的 Alpine 镜像运行。
FROM alpine:3.20
WORKDIR /app

# ca-certificates 用于 HTTPS 证书校验,tzdata 用于时区。
RUN apk add --no-cache ca-certificates tzdata
ENV TZ=Asia/Shanghai

# 只复制运行所需的二进制和配置文件,不把源码带进生产镜像。
COPY --from=builder /app/youlai-gin /app/youlai-gin
COPY --from=builder /app/configs /app/configs

# 对外暴露的服务端口,要和 configs/prod.yaml 中 server.port 保持一致。
EXPOSE 8000

# 容器启动时运行后端服务。
CMD ["/app/youlai-gin"]

运行:

bash
docker build -t youlai-gin:latest .
docker run -d --name youlai-gin -p 8000:8000 -e APP_ENV=prod youlai-gin:latest

5. 上线检查

  • configs/prod.yaml 已准备。
  • MySQL 初始化脚本已执行。
  • JWT 密钥足够长且不与开发环境共用。
  • Swagger 是否开放按团队策略决定。
  • 日志能被采集或查看。

到这里,一个从空目录开始的 Gin 后台 API 项目完成了:配置、接口、日志、Swagger、数据库、CRUD、Wire、统一响应、JWT、鉴权和部署闭环。

基于 MIT 许可发布 · 如需部署协助或二开定制,请查看 支持与合作