基于GitOps与Kubernetes的Golang麻将服务器开发实践
项目启动与环境搭建
本系列将基于开源项目 Nanoserver 进行深度重构与生产化改造,目标是构建一个符合现代云原生标准的游戏后端系统。
本地运行环境配置
go version
# go version go1.14.14 darwin/amd64
数据库服务部署(MySQL + Adminer)
使用 Docker Compose 启动数据库及可视化管理工具:docker-compose.mysql.yaml
version: '3.1'
services:
db:
image: mysql
command:
- --default-authentication-plugin=mysql_native_password
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
restart: always
networks:
- backend_net
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
environment:
MYSQL_DATABASE: mahjong_game
MYSQL_ROOT_PASSWORD: securepass123
healthcheck:
test: ['CMD', '/opt/bitnami/scripts/mysql/healthcheck.sh']
interval: 15s
timeout: 5s
retries: 6
adminer:
image: adminer
restart: always
networks:
- backend_net
ports:
- "8080:8080"
volumes:
mysql_data:
driver: local
networks:
backend_net:
driver: bridge
启动命令:
docker-compose -f docker-compose.mysql.yaml up -d
# 停止服务:down
# 查看状态:ps
# 清理数据卷:docker volume rm nanoserver_mysql_data
服务端程序启动
在数据库就绪后,直接运行服务端代码:go run .
首次运行会自动初始化表结构和索引。成功后访问 http://localhost:8080 可查看服务健康状态。
客户端接入与调试
项目已集成调试专用 Android 客户端(mahjong.apk),适用于快速验证逻辑流程。
安卓模拟器安装建议
推荐使用 MuMu 模拟器,支持多开,便于多角色测试。APK 安装与登录问题解决
默认登录失败,原因是客户端配置了远程服务器地址。可通过以下方式修复: - **方案一**:反编译 APK,修改 `appConfig.luac` 中的 IP 地址为本地主机。 - **方案二**:使用 Charles 抓包工具进行请求重定向,实现本地调试。
添加测试渠道账号
在游戏内加入测试渠道konglai,用于身份识别与权限控制。
功能测试:创建并参与对局
- 创建房间 → 设置规则与人数
- 多设备加入房间 → 观察状态同步
- 开始游戏 → 检查出牌、碰杠、胡牌逻辑
- 实时查看服务日志 → 跟踪事件流转
CI/CD 流水线配置(Drone)
采用声明式流水线实现自动化构建与部署:.drone.yml
kind: pipeline
type: kubernetes
name: MahjongServer
steps:
- name: 更新 Helm Chart 版本
image: busybox
commands:
- echo $DRONE_COMMIT
- sed -i "s/APP_VERSION/${DRONE_COMMIT}/g" k8s/mahjong/Chart.yaml
- cat k8s/mahjong/Chart.yaml
- name: 构建生产镜像
image: plugins/docker
settings:
debug: true
dockerfile: Dockerfile.prod
repo: registry.yourcompany.com/mahjong/server
tags: ${DRONE_COMMIT}
registry: registry.yourcompany.com
username:
from_secret: docker_user
password:
from_secret: docker_pass
- name: 部署至 Kubernetes
image: pelotech/drone-helm3
settings:
helm_command: upgrade
chart: ./k8s/mahjong
release: mahjong-cluster
values_yaml: ./k8s/values.yaml
namespace: game
api_server:
from_secret: k8s_api_url
kubernetes_token:
from_secret: k8s_token
skip_tls_verify: true
trigger:
branch:
- main
GitOps 实践:ArgoCD 声明式部署
利用 ArgoCD 实现应用状态的持续同步,确保集群状态与 Git 仓库一致。
通过 Git 作为唯一可信源,实现零手工干预的渐进式发布策略。