Skip to content

luodarun/dnf

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

地下城与勇士容器版本

CircleCI Docker Image GitHub license

Contact US

For cooperation and suggestions please contact chenl2448365088@gmail.com or yzd315695355@gmail.com

说明

该项目是将地下城与勇士(毒奶粉、DNF、DOF)整合成一个Docker镜像的项目 如何想实际部署,则只需要拷贝其中的部署文件夹即可,即deploy目录。 本项目使用官方Centos: 6.9为基础镜像,通过增加环境变量以及初始化脚本实现 应用的快速部署。

感谢 xyz1001大佬提供libhook.so优化CPU占用 源码

站库分离详见 XanderYe/dnf

如果觉得本项目和XanderYe/dnf对你有帮助,可以点一下Star支持下我们,谢谢。

自动化构建

该项目已经接入CircleCI,会自动化构建每一个版本

部署流程

Centos6/7安装Docker

先升级yum源

yum update -y

下载docker安装脚本

curl -fsSL https://get.docker.com -o get-docker.sh

运行安装docker的脚本

sudo sh get-docker.sh

启动docker

systemctl enable docker
systemctl restart docker

关闭防火墙

systemctl disable firewalld
systemctl stop firewalld

关闭selinux

sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

创建swap(如果内存足够可以直接忽略)

/bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=8000
mkswap /var/swap.1
swapon /var/swap.1
sed -i '$a /var/swap.1 swap swap default 0 0' /etc/fstab

查看操作系统是否打开swap的使用(如果内存足够可以直接忽略) sudo vim /etc/sysctl.conf 将vm.swappiness的值修改为100(优先使用swap),没有该配置就加上

vm.swappiness = 100

最后执行以下命令使配置生效:

sysctl -p

https://www.cnblogs.com/EasonJim/p/7777904.html

拉取镜像

以下命令三选一

docker pull 1995chen/dnf:centos5-2.1.2
docker pull 1995chen/dnf:centos6-2.1.2
如何您需要使用centos7作为基础镜像的特殊需求,可以使用:
docker pull 1995chen/dnf:centos7-2.1.2
所有镜像版本列表请参考[记得点赞三连,帮助更多的人了解该镜像]:
https://hub.docker.com/repository/docker/1995chen/dnf

简单启动

# 创建一个目录,这里以/data为例,后续会将该目录下的mysql以及data目录挂载到容器内部
mkdir -p /data/log /data/mysql /data/data
# 2.1.0版本镜像启动时会自动初始化mysql数据
# 启动服务
# PUBLIC_IP为公网IP地址,如果在局域网部署则用局域网IP地址,按实际需要替换
# GM_ACCOUNT为登录器用户名,建议替换
# GM_PASSWORD为登录器密码,建议替换
# DNF_DB_ROOT_PASSWORD为mysql root密码,容器启动是root密码会跟随该环境变量的变化自动更新
# WEB_USER为supervisor web管理页面用户名
# WEB_PASS为supervisor web管理页面密码(可以访问PUBLIC_IP:2000来访问进程管理页面)
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=gm_user -e GM_PASSWORD=gm_pass -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 20303:20303/tcp -p 20303:20303/udp -p 20403:20403/tcp -p 20403:20403/udp -p 40403:40403/tcp -p 40403:40403/udp -p 7000:7000/tcp -p 7000:7000/udp -p 7001:7001/tcp -p 7001:7001/udp -p 7200:7200/tcp -p 7200:7200/udp -p 10011:10011/tcp -p 31100:31100/tcp -p 30303:30303/tcp -p 30303:30303/udp -p 30403:30403/tcp -p 30403:30403/udp -p 10052:10052/tcp -p 20011:20011/tcp -p 20203:20203/tcp -p 20203:20203/udp -p 30703:30703/udp -p 11011:11011/udp -p 2311-2313:2311-2313/udp -p 30503:30503/udp -p 11052:11052/udp --cpus=1 --memory=1g --memory-swap=-1 --shm-size=8g --name=dnf 1995chen/dnf:centos6-2.1.2

