返回首页

初始化仓库指南

FastAPI Jinja2 Kubernetes GitOps 配置生成必知必会

可视化生成平台

🎨
用户界面层 - 配置输入
项目选择页面
多项目支持,动态项目卡片展示
配置表单
环境配置、服务参数、域名设置
预览界面
YAML 预览、变更对比、部署确认
API 服务层 - 业务逻辑
FastAPI 路由
RESTful API,数据验证和错误处理
配置处理
环境差异处理、生产环境限制
文件操作
模板读取、文件写入、目录管理
🔧
模板引擎层 - 配置生成
Jinja2 模板
动态 YAML 生成,条件渲染,循环处理
Kustomize 配置
资源组合、补丁应用、镜像替换
ConfigMap 生成
服务配置、环境变量、挂载配置
📚
Git 版本控制层 - 配置仓库
仓库克隆
动态克隆项目部署仓库到本地
变更检测
文件差异对比、新增/修改标识
自动推送
提交变更、拉取合并、推送到远程
☸️
Kubernetes 部署层 - 服务运行
ArgoCD 同步
GitOps 自动同步,配置变更检测
Kustomize 构建
资源清单生成、环境差异应用
集群部署
Pod 创建、服务暴露、存储挂载

目录结构详解

Directory Structure
├── app.py # 主应用入口 - FastAPI服务器 ├── config.py # 系统配置 - Git/项目/副本配置 ├── logger.py # 日志模块 - 统一日志处理 ├── requirements.txt # Python依赖包 ├── static/ │ └── style.css # 前端样式文件 ├── template/ # HTML模板目录 │ ├── index.html # 项目选择首页 │ ├── p07/config.html # P07项目配置页面 │ ├── p08/config.html # P08项目配置页面 │ ├── p09/config.html # P09项目配置页面 │ └── i02/config.html # I02项目配置页面 └── jinja2-template/ # Kubernetes模板目录 ├── p07/ # P07项目K8s模板 ├── p08/ # P08项目K8s模板 ├── p09/ # P09项目K8s模板 └── i02/ # I02项目K8s模板 ├── cm.yaml # ConfigMap - 服务配置 ├── deploy-patch.yaml # Deployment补丁 ├── game-conf.yaml # COS存储配置 ├── ingress.yaml # Ingress网关配置 ├── kustomization.yaml # Kustomize主配置 ├── namespace.yaml # 命名空间定义 ├── redis.yaml # Redis服务(可选) ├── mysql.yaml # MySQL服务(可选) ├── faketime-config.yaml # 时间修改配置(可选) └── containers-patchs.json # 容器补丁(可选)

核心文件说明

文件路径 作用 必需性 修改频率
app.py 主应用逻辑,路由定义,Git操作 必需
config.py 系统配置,Git凭据,项目列表 必需
jinja2-template/{项目}/cm.yaml 服务配置模板,最复杂的配置文件 必需
template/{项目}/config.html 项目配置界面,表单定义 必需

系统使用流程

选择项目
填写配置
预览YAML
确认部署
Git推送

详细操作步骤

1. 访问系统首页

URL
http://localhost:8000

首页展示所有可用项目卡片,点击对应项目进入配置页面。

2. 填写项目配置

配置页面包含以下主要部分:

3. 预览生成配置

点击"预览配置"按钮,系统会:

4. 执行部署操作

点击"部署配置"按钮,系统执行:

Python
# 1. 克隆Git仓库 repo_url = f'https://{username}:{password}@{git_host}/{project}-deploy.git' repo = git.Repo.clone_from(repo_url, local_path) # 2. 渲染并写入配置文件 env_dir = f'{local_path}/overlays/{env}' render_templates(env_dir, template_files, variables) # 3. 检测文件变更 changes = get_git_changes(local_path) # 4. 显示变更预览和部署检查项

5. 确认并推送

用户确认后,系统执行Git操作:

Bash
git add . git commit -m "Update {project} {env} configuration" git pull --rebase origin main git push origin main

配置参数详解

系统配置 (config.py)

Python
# Git仓库配置 GIT_CONFIG = { "username": "root", # Git用户名 "password": "<password>", # Git密码(Base64编码) "base_url": "p-deploy-git.<domain2>/root" # Git服务器地址 } # 副本数配置 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', # ConfigMap配置(必需) 'deploy-patch.yaml', # Deployment补丁(必需) 'game-conf.yaml', # 游戏配置(必需) 'ingress.yaml', # Ingress配置(必需) 'kustomization.yaml', # Kustomize配置(必需) '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: 创建模板目录

Bash
# 创建新项目模板目录 mkdir jinja2-template/p10 # 复制现有项目模板(推荐复制p09) cp -r jinja2-template/p09/* jinja2-template/p10/

步骤2: 修改系统配置

Python
# 编辑 config.py PROJECTS = ["p06", "p07", "p08", "p09", "i02", "p10"] # 添加新项目

步骤3: 创建配置页面

Bash
# 创建HTML配置页面目录 mkdir template/p10 # 复制配置页面模板 cp template/p09/config.html template/p10/config.html # 修改页面标题和项目特定配置 sed -i 's/P09游戏服务器配置管理/P10游戏服务器配置管理/g' template/p10/config.html

步骤4: 更新首页项目卡片

HTML
<!-- 在 template/index.html 中添加 --> <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: 修改模板配置

根据新项目需求修改以下关键文件:

项目差异对比

项目 架构特点 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

快速启动

Bash
# 1. 安装Python依赖 pip install -r requirements.txt # 2. 修改Git配置 vim config.py # 3. 启动服务 python app.py # 4. 访问系统 curl http://localhost:8000

生产环境部署

Bash
# 使用Docker部署(推荐) docker build -t game-config-mgmt . docker run -d -p 8000:8000 \ -v $(pwd)/logs:/app/logs \ --name game-config \ game-config-mgmt # 使用systemd部署 sudo cp game-config.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable game-config sudo systemctl start game-config

域名自动填充规则

JavaScript
// 域名生成逻辑 (template/*/config.html) 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推送失败

Bash
# 检查Git配置 git config --list # 测试Git连接 git ls-remote https://your-git-host/project-deploy.git # 检查权限 curl -u username:password https://your-git-host/api/v4/projects

解决方案:检查 config.py 中的Git配置、确认网络连接、验证仓库权限。

模板渲染错误

Python
# 常见错误: UndefinedError jinja2.exceptions.UndefinedError: 'dict object' has no attribute 'xxx' # 检查模板变量 grep -r "{{ variable_name }}" jinja2-template/ # 验证变量传递 print(json.dumps(variables, indent=2))

解决方案:检查模板中的变量名称、确认前端表单字段映射、验证数据结构完整性。

部署失败

Bash
# 检查K8s集群状态 kubectl cluster-info kubectl get nodes # 检查存储插件 kubectl get storageclass kubectl get csidriver # 检查镜像拉取 kubectl describe pod <pod-name>

日志分析

Bash
# 查看应用日志 tail -f logs/game_config.log # 过滤错误日志 grep "ERROR" logs/game_config.log # 查看Git操作日志 grep "Git operation" logs/game_config.log

调试模式

Python
# 启用详细日志 (logger.py) logger.setLevel(logging.DEBUG) # 添加调试信息 logger.debug(f"Template variables: {variables}") logger.debug(f"Rendered content: {rendered_content}")

配置示例

典型开发环境配置

JSON
{ "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" } }

生产环境配置

JSON
{ "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示例

YAML
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仓库