DNF 私服终极整合镜像部署教程:网关+五国+假人+SSH 一包全带走
一条 docker run 命令,拉起完整 DNF 私服:MySQL 数据库 + 登录网关 + 五国三频道 + 假人机器人系统 + SSH 远程 + 实时状态看板 + 一键端菜单,登录就看见每一条服务的进度条。
-- 输入减号(-)回车进入【常用指令】 -- -- 输入加号(+)回车进入【快捷五国状态】 -- ================================================== DOF 状态面板 · 网关/五国/假人 ================================================== 时间 2026-09-18 17:32 已运行 0天19小时12分 系统 ● MySQL在线 内存 6.8G/7.6G 负载 30.20 ● 开机自启已启用 (dof-run)● 网关Gateway 登录入口 100% ✔ 就绪 :8188
● 假人Robot 挂机系统 100% 在线40/20 Auto:On● siroco12 1区2频道 100% ✔ 已上线 :10012
● siroco52 5区2频道 100% ✔ 已上线 :10052
● siroco56 5区6频道 100% ✔ 已上线 :10056总状态 ● 五国全部在线,可以进游戏了
运维命令速查
看加载详情 tail -f /home/neople/game/log/siroco12/Log*.init
重启五国 /root/dof-restart.sh
假人Web http://服务器IP:8112
一、这个镜像里有什么
| 组件 | 说明 | 端口 |
|---|---|---|
| MySQL 5.6 | 游戏数据库,数据目录挂载持久化 | 3306 |
| 登录网关 | BaoYu + Gatewayd,玩家入口 | 8188 |
| 五国三频道 | siroco12/52/56,完整服务链(stun/monitor/manager/relay/bridge/channel/auction/point/guild…) | 10012/10052/10056 |
| 假人机器人 | robot 静态二进制,Web 管理台,自动登录/喊话/摆摊 | 8112 |
| SSH 服务 | openssh,root 直登,登录即见状态看板 | 2222 |
| 状态看板 | dof-status:网关/假人/五国 三区进度条 + 运维命令速查 | – |
| 一键端菜单 | 减号回车进入常用指令(y 菜单) | – |
镜像规格:dof:v5,约 3.6GB(导出包约 2.3GB)。基于 CentOS 7,已内置 32 位运行库、NSS/gconv 字符集、GeoIP 数据、libz——所有历史踩坑全部填平。
二、服务器要求
| 项目 | 最低 | 推荐 |
|---|---|---|
| 内存 | 6G | 8G 以上(开假人很吃内存) |
| 硬盘 | 30G 空闲 | 40G+ SSD |
| 系统 | 任意能装 Docker 的 Linux | Debian 11 / CentOS 7+ |
| 网络 | 需要公网 IP | 建议境外/免备案服务器 |
三、五分钟部署
Step 1 · 安装 Docker(已有跳过)
curl -fsSL https://get.docker.com | bash
systemctl enable --now docker
Step 2 · 上传并导入镜像
把 dof-v5.tar.gz 上传到服务器(scp / 网盘中转均可),然后:
gunzip -c dof-v5.tar.gz | docker load
docker images # 应看到 dof:v5
Step 3 · 一条命令运行(核心)
docker run -d --name dof \
--network host \
--cap-add=SYS_NICE \
--shm-size=2g \
-v dof-mysql:/var/lib/mysql \
-v dof-neople:/home/neople \
-v dof-root:/root \
-v dof-dp2:/dp2 \
-e DOF_SSH_PASS=你的SSH密码 \
--restart unless-stopped \
dof:v5
参数逐条解释(新手必读):
| 参数 | 为什么必须 |
|---|---|
--network host |
游戏端口直接走宿主网络,客户端才能连上(容器隔离网络会导致玩家无法连接) |
--cap-add=SYS_NICE |
服务端要用 nice -20 提权,没有会启动失败 |
--shm-size=2g |
TP 反作弊模块用共享内存,默认 64M 会段错误 |
-v dof-mysql:/var/lib/mysql |
数据库目录持久化,重建容器数据不丢 |
-v dof-neople:/home/neople |
游戏目录持久化(含 /home/neople/game 主目录、PVF、拍卖行数据),改 PVF 也在这改 |
-v dof-root:/root |
/root 持久化:假人配置、看板、日志、网关配置都在这 |
-e DOF_SSH_PASS=... |
容器内 root 的 SSH 密码,改成你自己的强密码 |
--restart unless-stopped |
服务器重启后容器自动拉起,全链自动恢复 |
Step 4 · 放行防火墙端口
云服务器请在安全组放行(本机防火墙同理):
TCP: 2222(SSH) 8188(网关) 8112(假人Web) 10012 10052 10056 30303 7200
UDP: 10012 10052 10056 11012 11052 11056 2311 2312 2313
3306(MySQL)不要对公网开放。
Step 5 · 等待首次加载
容器启动后自动按顺序拉起:MySQL → 网关 → SSH → 五国 →(五国上线后)假人系统。PVF 加载约 7~15 分钟。
docker logs -f dof # 看启动链日志
四、连接 SSH:登录即见看板
用 Xshell / PuTTY / 终端连接:
主机:你的服务器IP
端口:2222 ← 注意是 2222 不是 22
用户:root
密码:你 -e DOF_SSH_PASS 设置的密码
命令行连接示例:
ssh root@服务器IP -p 2222
登录瞬间自动弹出状态面板(这就是打进镜像里的进度条看板):
- 网关 Gateway 行:登录入口 8188 就绪状态,进度条 100% 为正常
- 假人 Robot 行:在线人数/目标人数进度条 + Auto 开关状态(0/20 表示还没开自动)
- 三频道行:PVF 加载里程碑实时进度(35% 加载物品 → 55% 祭坛 → 85% GeoIP → 100% 上线)
- 总状态:全部绿了就能进游戏
底部是灰色运维命令速查,常用的重启、看日志、改配置命令都在。
五、快捷键(加减号命令)
登录容器 SSH 后:
敲 - 回车 → 进入一键端常用指令菜单(y)
敲 + 回车 → 随时刷新五国状态看板
敲 dof-status 回车 → 同上,任何时候可敲
六、启动假人机器人(三步)
1. 浏览器打开 http://服务器IP:8112(密码 twadmin)
2. 顶部点 Auto → 设置 Target online(目标假人数,先 10~20 测试)→ 保存并启动
3. 回 SSH 敲 dof-status,假人行进度条开始爬升:在线 3/20 → 8/20 → 20/20
假人登录依赖五国在线(Game port 绿色)。Game port 红色时先等五国上线再开 Auto。
七、日常运维速查
dof-status # 状态看板(随时敲)
/root/dof-restart.sh # 重启五国(容器内)
docker restart dof # 重启整个容器(全链自动恢复)
docker logs -f dof # 容器启动链日志
tail -f /var/log/dof-run.log # 五国加载日志
tail -f /var/log/robot.log # 假人日志
vi /root/config/conf/robot_config.ini # 假人配置(职业/目标人数/出生点)
改 PVF:/home/neople/game/Script.pvf(挂载卷内,改前备份,改后 docker restart dof)。
数据备份:直接备份三个 docker 卷(dof-mysql / dof-neople / dof-root)即全量。
八、常见问题
Q:启动后五国一直 0%?
看 docker logs dof 是否报 MySQL 错误;确认内存 ≥6G;确认没有端口占用(ss -tlnp | grep 10012,先停掉旧服务)。
Q:假人进度条一直 0/20 不动?
① 五国是否已 100% 上线;② Web 8112 里 Auto 是否真的启动了;③ 数据库卡片是否正常;④ 假人上限受服务器最大人数限制,先降低 Target。
Q:服务器重启后会自动恢复吗?
会。--restart unless-stopped + 容器内启动链 = 开机自动按 网关→五国→假人 顺序恢复,无需人工干预。
Q:能把 22 端口改回标准 SSH 吗?
容器 SSH 固定监听 2222(host 网络直通),不影响宿主机自己的 22 端口,二者互不冲突。
Q:SSH 看板里”开机自启未启用”是红色的?
这是正常显示。容器版由 docker --restart unless-stopped 托管自启(登录横幅会提示”容器托管模式”),等效于物理机的开机自启,无需处理。
Q:想迁移到新服务器?
旧机:tar 三个 docker 卷 → 新机:导入镜像 + 还原三个卷 + 同一条 run 命令,五分钟完成迁移。
附:Docker-Compose 部署方式(推荐长期运维)
把下面的编排文件存为 /root/dof/docker-compose.yml(数据卷 external: true 直接引用既有卷,换镜像不丢数据):
services:
dof:
image: dof:v5
container_name: dof
network_mode: host
cap_add:
- SYS_NICE
shm_size: 2g
restart: unless-stopped
environment:
- DOF_SSH_PASS=你的SSH密码
volumes:
- dof-mysql:/var/lib/mysql
- dof-neople:/home/neople
- dof-root:/root
- dof-dp2:/dp2
volumes:
dof-mysql:
external: true
dof-neople:
external: true
dof-root:
external: true
dof-dp2:
external: true
常用命令:
cd /root/dof
docker compose up -d # 启动
docker compose logs -f # 跟日志
docker compose restart # 重启容器
docker compose down # 停止并移除(数据卷保留)
注意:首次部署若沿用旧数据卷,卷里可能没有 v5 新增的假人文件,可从镜像提取补齐:
docker create --name tmp-extract dof:v5
VD=/var/lib/docker/volumes/dof-root/_data
docker cp tmp-extract:/root/robot $VD/ && docker cp tmp-extract:/root/config $VD/
docker cp tmp-extract:/root/robot-start.sh $VD/ && docker rm tmp-extract
docker exec dof /root/robot-start.sh # 手动拉起一次假人
附:部署后常见环境问题修复(含一键端/y菜单)
以下四项是实测中遇到的环境坑,症状与修复命令全部给出。若你的镜像已是最新构建版本,可跳过;不确定就直接跑一遍修复命令,幂等无害。
① SSH 登录后没有自动弹出状态看板
症状:连上容器 SSH 只有光秃秃的 [root@NB652723 ~]#,没有看板。
原因:CentOS 7 镜像 root 家目录没有 .bash_profile(登录 shell 不读 .bashrc),且数据卷会覆盖镜像内的 /root/.bashrc。
修复(容器内执行,或宿主机 docker exec dof 进容器):
cat > /root/.bash_profile <<'EOF'
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
PATH=$PATH:$HOME/bin
export PATH
EOF
cat > /root/.bashrc <<'EOF'
alias -- -='/usr/local/bin/y'
alias -- +='dof-status'
if [[ $- == *i* ]]; then
echo "-- 输入减号(-)回车进入【常用指令】 --"
echo "-- 输入加号(+)回车进入【快捷五国状态】 --"
[ -x /usr/local/bin/dof-status ] && /usr/local/bin/dof-status
fi
EOF
修复后重新登录 SSH 即见看板。
② y 菜单 SQL 备份失败(sudo: command not found)
症状:备份时报 sudo: command not found,随后 tar: /root/mysqlbak/cc: No such file or directory、压缩失败。
原因:镜像未装 sudo;MySQL 编译安装于 /usr/local/mysql/bin,不在 PATH,mysqldump 没跑成导致无备份文件可压缩。
修复:
yum install -y sudo
ln -sf /usr/local/mysql/bin/mysqldump /usr/bin/mysqldump
ln -sf /usr/local/mysql/bin/mysql /usr/bin/mysql
ln -sf /usr/local/mysql/bin/mysqladmin /usr/bin/mysqladmin
mkdir -p /root/mysqlbak
数据库凭据读取自 /root/config.ini 的 [db] 段(db_user_name / db_password)。
③ 提示「当前服务端IP与实际不符」
症状:一键端检测提示服务端 IP 是别的机器(例如服务器换了机器或迁移过数据卷)。
原因:/home/neople/game/cfg/siroco*.cfg(各频道服务端配置)里写死了旧服务器 IP,迁移数据卷后原样带过来。
修复(把旧 IP 换成本机 IP,示例以 1.2.3.4 为本机为例):
grep -rl '38.76.219.243' /home/neople/game/cfg/ | wc -l # 确认旧IP分布
sed -i 's/38.76.219.243/1.2.3.4/g' /home/neople/game/cfg/*.cfg
grep -r '38.76.219.243' /home/neople/game/cfg/ | wc -l # 应为 0
⚠️ 新 IP 要重启五国才生效:容器内执行
/root/dof-restart.sh(约 10 分钟加载完),运行中的服务端不会热读配置。挑没人玩的时间点做。
④ y 菜单显示「数据库版本:[错误]链接失败」
症状:菜单底部数据库版本显示链接失败,或 mysql 命令报 Could not open required defaults file: /etc/my.cnf / Fatal error in defaults handling。
原因:镜像缺 /etc/my.cnf,mysql 客户端读默认配置直接中止(还没走到密码环节)。
修复:
printf '[client]
port=3306
socket=/tmp/mysql.sock
[mysqld]
basedir=/usr/local/mysql
datadir=/var/lib/mysql
socket=/tmp/mysql.sock
user=mysql
port=3306
' > /etc/my.cnf
chmod 600 /etc/my.cnf
mysql -e "select version();" # 验证能返回版本号
注意 chmod 600 不能省——mysql 会忽略全局可写的配置文件。
实战续篇已发布:DNF私服整合镜像实战教程:九大踩坑修复实录 + DOF_SERVER_IP 一键换机 —— 9 大踩坑实录(SSH 白板 / 网关死循环 / 僵尸进程假活 / MySQL 大小写折叠 / 暴雨后台空白)、DOF_SERVER_IP 环境变量一键换机、一键体检修复脚本 check-dof.sh。




暂无评论内容