如何确认已经成功启动

1.查看日志 log
├── siroco11
│ ├── Log20211203-09.history
│ ├── Log20211203.cri
│ ├── Log20211203.debug
│ ├── Log20211203.error
│ ├── Log20211203.init
│ ├── Log20211203.log
│ ├── Log20211203.money
│ └── Log20211203.snap
└── siroco52
├── Log20211203-09.history
├── Log20211203.cri
├── Log20211203.debug
├── Log20211203.error
├── Log20211203.init
├── Log20211203.log
├── Log20211203.money
└── Log20211203.snap
查看Logxxxx.init文件,五国的初始化日志都在这里
成功出现五国后,日志文件大概如下,五国初始化时间大概1分钟左右,请耐心等待
[root@centos-02 siroco11]# tail -f Log20211203.init
[09:40:23] - RestrictBegin : 1
[09:40:23] - DropRate : 0
[09:40:23] Security Restrict End
[09:40:23] GeoIP Allow Country Code : CN
[09:40:23] GeoIP Allow Country Code : HK
[09:40:23] GeoIP Allow Country Code : KR
[09:40:23] GeoIP Allow Country Code : MO
[09:40:23] GeoIP Allow Country Code : TW
[09:40:32] [!] Connect To Guild Server ...
[09:40:32] [!] Connect To Monitor Server ...
2.查看进程
在确保日志都正常的情况下,需要查看进程进一步确定程序正常启动
[root@centos-02 siroco11]# ps -ef |grep df_game
root 16500 16039 9 20:39 ? 00:01:20 ./df_game_r siroco11 start
root 16502 16039 9 20:39 ? 00:01:22 ./df_game_r siroco52 start
root 22514 13398 0 20:53 pts/0 00:00:00 grep --color=auto df_game
如上结果df_game_r进程是存在的,代表成功.如果不成功可以重启服务

重启服务

该服务占有内存较大,极有可能被系统杀死,当进程被杀死时则需要重启服务
重启服务命令

docker restart dnf

默认的网关信息

网关端口: 881
通讯密钥: 763WXRBW3PFTC3IXPFWH
登录器版本: 20180307
登录器端口: 7600
GM账户: gm_user GM密码: gm_pass

可选的环境变量

当容器用最新的环境变量启动时,以下所有的环境变量,包括数据库root密码都会立即生效 需要更新配置时只需要先停止服务

docker stop dnf
docker rm dnf

然后用最新的环境变量设置启动服务即可

# 自动获取公网地址[默认为false]
AUTO_PUBLIC_IP
# 公网或局域网IP地址
PUBLIC_IP
# GM管理员账号
GM_ACCOUNT
# GM管理员密码
GM_PASSWORD
# GM连接KEY(自定以密钥请使用网关生成的密钥,因为密钥有格式限制,不符合格式的密钥会导致登录器一致卡在网关连接那里)
GM_CONNECT_KEY
# GM登录器版本
GM_LANDER_VERSION
# DNF数据库root密码
DNF_DB_ROOT_PASSWORD
# DNF数据库game密码(必须8位)
DNF_DB_GAME_PASSWORD
# supervisor web页面用户名
WEB_USER
# supervisor web页面密码
WEB_PASS

Windows高版本用户无法进入频道,需要添加hosts
PUBLIC_IP(你的服务器IP) start.dnf.tw

FAQ

1.点击网关登录,没反应,不出游戏(请透过Garena+执行)

  • A: windows7需要用管理员权限运行网关,windows10请不要用管理员权限运行网关
  • A: 无法使用虚拟机Console、VNC等访问Windows。
  • A: WIN+R输入dxdiag检查显示-DirectX功能是否全部开启。
  • A: 没有覆盖客户端补丁。

