11.2 环境规划
概述
推荐三套环境(开发/测试/生产)+ 环境差异经 GF_ 环境变量覆盖(不改配置文件)。本节给出环境矩阵、资源配置参考与拓扑。
环境矩阵
| 环境 | 用途 | 后端 | 数据库 | Redis |
|---|---|---|---|---|
| 开发 dev | 本地开发 | go run / bin | 本地 MySQL | 本地 Redis |
| 测试 test | 联调/冒烟 | 独立部署 | 独立库 | 独立实例/db |
| 生产 prod | 对外服务 | 多实例可选 | 主从/云 RDS | 集群/云 Redis |
部署拓扑
text
┌──────────────────────────────────────────┐
│ 生产网络(内网) │
用户 ──443──▶ │ nginx/前置代理(HTTPS 终止 + 静态 + 反代) │
│ │ │
│ ├── admin-server ×N(:8000,优雅重启) │
│ ├── MySQL 主从(或云 RDS) │
│ └── Redis(集群/云,密码强记) │
└──────────────────────────────────────────┘
文件:uploadDir 独立持久卷/共享存储(多实例需共享或对象存储改造)
归属地:manifest/data/ip2region.xdb 随二进制分发环境差异管理(GF_ 覆盖)
sh
# 容器/进程管理器注入环境变量,不改配置文件
GF_DATABASE_DEFAULT_LINK="mysql:user:secret@tcp(db:3306)/easygoadmin?charset=utf8mb4&parseTime=true"
GF_REDIS_DEFAULT_ADDRESS="redis:6379"
GF_JWT_SECRET="prod-only-random-secret"
GF_APP_ERRORMSG="false"原则:同份二进制 + 不同环境变量 = 不同环境;密钥类只走环境变量(不进配置文件/镜像层)。
资源配置参考
| 环境 | CPU | 内存 | 磁盘 | 说明 |
|---|---|---|---|---|
| 开发 | 2 核 | 4 GB | 50 GB | 本机 MySQL/Redis 共享 |
| 测试 | 2 核 | 4 GB | 100 GB | 独立服务 |
| 生产(中小) | 4 核 | 8 GB | 200 GB+ | 单实例 + 数据库独立 |
| 生产(多实例) | 2 核 × N | 4 GB × N | — | Redis 必须可用(限流/锁共享) |
多实例注意事项
text
必须共享 Redis(否则以下能力退化单机语义):
限流计数 / 任务执行锁(job:lock)/ JWT 黑名单 / 在线用户 / 验证码 / 字典缓存
上传目录:多实例需共享存储(NFS/OSS 改造)——两段式 Rename 在共享卷语义下正常
定时任务:策略 2/3 经 Redis 锁互斥(各实例都会 tick,抢锁失败放弃)
数据库连接池:按实例数 × pool 配置核算数据库 max_connections时区与时间
text
app.timezone: "Asia/Shanghai" 应用时区
数据库连接 loc=Local / 服务器时区保持一致
定时任务 cron 按应用时区调度——跨时区部署注意