群晖NAS使用Docker搭建DNF地下城与勇士(台服)游戏服务器服务端
前言
DNF这款游戏可以说是贯穿了我的高中时代,即使学业繁重也要和班里好友时不时去网吧酣战。为此没少挨老师和家长收拾,毕竟经常是趁着晚自习逃课去的?。后来随着升学,考研和工作等生活中的一系列变动逐渐变得日益繁忙,慢慢得也就从DNF毕业了。直到最近和朋友聊天又提起了当前一起逃课去打DNF的时光,谈笑间又让我手痒了起来,虽然没有时间和精力再去国服肝了,但是搭个私服和朋友一起自嗨一下还是可以的,因此也就有了这篇文章。
因为我的设备为群晖,因此本篇教程主要以群晖设备为主,理论上其他支持docker的NAS设备也可以参考该教程进行部署。
部署环境参考:
准备
- DNF台服客户端 提取码: oh1j因为搭建的DNF服务器来自于台版DNF,因此客户端也要配套采用台版
- 客户端补丁 提取码: d0v4客户端安装完成后需将补丁解压并覆盖到客户端文件夹内
- 网关文件 提取码: 1u6r用于配置DNF客户端网络连接,使其能够连接到我们搭建的DNF服务器上
- DOF补丁合集 提取码: fxig
- docker-compose.yml文件 提取码: 2zav用于配置docker容器
软件部署
1. 服务端软件部署
打开FileStation在docker目录下创建dnf文件夹修改该文件夹权限,添加Everyone用户并添加读取与写入权限并应用于此文件夹 子文件夹、子文件和所有后代
权限设置完成后再dnf文件夹下创建data、log、mysql 三个文件夹
在本地修改下载好的docker-compose.yml文件,将PUBLIC_IP的值修改为自己的IP地址
version: "2.3"networks: local: ipam: config: - subnet: 172.20.0.0/16services: init-dnf: image: 1995chen/dnf:centos6-2.0.2 environment: - TZ=Asia/Shanghai command: ['/bin/bash', '/home/template/init/init.sh'] networks: - local restart: "no" volumes: - ./data:/data - ./mysql:/var/lib/mysql dnf: image: 1995chen/dnf:centos6-2.0.2 depends_on: - init-dnf environment: - TZ=Asia/Shanghai # 这里填写你的IP地址 - PUBLIC_IP=192.168.31.16 # 数据库root密码 - DNF_DB_ROOT_PASSWORD=88888888 - GM_ACCOUNT=gm_user - GM_PASSWORD=gm_pass - GM_CONNECT_KEY=763WXRBW3PFTC3IXPFWH - GM_LANDER_VERSION=20180307 shm_size: 8g memswap_limit: -1 mem_limit: 1g # windows下生效 cpu_count: 1 # 占用1个cpu cpus: 1.0 networks: - local restart: always ports: - 3000:3306/tcp # mysql 数据库 - 7600:7600/tcp # DnfGateServe 网关 - 881:881/tcp # DnfGateServe 网关 - 20303:20303/tcp # df_dbmw_r - 20303:20303/udp # df_dbmw_r - 20403:20403/tcp # df_dbmw_r - 20403:20403/udp # df_dbmw_r - 40403:40403/tcp # df_manager_r - 40403:40403/udp # df_manager_r - 7000:7000/tcp # df_bridge_r - 7000:7000/udp # df_bridge_r - 7001:7001/tcp # df_channel_r - 7001:7001/udp # df_channel_r - 7200:7200/tcp # df_relay_r - 7200:7200/udp # df_relay_r - 10011:10011/tcp # df_game_r - 31100:31100/tcp # df_community - 30303:30303/tcp # df_monitor_r - 30303:30303/udp # df_monitor_r - 30403:30403/tcp # df_guild_r - 30403:30403/udp # df_guild_r - 10052:10052/tcp # df_game_r - 20011:20011/tcp # df_game_r - 20203:20203/tcp # df_dbmw_r - 20203:20203/udp # df_dbmw_r - 30703:30703/udp # df_coserver_r - 11011:11011/udp # df_game_r - 2311-2313:2311-2313/udp # df_stun_r - 30503:30503/udp # df_statics_r - 11052:11052/udp # df_game_r volumes: - ./data:/data - ./mysql:/var/lib/mysql - ./log:/home/neople/game/log
打开Container Manager,进入项目页面
点击新增按钮进入创建项目页面,设置项目名称为dnf,设置路径为docker/dnf,设置来源为上传docker-compose.yml, 点击文件选项行中的浏览,选择下载好的docker-compose.yml文件上传(也可选择创建docker-compose.yml将文件中的内容复制粘贴到页面中),上传完成后会在页面显示文件内容。完成后点击下一步
网页门户设置页面不需要进行配置,点击下一步跳过。
在摘要页面点击完成,项目新增完成。
Container Manager开始按照docker-compose.yml文件内容下载容器镜像并进行容器部署,因镜像体积较大(1.5GB),下载时间可能会较长需耐心等待。当显示下图内容时,项目构建完成。
关闭终端机页面,切换到容器界面可以看到处于停止运行状态的dnf-init-dnf-1容器和处于运行状态的dnf-dnf-1容器。dnf-init-dnf-1容器用于执行初始化,执行一次后自动停止无需人工干预。dnf-dnf-1容器是我们的dnf服务器本体,已处于运行状态。
如需确认dnf服务器正常运行,在容器界面,右键单击dnf-dnf-1容器选择打开终端机进入终端机页面,并在该页面点击新增按钮添加bash选项,添加后选中bash。
在bash终端机中执行以下执行
cd /home/neople/game/log grep -rHi 'GeoIP Allow Country Code' ./
如能够显示下图信息则表示DNF服务器运行正常,至此DNF服务端部署完成。
2. 客户端软件部署
将前文提到的DNF台服客户端、客户端补丁、网关文件、DOF补丁合集下载后,就可以开始客户端部署。
解压网关文件并进入文件夹,可以看到Config.ini、Script.pvf、统一网关在线管理工具v5.4.exe这三个文件。打开Config.ini文件,对以下参数进行修改,修改后保存并关闭该文件。
- 网关地址:部署服务端的ip地址,根据自身部署情况进行修改;
- 网关端口:881
- 超级账户:gm_user
- 超级密码:gm_pass
- 通信密钥:763WXRBW3PFTC3IXPFWH
打开统一网关在线管理工具v5.4.exe,并切换到网关设置页面,可看到刚才在Config.ini中修改的参数。点击连接网关按钮与服务端进行连接。
连接成功后界面显示如下图所示
连接成功后切换到登陆器设置页面,设置以下参数
- 服务器名称:统一登陆器
- 登陆器版本:20180307
- 线路名称:自行设置
- 游戏地址:部署服务端的ip地址
- 登陆器端口:7600
- 网关地址:与游戏地址相同,均为服务端ip地址
- 通信密钥:763WXRBW3PFTC3IXPFWH
参数设置完成后点击新增按钮,添加线路就可在线路设置栏看到添加的游戏线路
线路添加完成后,点击生成登陆器按钮生成登录客户端,客户端文件夹和统一登陆网关管理工具v5.4.exe在同一目录下,将生成的统一登陆器.exe复制到解压后的DNF台版客户端文件夹内。
进入统一登陆网关管理工具v5.4软件中的使用工具页面,依次点击获取当前密码按钮、生成随机密码按钮、设置密码生效按钮(注意:一定要按照该顺序点击)。完成后点击打开文件按钮,选中弹出的文件选择框中的Script.pvf文件,选中完成后点击文件加密按钮进行加密。加密完成后会弹出文件框,显示新生成的加密文件,将该文件复制到解压后的DNF台版客户端文件夹内,替换原有的script.pvf 文件。
分别解压客户端补丁、DOF补丁合集并将解压后的文件复制到解压后的DNF台版客户端文件夹内。
至此客户端软件部署完成
进入游戏
进入DNF台版客户端文件夹内,双击统一登陆器.exe进入启动页面
点击注册账号按钮,完成账号注册
注册完成,回到启动页面,输入账号密码即可进入游戏。
总结
因为有docker的存在整体的搭建过程不是很复杂,服务端资源占用情况也还可以接收,至少以我的配置可以比较完美的运行。有公网IP的小伙伴还可以将服务对外开放,和小伙伴一起快乐玩耍。
如果您喜欢我的文章请点一个小小的赞,这对我真的很重要。