
今天介绍一款基于H5的商用版棋牌游戏,它支持在个人NAS上通过容器化部署,实现一个完全私有的游戏空间。该游戏无平台监控与操控,旨在提供一个公平公正的游戏环境,并完美支持手机、电脑、Pad等设备,只要设备带有浏览器即可畅玩。

温馨提示:建议部署新手严格遵循教程步骤,先确保服务在局域网内正常运行,暂时不要急于修改复杂的配置或配置外网访问。
准备工作
首先,访问该项目的GitHub仓库地址下载项目文件:https://github.com/openinggame/qp

在您的NAS上创建一个名为openinggame的文件夹,并将下载好的ZIP压缩包放入其中。

解压ZIP文件,清理不必要的文件,最终只保留以下三个文件即可。

接着,解压上面两个tar.gz压缩包,并将文件整理成如下结构。mongo_data和mysql文件夹内应包含解压后的数据文件。

mongo_data文件夹内部示例

mysql文件夹内部示例

安装与配置部署
在NAS的容器管理界面(如Docker/Portainer)中创建新项目,选择上面准备好的openinggame目录作为项目路径,并导入docker-compose.yml文件模板。

原始提供的模板较为复杂,我们可以使用一个简化过的版本。下方是一个优化后的docker-compose.yml配置示例,您只需将API_HOST环境变量的值修改为您NAS在局域网中的实际IP地址即可。
services:
web:
container_name: web0
image: openinggame/web:v1
ports:
- "8080:80"
environment:
- API_HOST=192.168.31.90 # 请修改为你的NAS IP
depends_on:
- server
server:
container_name: server0
image: openinggame/server:v1
ports:
- "81:81"
depends_on:
- etcd
- kafka
- redis1
- mysql
- mongodb
mysql:
image: mysql:8.0.23
container_name: mysql0
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: root
volumes:
- ./mysql:/var/lib/mysql
- ./mysqlconf:/etc/mysql/conf.d
redis0:
container_name: redis0
image: redis:latest
volumes:
- ./redisdata0:/data
command: redis-server --requirepass 123456
depends_on:
- etcd
redis1:
container_name: redis1
image: redis:latest
volumes:
- ./redisdata1:/data
command: redis-server --requirepass 123456
depends_on:
- etcd
redis2:
container_name: redis2
image: redis:latest
volumes:
- ./redisdata2:/data
command: redis-server --requirepass 123456
depends_on:
- mysql
- etcd
- redis1
zookeeper:
container_name: zookeeper
image: wurstmeister/zookeeper
restart: always
kafka:
container_name: kafka0
image: wurstmeister/kafka:2.12-2.3.0
environment:
- KAFKA_BROKER_ID=0
- KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181
- KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka0:9092
- KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092
volumes:
- /var/run/docker.sock:/var/run/docker.sock
restart: always
depends_on:
- zookeeper
etcd:
image: quay.io/coreos/etcd:v3.2.32
container_name: etcd0
environment:
ETCDCTL_API: 3
command:
- etcd
- --name=etcd0
- --data-dir=/data/etcd-data
- --advertise-client-urls=http://etcd0:2379
- --listen-client-urls=http://0.0.0.0:2379
restart: always
volumes:
- ./etcd0_data:/etcd-data
mongodb:
container_name: mongodb0
image: mongo:4.4.4
restart: always
volumes:
- ./mongo_data:/data/db
- ./mongodb_logs:/data/logs
command: --auth
depends_on:
- etcd
配置完成后,启动项目。正常情况下,所有相关的容器(包括Web前端、游戏服务器、MySQL数据库、多个Redis缓存实例、Kafka消息队列、MongoDB、etcd和Zookeeper)都应该成功启动并运行。

使用体验
部署成功后,在浏览器中输入 http://你的NAS的IP:8080 即可访问游戏主界面。

服务刚启动时,界面可能短暂显示“不可用”,请稍等片刻(或尝试重启整个Docker项目)即可恢复正常。

加载完成后,点击“游客登录”。

跳转后页面可能会出现弹窗广告,无需关闭,直接点击下方的“注册”按钮。

在注册页面,可以随意输入一个11位数字作为手机号(注意首位需要是数字1),然后填写其他信息完成账号绑定,即可登录。

登录后即可进入游戏大厅,游戏种类相当丰富,包括斗地主、麻将等多种棋牌游戏。

以斗地主为例,可以根据底分选择不同的游戏分区。

游戏体验与常见平台一致,支持与AI对战,提供出牌提示、聊天对话等功能。

AI对手的智能水平尚可。需要注意的是,该系统似乎缺少后台管理功能,如果游戏积分不足,可能需要重新注册账号。

若想与朋友一同游戏,可以创建私人房间。

私人房间内的游戏操作与常规模式无异。

该游戏同样完美适配手机浏览器,打开相同网址即可获得良好的移动端体验。

在资源占用方面,整套服务运行起来后,内存占用会相对多一些,这是由多个后端服务(数据库、缓存、消息队列等)共同决定的。

总结
这款H5棋牌游戏项目虽然已经有一段时间未更新,但通过Docker Compose在NAS上部署后,整体运行稳定。对于朋友间组队娱乐而言,体验不错,网页即点即玩的特性非常方便。主要不足之处在于缺乏后台管理系统,积分机制触发后可能需要重新注册账号。
综合推荐:⭐⭐⭐(适合与朋友在私有环境中娱乐)
使用体验:⭐⭐⭐(跨设备、免安装,访问便捷)
部署难度:⭐⭐⭐(流程清晰,但涉及多个容器,需要一定基础)