Gin 实战 12:部署上线
最后一步把项目从本地开发模式交付到服务器。Go 项目部署的核心是:编译二进制、准备配置文件、连接 MySQL、交给进程管理或容器运行。
1. 本地构建
bash
go build -o bin/youlai-gin main.goLinux 服务器部署时,可以在 Windows 或 macOS 上交叉编译:
bash
GOOS=linux GOARCH=amd64 go build -o bin/youlai-gin main.goWindows PowerShell:
powershell
$env:GOOS="linux"
$env:GOARCH="amd64"
go build -o bin/youlai-gin main.go2. 生产配置
创建 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=always4. 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:latest5. 上线检查
configs/prod.yaml已准备。- MySQL 初始化脚本已执行。
- JWT 密钥足够长且不与开发环境共用。
- Swagger 是否开放按团队策略决定。
- 日志能被采集或查看。
到这里,一个从空目录开始的 Gin 后台 API 项目完成了:配置、接口、日志、Swagger、数据库、CRUD、Wire、统一响应、JWT、鉴权和部署闭环。
