Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 12 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@

该项目是将地下城与勇士(毒奶粉、DNF、DOF)整合成一个 Docker 镜像的项目,本项目使用官方 `CentOS-5/6/7`为基础镜像,通过增加环境变量以及初始化脚本实现 应用的快速部署。

如果觉得本项目和[XanderYe/dnf](https://github.com/XanderYe/dnf)对你有帮助,可以点一下 Star 支持下我们,谢谢。
如果觉得本项目和[XanderYe/dnf](https://github.com/XanderYe/dnf)以及[llnut/dnf](https://github.com/llnut/dnf)对你有帮助,可以点一下 Star 支持下我们,谢谢。

## 3.0.0 Release Plan
```
1. 支持假人
2. 通过插件支持几款登陆器
2. 通过插件支持几款登录器
```

## 2025年计划
Expand Down Expand Up @@ -58,10 +58,11 @@ mkdir -p /data/log /data/mysql /data/data
# DNF_DB_ROOT_PASSWORD 为 mysql root 密码,容器启动时会自动将 root 用户的密码修改为此值
# WEB_USER 为 supervisor web 管理页面用户名
# WEB_PASS 为 supervisor web 管理页面密码(可以访问 PUBLIC_IP:2000 来访问进程管理页面)
# CLIENT_POOL_SIZE 为 服务端启动是分配的客户端池大小,若单人使用可设置为3,多人使用请按需求增加,最大可分配1000
# --shm-size=8g【不可删除】,docker默认为64M较小,需要增加才能保证运行
# 注意,最后的 1995chen/dnf:centos5-2.1.5 部分中的 centos5,你在上一步(环境配置)拉取得哪个版本,则应替换为哪个版本
# tailscale需要额外映射设备: --device /dev/net/tun:/dev/net/tun
docker run -d -e PUBLIC_IP=x.x.x.x -e WEB_USER=root -e WEB_PASS=123456 -e DNF_DB_ROOT_PASSWORD=88888888 -e GM_ACCOUNT=gmuser -e GM_PASSWORD=gmpass -v /data/log:/home/neople/game/log -v /data/mysql:/var/lib/mysql -v /data/data:/data -p 2000:180 -p 3000:3306/tcp -p 7600:7600/tcp -p 881:881/tcp -p 7001:7001/tcp -p 7001:7001/udp -p 30011:30011/tcp -p 31011:31011/udp -p 30052:30052/tcp -p 31052:31052/udp -p 7300:7300/tcp -p 7300:7300/udp -p 2311-2313:2311-2313/udp --cap-add=NET_ADMIN --hostname=dnf --cpus=1 --memory=1g --memory-swap=-1 --shm-size=8g --name=dnf 1995chen/dnf:centos5-2.1.9.fix1
docker run -d -e PUBLIC_IP=x.x.x.x -e WEB_USER=root -e WEB_PASS=123456 -e DNF_DB_ROOT_PASSWORD=88888888 -e GM_ACCOUNT=gmuser -e GM_PASSWORD=gmpass -e CLIENT_POOL_SIZE=10 -v /data/log:/home/neople/game/log -v /data/mysql:/var/lib/mysql -v /data/data:/data -p 2000:180 -p 3000:3306/tcp -p 7600:7600/tcp -p 881:881/tcp -p 7001:7001/tcp -p 7001:7001/udp -p 30011:30011/tcp -p 31011:31011/udp -p 30052:30052/tcp -p 31052:31052/udp -p 7300:7300/tcp -p 7300:7300/udp -p 2311-2313:2311-2313/udp --cap-add=NET_ADMIN --hostname=dnf --cpus=1 --memory=1g --memory-swap=-1 --shm-size=8g --name=dnf 1995chen/dnf:centos5-2.1.9.fix1
```

## 如何确认已经成功启动
Expand Down Expand Up @@ -213,6 +214,9 @@ docker restart dnf
* A: 内存或者swap不足,可以将swap设置为10g或更大(对应docker run参数`--shm-size=10g`同时调整)
* A: swap占用为0,通过free -m查看swap使用率,通过sysctl -p查看设置是否正确,设置正确依旧swap占用为0,需要重启服务器。参考 [这里](./doc/PrepareLinux.md#%E9%85%8D%E7%BD%AE%E4%BA%A4%E6%8D%A2%E7%A9%BA%E9%97%B4%E8%8B%A5%E5%86%85%E5%AD%98%E4%B8%8D%E8%B6%B3-8gb) 进行设置

16. 配置了CLIENT_POOL_SIZE之后发现`df_bridge_r`和`df_channel_r`内存占用依然都为1.3GB
* A: 若您是从旧版本升级而来,请先删除docker挂载目录中的`/data/run/start_bridge.sh`和`/data/run/start_channel.sh`,之后重启服务端即可生效(只需删除一次即可,后续启动服务端无需再次删除)。

## 高级部署

[点击查看更多部署方式](doc/OtherDeploy.md)
Expand Down Expand Up @@ -285,9 +289,12 @@ QQ 6群:933010289
## 社区


XanderYe站库分离镜像:[XanderYe/dnf](https://github.com/XanderYe/dnf)
XanderYe站库分离镜像:[XanderYe/dnf](https://github.com/XanderYe/dnf)
llnut清风1031镜像:[llnut/dnf](https://github.com/llnut/dnf)

`libhook.so`优化CPU占用源码:https://godbolt.org/z/EKsYGh5dv
`libhook.so`优化CPU占用源码:[https://godbolt.org/z/EKsYGh5dv](https://godbolt.org/z/EKsYGh5dv)
`DofSlim`优化服务端内存占用源码:[https://github.com/llnut/DofSlim](https://github.com/llnut/DofSlim)
`Sorahk`多功能高性能连发程序: [https://github.com/llnut/Sorahk](https://github.com/llnut/Sorahk)

## 申明
```
Expand Down
1 change: 1 addition & 0 deletions build/dnf_data/docker-entrypoint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ export DDNS_DOMAIN=$(echo $DDNS_DOMAIN | sed "s/[\'\"]//g")
export DDNS_INTERVAL=$(echo $DDNS_INTERVAL | sed "s/[\'\"]//g")
export NB_SETUP_KEY=$(echo $NB_SETUP_KEY | sed "s/[\'\"]//g")
export NB_MANAGEMENT_URL=$(echo $NB_MANAGEMENT_URL | sed "s/[\'\"]//g")
export CLIENT_POOL_SIZE="$(echo "${CLIENT_POOL_SIZE:-10}" | sed "s/[\'\"]//g")"
# 校验用户选择的大区
SERVER_GROUP_NAME_VAR="SERVER_GROUP_NAME_$SERVER_GROUP"
if [ "$SERVER_GROUP" -ge 1 ] && [ "$SERVER_GROUP" -le 6 ]; then
Expand Down
Binary file added build/dnf_data/home/template/init/bridge_hook.so
Binary file not shown.
Binary file not shown.
4 changes: 4 additions & 0 deletions build/dnf_data/home/template/init/init.sh
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,10 @@ else
echo "get_ddns_ip.sh have already inited, do nothing!"
fi

# 旧版本启用DofSlim需要先删除start_bridge.sh和start_channel.sh
[ -f "/data/run/start_bridge.sh" ] && ! grep -q -e "^LD_PRELOAD=.*/home/template/init/bridge_hook.so" "/data/run/start_bridge.sh" && rm -f "/data/run/start_bridge.sh"
[ -f "/data/run/start_channel.sh" ] && ! grep -q -e "^LD_PRELOAD=.*/home/template/init/channel_hook.so" "/data/run/start_channel.sh" && rm -f "/data/run/start_channel.sh"

# 初始化所有run脚本
for fp in "/home/template/init/run"/*.sh
do
Expand Down
2 changes: 1 addition & 1 deletion build/dnf_data/home/template/init/run/start_bridge.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@ killall -9 df_bridge_r
rm -rf pid/*.pid
echo "starting bridge..."
# 使用默认的DP降低CPU占用
LD_PRELOAD=/home/template/init/libhook.so ./df_bridge_r server start
LD_PRELOAD=/home/template/init/bridge_hook.so:/home/template/init/libhook.so ./df_bridge_r server start
sleep 2
cat pid/*.pid |xargs -n1 -I{} tail --pid={} -f /dev/null
2 changes: 1 addition & 1 deletion build/dnf_data/home/template/init/run/start_channel.sh
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,6 @@ rm -rf /tmp/channel.cfg
# 启动服务
echo "starting channel..."
# 加载DP并启动,该DP可以被自定义[确保DP路径已经被正确映射]
LD_PRELOAD=/dp2/libhook.so ./df_channel_r channel start
LD_PRELOAD=/home/template/init/channel_hook.so:/dp2/libhook.so ./df_channel_r channel start
sleep 2
cat pid/*.pid |xargs -n1 -I{} tail --pid={} -f /dev/null
1 change: 1 addition & 0 deletions deploy/dnf/docker-compose/basic/docker-compose.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ services:
# 开启DDNS[可选配置]
# - DDNS_ENABLE=true
# - DDNS_DOMAIN=''
# - CLIENT_POOL_SIZE=10 # 服务端启动时分配的客户端缓冲池大小,此配置项影响df_bridge_r和df_channel_r的内存占用,请按需求设置,默认为10
# shm_size: 8g【不可删除】,docker默认为64M较小,需要增加才能保证运行
shm_size: 8g
memswap_limit: -1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ services:
- PUBLIC_IP=127.0.0.1
# 仅开启11和52频道
- OPEN_CHANNEL='1,6,7'
# - CLIENT_POOL_SIZE=10 # 服务端启动时分配的客户端缓冲池大小,此配置项影响df_bridge_r和df_channel_r的内存占用,请按需求设置,默认为10
# shm_size: 8g【不可删除】,docker默认为64M较小,需要增加才能保证运行
shm_size: 8g
memswap_limit: -1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ services:
- GM_PASSWORD=gmpass
- GM_CONNECT_KEY=763WXRBW3PFTC3IXPFWH
- GM_LANDER_VERSION=20180307
# - CLIENT_POOL_SIZE=10 # 服务端启动时分配的客户端缓冲池大小,此配置项影响df_bridge_r和df_channel_r的内存占用,请按需求设置,默认为10
# shm_size: 8g【不可删除】,docker默认为64M较小,需要增加才能保证运行
shm_size: 8g
memswap_limit: -1
Expand Down
1 change: 1 addition & 0 deletions doc/OtherDeploy.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@
| OPEN_CHANNEL | 开启的频道 | 支持配置范围,配置之间用逗号分隔,例如:1-11,12,22-25,51-55 | '11,52' |
| DNF_DB_ROOT_PASSWORD | DNF数据库root密码[当使用独立数据库时,root密码用于初始化数据以及game账号自动化创建、授权] | | '' |
| DNF_DB_GAME_PASSWORD | DNF数据库game密码[必须8位] | | '' |
| CLIENT_POOL_SIZE | 服务端启动时分配的客户端缓冲池大小,此配置项影响df_bridge_r和df_channel_r的内存占用 | 3-1000 | 10 |

### 进程监控管理页面配置

Expand Down