本文档说明当前仓库的环境组织方式、生产环境部署原则、节点部署建议和上线检查项。
当前仓库 etc/profile/ 目录下不存在 prod.json,现有环境文件是:
test.jsonsu.jsonlgy.jsondhc.jsonazw.json_dev.json这意味着当前项目的“生产部署”不是统一依赖一个固定 prod.json,而是按平台或环境拆成独立 profile。部署时应以目标环境对应的 profile 为准,而不是假设存在通用 prod.json。
生产环境部署需要解决四类问题:
master、gate、game、map、center、web。| 文件 | 用途 |
|---|---|
test.json |
测试环境 |
su.json |
SU 环境 |
lgy.json |
LGY 环境 |
dhc.json |
DHC 环境 |
azw.json |
AZW 环境 |
*_dev.json |
对应环境的开发联调版本 |
实际隔离主要依赖以下配置:
| 字段 | 作用 |
|---|---|
env |
环境名 |
cluster.nats.prefix |
集群消息前缀,必须全环境唯一 |
redis[].redis_id |
Redis 实例逻辑名 |
mongo.*[].db_name |
MongoDB 数据库名 |
node.*[].node_id |
节点实例标识 |
示例:
su.json 使用 prefix: "su",数据库名形如 su-f1-gamelgy.json 使用 prefix: "lgy",数据库名形如 lgy-f1-gameazw.json 使用 prefix: "azw",数据库名形如 azw-f1-game仓库没有提供强制规格表,当前建议按节点职责拆分:
| 节点 | 建议 |
|---|---|
master |
单独部署,单实例 |
center |
单独部署,单实例或主备 |
gate |
可多实例,前置负载均衡 |
game |
可多实例,按滚服或区服扩容 |
map |
可多实例,视地图压力扩容 |
web |
可多实例 |
chat |
可多实例 |
record |
按战报写入压力部署 |
ops |
单独控制访问来源 |
最低前提:
Asia/Shanghai仓库实际启动入口是 nodes/main.go,命令形式统一为:
run -path=./etc/profile/<env>.json -node=<node-id>
生产发布前至少执行:
make init
make chmod
make code
如果涉及协议或配置更新,再执行:
make proto
make excel
用途:
部署要求:
redis_id 和 address 保持一致用途:
当前 profile 使用四组逻辑库:
| 分组 | 典型用途 |
|---|---|
db_game_group |
game 数据 |
db_center_group |
center 数据 |
db_map_group |
map 数据 |
要求:
db_name用途:
仓库现有配置均默认:
cluster.discovery.mode = natscluster.nats.master_node_id = master-1因此生产环境必须先保证:
master-1 所在节点可启动。cluster.nats.prefix 与其他环境不冲突。新增一个生产环境时,建议复制最接近的环境文件,例如:
su.json / azw.jsonlgy.json / dhc.json然后只改以下内容:
envcluster.nats.prefixcluster.nats.addressredismongonodelogger不要直接复用别的环境的:
game 节点固定编号这些节点通常只部署一个:
| 节点类型 | 说明 |
|---|---|
master |
服务发现核心节点 |
center |
账户与中心服务 |
ops |
运维入口,建议严格限制访问 |
这些节点通常根据压力扩容:
| 节点类型 | 说明 |
|---|---|
gate |
前置接入,可多实例 |
game |
玩家逻辑,可多实例 |
map |
沙盘地图,可多实例 |
web |
HTTP 服务,可多实例 |
chat |
聊天服务,可多实例 |
record |
战报与记录,可多实例 |
建议按依赖顺序启动:
mastercentergamemapchatrecordgatewebopsgate 和 web 可以放在后面启动,避免外部流量先进入。
以下示例以 su.json 为例:
run -path=./etc/profile/su.json -node=master-1
run -path=./etc/profile/su.json -node=center-1
run -path=./etc/profile/su.json -node=gate-1
run -path=./etc/profile/su.json -node=web-1
run -path=./etc/profile/su.json -node=ops-1
run -path=./etc/profile/su.json -node=3
run -path=./etc/profile/su.json -node=map-1
run -path=./etc/profile/su.json -node=chat-1
run -path=./etc/profile/su.json -node=record-1
注意:
game 节点有的环境是固定数字,如 3、6^\d+$,表示可多开多个 game 实例center、chat、map 在部分环境中也用正则匹配多实例make code
go test ./...
run version
重点检查:
node_id 是否存在etc/data/ 与 internal/data/ 是否已同步建议:
master 之外的非入口节点做验证。gate、web。如果是替换式发布,至少保证:
master 不先于依赖中间件下线gate 切流前,game/map/center 已全部可用上线前保留:
如果本次包含协议、配置或数据结构变更,必须先评估是否可逆,不能把回滚建立在“应该没问题”上。
master-1 能连通 NATSenv 正确cluster.nats.prefix 唯一mongo.db_name 没有串环境redis_id_list、mongo_id_list 与基础配置可对应ref_logger 指向存在的 logger 配置-node 与 profile 匹配gate 和 web 的对外端口未冲突etc/data/ 为目标版本battle_record 存储路径可写db_queue 参数与环境负载匹配结果:
这是高危配置错误,必须先改 cluster.nats.prefix。
game 节点编号写错例如 profile 里写死 node_id = "3",启动时却用了 -node=1,会直接启动失败。
redis 配置本身正确不代表节点能用。真正生效的是 __settings__.redis_id_list 里的映射。
例如把 su 环境写成 lgy-f1-game,服务能启动,但数据会写错库,这类问题比启动失败更危险。
如果后续要补齐真正统一的生产部署能力,优先做两件事:
prod.json 或明确的环境模板。