Skip to content

XanderYe/dnf

Folders and files

NameName
Last commit message
Last commit date

Latest commit

3ebcb16 · Jan 13, 2025

History

77 Commits
Apr 21, 2022
Dec 30, 2021
Jan 13, 2022
Dec 31, 2021
Jun 9, 2022
Jul 24, 2023
Dec 30, 2021
Jan 21, 2022
Dec 25, 2021
Jun 5, 2023
May 2, 2024
Jan 28, 2022

Repository files navigation

地下城与勇士容器站库分离

说明

基于1995chen/dnf

感谢 xyz1001大佬提供libhook.so优化CPU占用 源码
集成了DP2插件

部署流程

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

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

拉取镜像

dnf数据库mysql镜像
docker pull xanderye/dnf-mysql:5.6 
dnf服务server镜像
docker pull xanderye/dnf-server:centos7

简单启动

# 创建一个dnf独立网桥,连通mysql和server两个容器
docker network create dnf --subnet 172.20.0.0/16

# 使用mysql5.6(数据不通用)
# ALLOW_IP为game账户ip白名单(dnf服务的ip)
# GAME_PASSWORD为game账户密码(密码必须8位 否则无法连接)
# MYSQL_ROOT_PASSWORD为mysql root密码,仅初始化有效
docker run -itd \
-p 3306:3306 \
-v /dnf/dnfmysql/mysql:/var/lib/mysql \
-e TZ=Asia/Shanghai \
-e ALLOW_IP=172.20.0.% \
-e GAME_PASSWORD=uu5\!^%jg \
# root账户密码
-e MYSQL_ROOT_PASSWORD=88888888 \
--name dnfmysql \
--network=dnf \
xanderye/dnf-mysql:5.6

# 查看日志 (首次启动需要等待几十秒,出现一大堆数据库配置列表才是启动完成)
docker logs dnfmysql


# 启动dnf服务
# AUTO_MYSQL_IP为自动获取内网下mysql容器的ip
# MYSQL_NAME为内网下mysql容器名称(主机名)
# MYSQL_IP为mysql的IP地址(公网使用,使用时需要关闭AUTO_MYSQL_IP)
# MYSQL_PORT为mysql的端口(公网使用,使用时需要关闭AUTO_MYSQL_IP)
# GAME_PASSWORD为game账户密码(密码必须8位 否则无法连接)
# AUTO_PUBLIC_IP为自动获取公网ip(小概率会失败,观察日志 get public ip 输出)
# PUBLIC_IP为公网IP地址,如果在局域网部署则用局域网IP地址,按实际需要替换
# DP2为dp2插件是否启用,默认禁用
# GM_ACCOUNT为登录器用户名,建议替换
# GM_PASSWORD为登录器密码,建议替换
docker run -d \
-e TZ=Asia/Shanghai \
-e AUTO_MYSQL_IP=true \
-e MYSQL_NAME=dnfmysql \
-e MYSQL_IP=192.168.1.2 \
-e MYSQL_PORT=3306 \
-e GAME_PASSWORD=uu5\!^%jg \
-e AUTO_PUBLIC_IP=false \
-e PUBLIC_IP=192.168.1.2 \
-e DP2=false \
-e GM_ACCOUNT=gm_user \
-e GM_PASSWORD=123456 \
-v /dnf/dnfserver/log:/home/neople/game/log \
-v /dnf/dnfserver/data:/data \
-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 dnfserver \
--network=dnf \
xanderye/dnf-server:centos7

docker-compose启动

yml文件参考:docker-compose.yml

如何确认已经成功启动

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 dnfserver

默认的网关信息

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

可选的环境变量

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

docker stop dnfserver
docker rm dnfserver

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

# 数据库IP地址
MYSQL_IP
# 自动获取公网IP地址
AUTO_PUBLIC_IP
# 公网或局域网IP地址
PUBLIC_IP
# dp2插件
DP2
# GM管理员账号
GM_ACCOUNT
# GM管理员密码
GM_PASSWORD
# GM连接KEY(自定以密钥请使用网关生成的密钥,因为密钥有格式限制,不符合格式的密钥会导致登录器一致卡在网关连接那里)
GM_CONNECT_KEY
# GM登录器版本
GM_LANDER_VERSION

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

建议使用 统一网关登录器+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部署DNF问题排查文档

沟通交流

QQ 1群:852685848(已满)

QQ 2群:418505204 欢迎各路大神加入,一起完善项目,成就当年梦,800万勇士冲!

申明

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