forked from sundayzsy/Dota2-DaLuanDou-Server
This branch is 68 commits behind sundayzsy/Dota2-DaLuanDou-Server:master
刀塔大乱斗 后端服务(第一版)
基于 Go + Gin + GORM + MySQL + Redis 实现的轻量后端,只负责按 SteamID 存取玩家档案、记录每局比赛并持久化段位分。段位积分由游戏端算好,后端只存。
第一版只实现两个核心接口:
| 接口 | 路径 | 说明 |
|---|---|---|
| 开局拉档案 | POST /api/v13/game/start |
按 steamID 批量返回玩家档案,未知玩家不返回(游戏端兜底) |
| 结算上报 | POST /api/v13/game/end |
写比赛+战绩,更新段位分/统计,更新 Redis 排行榜 |
次要接口(rank/toplist)与可选接口(herowinrate/query)暂未实现。
目录结构
.
├── main.go # 启动、路由
├── internal/
│ ├── config/config.go # 环境变量配置
│ ├── db/db.go # MySQL(GORM) + Redis 初始化、AutoMigrate
│ ├── model/model.go # Player / SeasonRank / Match / MatchPlayer
│ ├── common/
│ │ ├── response.go # 统一响应 {status, status_code:"200", data}
│ │ └── tier.go # 段位积分 -> tier 换算
│ ├── middleware/auth.go # Dedicated-Server-Key 固定 token 校验(可开关)
│ └── handler/
│ ├── game_start.go # v13/game/start
│ └── game_end.go # v13/game/end
├── .env.example # 配置模板
└── .env # 真实配置(已 gitignore)
配置
复制 .env.example 为 .env 并填写。关键项:
DB_*:MySQL 连接(本项目用 root / mydb)。REDIS_*:Redis 连接。AUTH_ENABLED:开发期false不校验;上线设true并让游戏端webapi.lua发送同一个AUTH_TOKEN。CURRENT_SEASON:当前赛季。
注意:MySQL/Redis 监听的是 VPS 本机 127.0.0.1,本地开发机无法直接连接,需在 VPS 上运行,或用 SSH 端口转发后把
DB_HOST/REDIS_ADDR指向转发端口。
访问地址
- 服务内部监听:
127.0.0.1:9929(APP_PORT) - 对外(域名 + HTTPS 反向代理):
POST https://dota.sansan.de5.net/api/v13/game/startPOST https://dota.sansan.de5.net/api/v13/game/end
- 游戏端
webapi.lua的serverHost设为:https://dota.sansan.de5.net/api/(注意结尾的/api/)
本地编译
go mod tidy
go build ./...
在 VPS 上运行
-
在 VPS 上编译(或本地交叉编译后上传二进制):
本地交叉编译 Linux amd64:
$env:GOOS="linux"; $env:GOARCH="amd64"; $env:CGO_ENABLED="0"; go build -o dota-server .把
dota-server和.env上传到 VPS 的/opt/dota-server/目录。 -
直接运行测试:
./dota-server -
用 systemd 托管(推荐):用
deploy/dota-server.servicecp deploy/dota-server.service /etc/systemd/system/ systemctl daemon-reload && systemctl enable --now dota-server -
反向代理:用
deploy/nginx.conf,把https://dota.sansan.de5.net/api/反代到127.0.0.1:9929。证书用 certbot 申请:certbot --nginx -d dota.sansan.de5.net
健康检查
GET https://dota.sansan.de5.net/health -> {"status":"ok"}
游戏端需要改的地方
scripts/vscripts/gameutils/webapi.lua:serverHost改成https://dota.sansan.de5.net/api/;dedicatedServerKey改成与AUTH_TOKEN一致的固定 token(若开启认证)。scripts/vscripts/global/initvaribles.lua:确认_GV.startGameApi/_GV.endGameApi为v13/...,_GV.currentSeason与后端一致。
数据表
AutoMigrate 自动建表:players / season_rank / matches / match_players。
玩家战绩的称号与伤害/治疗等杂项原样存入 match_players.badges / match_players.stats(JSON 列)。
Description
Languages
Go
75.3%
HTML
17.9%
PowerShell
6.8%