目录结构详解
├── app.py
├── config.py
├── logger.py
├── requirements.txt
├── static/
│ └── style.css
├── template/
│ ├── index.html
│ ├── p07/config.html
│ ├── p08/config.html
│ ├── p09/config.html
│ └── i02/config.html
└── jinja2-template/
├── p07/
├── p08/
├── p09/
└── i02/
├── cm.yaml
├── deploy-patch.yaml
├── game-conf.yaml
├── ingress.yaml
├── kustomization.yaml
├── namespace.yaml
├── redis.yaml
├── mysql.yaml
├── faketime-config.yaml
└── containers-patchs.json
核心文件说明
| 文件路径 |
作用 |
必需性 |
修改频率 |
| app.py |
主应用逻辑,路由定义,Git操作 |
必需 |
低 |
| config.py |
系统配置,Git凭据,项目列表 |
必需 |
中 |
| jinja2-template/{项目}/cm.yaml |
服务配置模板,最复杂的配置文件 |
必需 |
高 |
| template/{项目}/config.html |
项目配置界面,表单定义 |
必需 |
中 |
系统使用流程
选择项目
→
填写配置
→
预览YAML
→
确认部署
→
Git推送
详细操作步骤
1. 访问系统首页
首页展示所有可用项目卡片,点击对应项目进入配置页面。
2. 填写项目配置
配置页面包含以下主要部分:
- 项目信息:项目名、环境名(dev33/uat/prod)
- 基本配置:Debug模式、日志级别、Trace开关
- 服务配置:Redis/MySQL连接信息
- 域名配置:Gateway、Login、GM API等域名
- 部署配置:副本模式、版本标签、挂载路径
3. 预览生成配置
点击"预览配置"按钮,系统会:
- 验证表单数据完整性
- 使用Jinja2渲染模板
- 显示生成的YAML文件内容
- 检查生产环境限制(Debug强制关闭等)
4. 执行部署操作
点击"部署配置"按钮,系统执行:
repo_url = f'https://{username}:{password}@{git_host}/{project}-deploy.git'
repo = git.Repo.clone_from(repo_url, local_path)
env_dir = f'{local_path}/overlays/{env}'
render_templates(env_dir, template_files, variables)
changes = get_git_changes(local_path)
5. 确认并推送
用户确认后,系统执行Git操作:
git add .
git commit -m "Update {project} {env} configuration"
git pull --rebase origin main
git push origin main
配置参数详解
系统配置 (config.py)
GIT_CONFIG = {
"username": "root",
"password": "<password>",
"base_url": "p-deploy-git.<domain2>/root"
}
REPLICAS_CONFIG = {
"prod": {"game": 3, "gateway": 2, "login": 2},
"dev": {"game": 1, "gateway": 1, "login": 1}
}
PROJECTS = ["p06", "p07", "p08", "p09", "i02"]
BASE_TEMPLATES = [
'cm.yaml',
'deploy-patch.yaml',
'game-conf.yaml',
'ingress.yaml',
'kustomization.yaml',
'namespace.yaml'
]
环境变量映射
| 前端字段 |
模板变量 |
用途 |
示例值 |
| 项目名 |
{{ project }} |
项目标识 |
p09 |
| 环境名 |
{{ env }} |
环境标识 |
dev33 |
| Redis地址 |
{{ redis.redis_address }} |
Redis连接地址 |
redis-service |
| 数据库密码 |
{{ db.db_pwd }} |
MySQL连接密码 |
your_password |
| Gateway域名 |
{{ domains.gateway_domain }} |
网关服务域名 |
p09-gw-dev33.<domain1> |
重要提示
生产环境会自动应用安全限制:Debug强制关闭、禁用内置Redis/MySQL、副本数自动设为生产模式。
项目管理指南
添加新项目完整流程
步骤1: 创建模板目录
mkdir jinja2-template/p10
cp -r jinja2-template/p09/* jinja2-template/p10/
步骤2: 修改系统配置
PROJECTS = ["p06", "p07", "p08", "p09", "i02", "p10"]
步骤3: 创建配置页面
mkdir template/p10
cp template/p09/config.html template/p10/config.html
sed -i 's/P09游戏服务器配置管理/P10游戏服务器配置管理/g' template/p10/config.html
步骤4: 更新首页项目卡片
<div class="project-card" onclick="window.location.href='/p10/config'">
<h2>P10 项目配置</h2>
<div class="project-info">
新项目描述
</div>
<div class="project-features">
<span class="feature-tag">小服</span>
</div>
<span class="project-status status-active">运行中</span>
</div>
步骤5: 修改模板配置
根据新项目需求修改以下关键文件:
- cm.yaml - 服务配置、域名、数据库等
- kustomization.yaml - 镜像地址、基础资源
- deploy-patch.yaml - 部署规格、副本数
项目差异对比
| 项目 |
架构特点 |
Ingress类 |
特殊服务 |
容器类型 |
| P07 |
传统架构 |
nginx |
屏蔽字配置 |
Deployment |
| P08 |
优化架构 |
nginx |
提审服配置 |
Deployment |
| P09 |
微服务架构 |
higress |
房间服务、帧同步 |
GameServerSet |
| I02 |
轻量架构 |
higress |
录像服务 |
GameServerSet |
部署指南
环境准备清单
部署前必须确认
- K8s集群已安装COS插件 (Tencent Cloud Object Storage)
- K8s集群已安装CFS存储类 (Cloud File Storage)
- Ingress Controller已部署且配置正确
- ArgoCD已安装并配置Git仓库权限
- 域名已正确解析到Ingress LoadBalancer
快速启动
pip install -r requirements.txt
vim config.py
python app.py
curl http://localhost:8000
生产环境部署
docker build -t game-config-mgmt .
docker run -d -p 8000:8000 \
-v $(pwd)/logs:/app/logs \
--name game-config \
game-config-mgmt
sudo cp game-config.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable game-config
sudo systemctl start game-config
域名自动填充规则
if (project && env) {
const envSuffix = env.includes('dev') ? env.replace(/dev/i, '') : '';
const envPrefix = env.includes('dev') ? 'dev' : env;
gateway_domain = `${project}-gw-${envPrefix}${envSuffix}.<domain1>`;
login_domain = `${project}-login-${envPrefix}${envSuffix}.<domain1>`;
gmapi_domain = `${project}-gmapi-${envPrefix}${envSuffix}.<domain1>`;
pay_domain = `${project}-pay-${envPrefix}${envSuffix}.<domain1>`;
sdk_domain = `cpsdk-${project}-ltcs.<domain2>`;
}
故障排除
常见问题诊断
Git推送失败
git config --list
git ls-remote https://your-git-host/project-deploy.git
curl -u username:password https://your-git-host/api/v4/projects
解决方案:检查 config.py 中的Git配置、确认网络连接、验证仓库权限。
模板渲染错误
jinja2.exceptions.UndefinedError: 'dict object' has no attribute 'xxx'
grep -r "{{ variable_name }}" jinja2-template/
print(json.dumps(variables, indent=2))
解决方案:检查模板中的变量名称、确认前端表单字段映射、验证数据结构完整性。
部署失败
kubectl cluster-info
kubectl get nodes
kubectl get storageclass
kubectl get csidriver
kubectl describe pod <pod-name>
日志分析
tail -f logs/game_config.log
grep "ERROR" logs/game_config.log
grep "Git operation" logs/game_config.log
调试模式
logger.setLevel(logging.DEBUG)
logger.debug(f"Template variables: {variables}")
logger.debug(f"Rendered content: {rendered_content}")
配置示例
典型开发环境配置
{
"project": "p09",
"env": "dev33",
"debug": "true",
"loglevel": "debug",
"trace": "false",
"redis": {
"built_in_redis": true,
"redis_address": "redis-service",
"redis_password": "dev_redis_pass"
},
"db": {
"built_in_mysql": true,
"db_host": "mysql-service",
"db_pwd": "dev_mysql_pass",
"dbname_prefix": "p09_dev33",
"autosync": true
},
"domains": {
"gateway_domain": "p09-gw-dev33.<domain1>",
"login_domain": "p09-login-dev33.<domain1>",
"gmapi_domain": "p09-gmapi-dev33.<domain1>"
},
"deployment": {
"replicas_model": "dev",
"tag": "dev-latest",
"path": "/gforge-data/p09/dev"
}
}
生产环境配置
{
"project": "p09",
"env": "prod",
"debug": "false",
"loglevel": "notice",
"trace": "false",
"redis": {
"built_in_redis": false,
"redis_address": "prod-redis.internal",
"redis_password": "***"
},
"db": {
"built_in_mysql": false,
"db_host": "prod-mysql.internal",
"db_pwd": "***",
"dbname_prefix": "p09_prod",
"autosync": false
},
"domains": {
"gateway_domain": "p09-gw-prod.<domain1>",
"login_domain": "p09-login-prod.<domain1>"
},
"deployment": {
"replicas_model": "prod",
"tag": "rel-1.2.0.20241220",
"path": "/gforge-data/p09/prod-alpha3"
}
}
生成的Kustomization示例
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base-okg
- ../../base-okg/gforge-room
- ../../base-okg/gforge-fsync
- namespace.yaml
- cm.yaml
- game-conf.yaml
- ingress.yaml
patches:
- path: deploy-patch.yaml
images:
- name: p-harbor.<domain2>/gforge/p09-gforge-game-service
newTag: rel-1.2.0.20241220
- name: p-harbor.<domain2>/gforge/p09-gforge-gateway-service
newTag: rel-1.2.0.20241220
最佳实践
- 开发环境使用内置服务,生产环境使用外部服务
- 版本标签使用语义化版本控制
- 生产环境务必关闭Debug和Trace
- 定期备份配置模板和Git仓库