mirror of
https://github.com/tiennm99/gomoku.git
synced 2026-09-20 04:23:33 +00:00
feat: add ratel-online server, core, client, and api sources
Import source files from ratel-online organization repos into monorepo structure for gomoku game development. Update README with project structure and credits for original authors.
This commit is contained in:
1 parent
ee7edaf727
commit
6e3670aec8
121 files changed
+11204
-1
No files matched your search
@@ -0,0 +1,323 @@
|
||||
# Ratel游戏服务器 Docker 部署指南
|
||||
|
||||
## 项目概述
|
||||
|
||||
Ratel是一个命令行在线多人棋牌游戏服务器,支持斗地主、跑得快、德州扑克等多种游戏模式。本文档提供了使用Docker和Docker Compose进行部署的完整方案。
|
||||
|
||||
### 系统架构
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
A[用户] -->|TCP:9999| B[Ratel Server]
|
||||
A -->|WebSocket:9998| B
|
||||
B --> C[内存数据库]
|
||||
B --> D[游戏逻辑]
|
||||
D --> E[斗地主]
|
||||
D --> F[跑得快]
|
||||
D --> G[德州扑克]
|
||||
D --> H[UNO]
|
||||
D --> I[麻将]
|
||||
```
|
||||
|
||||
## 快速开始
|
||||
|
||||
### 前置要求
|
||||
|
||||
- Docker 20.10+
|
||||
- Docker Compose 2.0+ 或 Docker 20.10+(内置 compose 插件)
|
||||
- Git
|
||||
|
||||
> 注意:新版 Docker 已内置 compose 插件,可以使用 `docker compose` 命令。Makefile 会自动检测并使用可用的命令。
|
||||
|
||||
### 快速部署
|
||||
|
||||
1. 克隆项目
|
||||
```bash
|
||||
git clone https://github.com/ratel-online/server.git
|
||||
cd server
|
||||
```
|
||||
|
||||
2. 构建并启动服务
|
||||
```bash
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
3. 查看服务状态
|
||||
```bash
|
||||
docker-compose ps
|
||||
docker-compose logs -f
|
||||
```
|
||||
|
||||
4. 停止服务
|
||||
```bash
|
||||
docker-compose down
|
||||
```
|
||||
|
||||
## 部署方案详解
|
||||
|
||||
### 1. Dockerfile 说明
|
||||
|
||||
项目使用多阶段构建优化镜像大小:
|
||||
|
||||
- **构建阶段**:使用 `golang:1.17-alpine` 作为基础镜像编译Go应用
|
||||
- **运行阶段**:使用 `alpine:latest` 作为最终镜像,只包含必要的运行时依赖
|
||||
|
||||
主要特性:
|
||||
- 多阶段构建减小镜像体积
|
||||
- 使用非root用户运行提高安全性
|
||||
- 配置健康检查确保服务可用性
|
||||
- 设置时区为 Asia/Shanghai
|
||||
|
||||
### 2. Docker Compose 配置
|
||||
|
||||
提供了两个配置文件:
|
||||
|
||||
#### docker-compose.yaml(开发环境)
|
||||
- 本地构建镜像
|
||||
- 资源限制较宽松
|
||||
- 适合开发测试使用
|
||||
|
||||
#### docker-compose.prod.yaml(生产环境)
|
||||
- 使用预构建镜像
|
||||
- 严格的资源限制
|
||||
- 包含Nginx反向代理
|
||||
- 日志持久化配置
|
||||
|
||||
### 3. 端口说明
|
||||
|
||||
| 端口 | 协议 | 用途 |
|
||||
|------|------|------|
|
||||
| 9998 | WebSocket | 浏览器客户端连接 |
|
||||
| 9999 | TCP | 命令行客户端连接 |
|
||||
| 80 | HTTP | Nginx反向代理(可选) |
|
||||
| 443 | HTTPS | Nginx SSL(可选) |
|
||||
|
||||
## 生产环境部署
|
||||
|
||||
### 1. 构建生产镜像
|
||||
|
||||
```bash
|
||||
# 构建镜像
|
||||
docker build -t ratel-server:latest .
|
||||
|
||||
# 或者使用特定版本标签
|
||||
docker build -t ratel-server:v1.0.0 .
|
||||
```
|
||||
|
||||
### 2. 使用生产配置启动
|
||||
|
||||
```bash
|
||||
# 使用生产环境配置
|
||||
docker-compose -f docker-compose.prod.yaml up -d
|
||||
```
|
||||
|
||||
### 3. 配置SSL证书(可选)
|
||||
|
||||
如果需要HTTPS支持:
|
||||
|
||||
```bash
|
||||
# 创建SSL证书目录
|
||||
mkdir -p nginx/ssl
|
||||
|
||||
# 将证书文件复制到目录
|
||||
cp your-cert.pem nginx/ssl/cert.pem
|
||||
cp your-key.pem nginx/ssl/key.pem
|
||||
|
||||
# 修改nginx/nginx.conf,启用HTTPS配置
|
||||
# 然后重启nginx服务
|
||||
docker-compose -f docker-compose.prod.yaml restart nginx
|
||||
```
|
||||
|
||||
### 4. 日志管理
|
||||
|
||||
日志文件会保存在 `./logs` 目录:
|
||||
|
||||
```bash
|
||||
# 查看实时日志
|
||||
docker-compose -f docker-compose.prod.yaml logs -f ratel-server
|
||||
|
||||
# 查看最近100行日志
|
||||
docker-compose -f docker-compose.prod.yaml logs --tail=100 ratel-server
|
||||
```
|
||||
|
||||
## 性能优化
|
||||
|
||||
### 1. 资源配置
|
||||
|
||||
根据服务器配置调整资源限制:
|
||||
|
||||
```yaml
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
cpus: '4' # 最大CPU核心数
|
||||
memory: 1G # 最大内存
|
||||
reservations:
|
||||
cpus: '1' # 保留CPU核心数
|
||||
memory: 256M # 保留内存
|
||||
```
|
||||
|
||||
### 2. 并发连接优化
|
||||
|
||||
对于高并发场景,可以调整系统参数:
|
||||
|
||||
```bash
|
||||
# 增加文件描述符限制
|
||||
echo "* soft nofile 65535" >> /etc/security/limits.conf
|
||||
echo "* hard nofile 65535" >> /etc/security/limits.conf
|
||||
|
||||
# 优化TCP参数
|
||||
sysctl -w net.core.somaxconn=65535
|
||||
sysctl -w net.ipv4.tcp_max_syn_backlog=65535
|
||||
```
|
||||
|
||||
## 监控和维护
|
||||
|
||||
### 1. 健康检查
|
||||
|
||||
服务配置了自动健康检查:
|
||||
|
||||
```bash
|
||||
# 手动检查服务健康状态
|
||||
docker-compose -f docker-compose.prod.yaml exec ratel-server nc -z localhost 9998
|
||||
```
|
||||
|
||||
### 2. 备份策略
|
||||
|
||||
由于游戏数据存储在内存中,重启会丢失数据。如需持久化,建议:
|
||||
|
||||
1. 定期导出游戏状态(需要修改代码支持)
|
||||
2. 使用外部数据库存储关键数据
|
||||
3. 实现分布式缓存方案
|
||||
|
||||
### 3. 更新部署
|
||||
|
||||
```bash
|
||||
# 拉取最新代码
|
||||
git pull
|
||||
|
||||
# 重新构建镜像
|
||||
docker-compose -f docker-compose.prod.yaml build
|
||||
|
||||
# 滚动更新
|
||||
docker-compose -f docker-compose.prod.yaml up -d --no-deps --build ratel-server
|
||||
```
|
||||
|
||||
## 故障排查
|
||||
|
||||
### 常见问题
|
||||
|
||||
1. **端口被占用**
|
||||
```bash
|
||||
# 检查端口占用
|
||||
netstat -tlnp | grep -E '9998|9999'
|
||||
|
||||
# 修改docker-compose.yaml中的端口映射
|
||||
ports:
|
||||
- "19998:9998" # 使用其他端口
|
||||
- "19999:9999"
|
||||
```
|
||||
|
||||
2. **容器无法启动**
|
||||
```bash
|
||||
# 查看容器日志
|
||||
docker-compose logs ratel-server
|
||||
|
||||
# 检查容器状态
|
||||
docker ps -a
|
||||
```
|
||||
|
||||
3. **连接超时**
|
||||
- 检查防火墙规则
|
||||
- 确认Docker网络配置
|
||||
- 验证健康检查状态
|
||||
|
||||
### 调试模式
|
||||
|
||||
```bash
|
||||
# 进入容器调试
|
||||
docker-compose exec ratel-server sh
|
||||
|
||||
# 查看进程状态
|
||||
ps aux
|
||||
|
||||
# 测试网络连接
|
||||
nc -zv localhost 9998
|
||||
nc -zv localhost 9999
|
||||
```
|
||||
|
||||
## 安全建议
|
||||
|
||||
1. **网络隔离**
|
||||
- 使用专用网络避免容器间不必要的通信
|
||||
- 限制外部访问,只暴露必要端口
|
||||
|
||||
2. **用户权限**
|
||||
- 容器内使用非root用户运行
|
||||
- 限制文件系统权限
|
||||
|
||||
3. **资源限制**
|
||||
- 设置CPU和内存限制防止资源耗尽
|
||||
- 配置日志轮转避免磁盘占满
|
||||
|
||||
4. **定期更新**
|
||||
- 及时更新基础镜像
|
||||
- 关注安全公告
|
||||
|
||||
## 扩展部署
|
||||
|
||||
### 1. Kubernetes 部署
|
||||
|
||||
可以基于Docker镜像创建Kubernetes部署:
|
||||
|
||||
```yaml
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: ratel-server
|
||||
spec:
|
||||
replicas: 3
|
||||
selector:
|
||||
matchLabels:
|
||||
app: ratel-server
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: ratel-server
|
||||
spec:
|
||||
containers:
|
||||
- name: ratel-server
|
||||
image: ratel-server:latest
|
||||
ports:
|
||||
- containerPort: 9998
|
||||
- containerPort: 9999
|
||||
```
|
||||
|
||||
### 2. Docker Swarm 部署
|
||||
|
||||
```bash
|
||||
# 初始化Swarm
|
||||
docker swarm init
|
||||
|
||||
# 部署服务栈
|
||||
docker stack deploy -c docker-compose.prod.yaml ratel
|
||||
```
|
||||
|
||||
## 总结
|
||||
|
||||
本部署方案提供了完整的Docker化部署流程,包括:
|
||||
|
||||
- ✅ 多阶段构建优化镜像大小
|
||||
- ✅ 开发和生产环境配置分离
|
||||
- ✅ 健康检查和自动重启
|
||||
- ✅ 日志管理和资源限制
|
||||
- ✅ 可选的Nginx反向代理
|
||||
- ✅ 安全最佳实践
|
||||
|
||||
通过Docker部署可以实现:
|
||||
- 快速部署和迁移
|
||||
- 环境一致性保证
|
||||
- 便捷的扩容和管理
|
||||
- 与CI/CD流程集成
|
||||
|
||||
如有问题或需要进一步的帮助,请参考项目的GitHub Issues或联系开发团队。
|
||||
@@ -0,0 +1,85 @@
|
||||
# Ratel游戏服务器 - 快速开始
|
||||
|
||||
## 一分钟部署
|
||||
|
||||
### 1. 克隆项目
|
||||
```bash
|
||||
git clone https://github.com/ratel-online/server.git
|
||||
cd server
|
||||
```
|
||||
|
||||
### 2. 启动服务
|
||||
```bash
|
||||
# 使用 Make 命令(推荐,自动检测 docker-compose 或 docker compose)
|
||||
make run
|
||||
|
||||
# 或手动使用 Docker Compose
|
||||
docker compose up -d # 新版 Docker
|
||||
# 或
|
||||
docker-compose up -d # 独立安装的 docker-compose
|
||||
```
|
||||
|
||||
### 3. 访问服务
|
||||
- WebSocket客户端:ws://localhost:9998
|
||||
- TCP客户端:localhost:9999
|
||||
- 浏览器访问:http://ratel.isnico.com/
|
||||
|
||||
## 常用命令
|
||||
|
||||
| 命令 | 说明 |
|
||||
|------|------|
|
||||
| `make run` | 启动服务 |
|
||||
| `make stop` | 停止服务 |
|
||||
| `make logs` | 查看日志 |
|
||||
| `make shell` | 进入容器 |
|
||||
| `make test` | 测试连接 |
|
||||
|
||||
## 客户端连接
|
||||
|
||||
### 浏览器客户端
|
||||
直接访问:http://ratel.isnico.com/
|
||||
|
||||
### 命令行客户端
|
||||
下载地址:https://github.com/ratel-online/client/releases
|
||||
|
||||
```bash
|
||||
# 连接本地服务器
|
||||
./ratel-client -h localhost -p 9999
|
||||
```
|
||||
|
||||
## 游戏指令
|
||||
|
||||
### 全局指令
|
||||
- `v` - 查看房间列表/房间成员
|
||||
- `e` - 退出/返回
|
||||
|
||||
### 房间指令
|
||||
- `s` - 开始游戏
|
||||
- `set lz on` - 开启癞子模式
|
||||
- `set sk on` - 开启技能模式
|
||||
|
||||
### 游戏指令
|
||||
- 直接输入牌型,如:`334455`(连对)
|
||||
- `p` - 不出/过牌
|
||||
|
||||
## 故障排查
|
||||
|
||||
### 端口被占用
|
||||
```bash
|
||||
# 修改端口映射
|
||||
export WSPORT=19998
|
||||
export TCPPORT=19999
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
### 查看服务状态
|
||||
```bash
|
||||
docker ps
|
||||
docker logs ratel-server
|
||||
```
|
||||
|
||||
## 了解更多
|
||||
|
||||
- 详细部署文档:[Docker部署指南](./Docker部署指南.md)
|
||||
- 项目主页:https://github.com/ratel-online/server
|
||||
- QQ群:948365095
|
||||
Reference in new issue
Block a user