# 11.2 环境规划 :::tip 概述 推荐三套环境(开发/测试/生产)+ 环境差异经 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 按应用时区调度——跨时区部署注意 ```