当前位置:首页 > 技术 > 正文内容

基于GitOps与Kubernetes的Golang麻将服务器开发实践

访客 技术 2026年7月18日 1

项目启动与环境搭建

本系列将基于开源项目 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 抓包工具进行请求重定向,实现本地调试。
Charles 请求映射示例
通过 Map Remote 功能将远程请求指向本地服务

添加测试渠道账号

在游戏内加入测试渠道 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 仓库一致。
ArgoCD 应用状态概览
实时显示应用同步状态与版本差异

通过 Git 作为唯一可信源,实现零手工干预的渐进式发布策略。

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。