2.服务端不出五国

  • A: 机器内存不够,swap未配置或配置后未生效,通过free -m查看swap占用内存
  • A: 服务器磁盘空间是否足够
  • A: 如果更换过PVF,请确保PVF是未加密的,而且需要同步更换对应的等级补丁
  • A: 机器内存低于2G可以尝试修改--shm-size=2g或1g
  • A: swap占用为0,通过free -m查看swap使用率,通过sysctl -p查看设置是否正确,设置正确依旧swap占用为0,需要重启服务器。

3.镜像运行报错

  • A: 尝试更换其他镜像
  • A: 部分阉割系统可能不支持--cpus, --memory, --memory-swap, --shm-size尝试去除这些配置

4.生成网关时出现非法字符提示

  • A: 默认用户名密码gm_user,gm_pass中带有下划线"_",与统一6.x版本的网关不兼容,可以尝试使用5.x版本网关或者更换默认网关用户名和密码

5.灰频道或频道点击无法进入

  • A: 检查Linux服务端防火墙是否关闭
  • A: 检查云服务器厂商相关端口是否放开
  • A: 客户端windows是否配置hosts
  • A: PUBLIC_IP是否填错,windows需要能够访问到这个配置的PUBLIC_IP
  • A: 使用统一补丁需要检查网关生成的登陆器的IP
  • A: 使用Dof7.6补丁需要检查DNF.toml中的IP

6.点击登录后报错(请重新安装Init)

  • A: PVF加密错误,需要重新加密PVF
  • A: 使用Dof7.6补丁,需要恢复成未加密PVF

7.统一网关无法连接到数据库

  • A: 数据库默认端口3000,用户名使用root,密码默认88888888 ,请确保3000端口在云服务厂商配置里放开

8.接收频道信息失败

  • A: 检查Linux服务端防火墙是否关闭
  • A: 检查云服务器厂商相关端口是否放开
  • A: 五国未成功跑出

9.登陆器版本过期,请下载最新登陆器

  • A: 生成登录器,需要和【网关设置】中登录器版本一致

10.正在连接网关,登陆器无法连接网关

  • A: 检查Linux服务端防火墙是否关闭
  • A: 检查云服务器厂商相关端口是否放开
  • A: 五国未成功跑出

11.新建角色键盘无法输入

  • A: 与客户端有关,部分客户端没优化好会出现这个问题
  • A: windows7下需要用管理员权限运行启用中文输入法程序(可以加群问群友),或使用系统自带英文输入法
  • A: windows10需要使用系统自带的英文输入法
  • A: 使用Dof7.6补丁

12.如何挂载DP

  • A: 不需要挂载DP,默认已经使用DP

13.没有固定公网IP

  • A: 环境变量AUTO_PUBLIC_IP 可以启动容器时自己获取公网ip,自动重启的话需要自己写脚本去检测并重启容器
  • A: 客户端使用统一网关登录器+DOF7补丁,支持域名配置;统一补丁貌似不能用域名

客户端地址下载

链接: https://pan.baidu.com/s/10RgXFtpEhvRUm-hA98Am4A 提取码: fybn

统一网关下载

链接:https://pan.baidu.com/s/1Ea80rBlPQ4tY5P18ikucfw 提取码:bbd0

Dof7补丁下载

链接: https://pan.baidu.com/s/1rxlGfkfHTeGwzMKUNAbSlQ 提取码: ier2

docker-compose启动

部署文档

k8s启动

Yaml地址

沟通交流

QQ 1群:852685848(已满)
QQ 2群:418505204(已满)
QQ 3群:954929189
欢迎各路大神加入,一起完善项目,成就当年梦,800万勇士冲! (群内没有任何的收费项目)

申明

虽然支持外网,但是千万别拿来开服。只能拿来学习使用!!!
虽然支持外网,但是千万别拿来开服。只能拿来学习使用!!!
虽然支持外网,但是千万别拿来开服。只能拿来学习使用!!!

🤝 特别感谢

特别感谢Jetbrains为本项目赞助License

Jetbrains

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Shell 56.6%
  • Dockerfile 43.4%