CentOS 7部署CABAL EP8服务端:从系统配置到进程协同的完整指南
1. 项目缘起与目标为什么要在CentOS 7上部署CABAL EP8如果你是一个老网游玩家或者对经典MMORPG的私服搭建感兴趣那么对《CABAL Online》国内曾译作“惊天动地”这个名字一定不会陌生。这款游戏以其华丽的技能特效和独特的战斗系统在十几年前风靡一时。而EP8通常指的是游戏的某个特定版本包含了相对完整的游戏内容和稳定的系统架构。最近我因为怀旧和一些技术研究的需求决定在一台全新的CentOS 7服务器上从零开始搭建一套CABAL EP8的服务端。这听起来像是一个简单的“安装-配置-运行”过程但实际操作下来我发现它远不止是运行几个脚本那么简单。它更像是一个系统工程涉及操作系统基础环境配置、数据库部署、服务端核心程序运行、网络与防火墙策略以及一系列依赖库的解决。网络上能找到的教程大多年代久远步骤零散且严重依赖特定的环境直接照搬几乎百分之百会踩坑。因此我决定将这次完整的配置过程记录下来不仅是为了备忘更是希望为后来者提供一份清晰、可复现的“避坑指南”。本次部署的目标非常明确在一台纯净的CentOS 7.9最小化安装系统上成功搭建并运行CABAL EP8服务端的所有必要组件确保登录服务器Login Server、世界服务器World Server、频道服务器Channel Server等核心进程能够正常启动并协同工作最终实现客户端可以连接并进入游戏世界。整个过程将严格遵循从底层到上层的顺序确保每个环节的稳定。2. 基础操作系统环境准备打造一个稳固的基石任何服务端应用的稳定运行都离不开一个干净、优化过的操作系统环境。对于CABAL EP8这种老牌游戏服务端而言CentOS 7是一个经典且兼容性较好的选择。我们的第一步就是为它打好基础。2.1 系统安装与初始配置我使用的是CentOS-7.9.2009-x86_64-Minimal.iso进行安装。选择最小化安装可以确保系统最纯净没有不必要的后台服务占用资源这对于游戏服务器来说至关重要。安装完成后第一件事不是急着装软件而是进行一系列基础优化。1. 网络配置与主机名游戏服务器需要稳定的网络和易于识别的标识。我使用nmtui命令行工具或直接编辑/etc/sysconfig/network-scripts/ifcfg-ens33网卡名可能不同来配置静态IP地址避免因DHCP导致的IP变化影响客户端连接。同时修改/etc/hostname文件设置一个有意义的主机名如cabal-master并在/etc/hosts文件中添加本机IP与主机名的映射。2. 关闭SELinux与防火墙策略调整SELinux在强化安全的同时也常常成为各种老旧服务端程序的“拦路虎”。在调试阶段我选择将其设置为宽容模式。编辑/etc/selinux/config将SELINUXenforcing改为SELINUXpermissive然后重启系统生效。请注意在生产环境中需要更精细的策略配置但初期为了排除干扰这是一个常见做法。对于防火墙CABAL服务端需要开放一系列特定端口供客户端连接。CentOS 7默认使用firewalld。我采取的方法是先彻底关闭firewalld并禁用其服务systemctl stop firewalld; systemctl disable firewalld然后安装并启用更传统的iptables服务yum install iptables-services -y; systemctl enable iptables。这样做是因为很多老教程的防火墙规则是基于iptables的兼容性更好。后续我们会在iptables中精确开放所需端口。3. 更新系统与安装基础工具执行yum update -y更新所有系统包到最新版本确保安全漏洞得到修补。然后安装一批后续步骤必不可少的开发工具和常用软件包yum groupinstall “Development Tools” -y yum install -y wget vim net-tools lsof telnet unzip zip gcc-c make cmakeDevelopment Tools组提供了GCC编译器、make等核心编译环境net-tools和lsof用于网络排查vim则是高效的文本编辑器。2.2 Yum源优化与依赖库安装CentOS 7自带的官方源在国内访问可能较慢更换为国内镜像源可以极大提升软件下载速度。这里我选择更换为阿里云的镜像源。# 备份原yum源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup # 下载阿里云yum源 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo # 清理并重建缓存 yum clean all yum makecache接下来需要安装一些CABAL服务端可能依赖的运行时库。这些库文件通常不会在最小化安装中包含但却是程序运行的基础。根据经验以下库文件是必须的yum install -y glibc.i686 libstdc.i686 zlib.i686 ncurses-libs.i686注意这里安装了大量i68632位的库。这是因为很多老旧的游戏服务端程序包括CABAL EP8的服务端核心很可能是在32位环境下编译的即使在64位系统上运行也需要对应的32位运行时库支持。缺少这些库会导致程序无法启动并报错“找不到.so文件”或“错误的ELF类型”。3. 核心服务部署数据库与运行环境基础系统就绪后我们进入核心服务部署阶段。CABAL EP8服务端通常依赖MySQL数据库来存储账号、角色、物品等所有游戏数据同时其服务端程序本身也需要特定的运行环境。3.1 MySQL数据库的安装与配置我选择安装MySQL 5.7版本。这是一个在稳定性和兼容性之间取得很好平衡的版本与EP8服务端匹配度较高。MariaDB虽然兼容但在一些细节上可能有差异为了减少不确定性直接使用MySQL是更稳妥的选择。1. 添加MySQL官方Yum源并安装wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm rpm -ivh mysql57-community-release-el7-11.noarch.rpm yum install mysql-community-server -y2. 启动MySQL并设置开机自启systemctl start mysqld systemctl enable mysqld3. 获取初始密码并安全配置MySQL 5.7安装后会在日志文件中生成一个临时root密码。grep ‘temporary password’ /var/log/mysqld.log使用该密码登录MySQLmysql -uroot -p登录后必须立即修改密码并执行一些基础安全设置和创建游戏数据库-- 修改root密码需满足密码强度策略 ALTER USER ‘root’‘localhost’ IDENTIFIED BY ‘YourStrongPassword123!’; -- 创建游戏专用的数据库用户和数据库这里以‘cabal’为例 CREATE DATABASE cabal_db CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE USER ‘cabal_user’‘localhost’ IDENTIFIED BY ‘GameDbPassword456!’; GRANT ALL PRIVILEGES ON cabal_db.* TO ‘cabal_user’‘localhost’; FLUSH PRIVILEGES; -- 可选为了方便远程管理如用Navicat连接可以授权用户从任意主机访问生产环境慎用 -- CREATE USER ‘cabal_user’‘%’ IDENTIFIED BY ‘GameDbPassword456!’; -- GRANT ALL PRIVILEGES ON cabal_db.* TO ‘cabal_user’‘%’; FLUSH PRIVILEGES;4. 导入游戏数据库脚本这是最关键的一步。通常CABAL EP8的服务端文件包中会包含一个或多个.sql文件里面是创建所有数据表结构和初始化数据的脚本。你需要将这些文件上传到服务器然后导入到刚才创建的cabal_db数据库中。# 假设数据库脚本文件名为 cabal_ep8_full.sql并已上传到 /tmp 目录 mysql -ucabal_user -pGameDbPassword456! cabal_db /tmp/cabal_ep8_full.sql导入过程可能会比较长请耐心等待。完成后可以登录MySQL检查表是否创建成功。注意不同来源的EP8服务端其数据库结构可能有细微差别。务必使用与你服务端程序版本配套的数据库脚本否则会导致服务端启动失败或游戏逻辑错误。3.2 服务端文件部署与基础依赖检查将完整的CABAL EP8服务端文件包通常包含LoginSvr、WorldSvr、ChannelSvr等目录上传到服务器的一个合适位置例如/opt/cabal。确保你拥有该目录的所有权。mkdir -p /opt/cabal # 上传并解压你的服务端压缩包到 /opt/cabal chown -R root:root /opt/cabal chmod -R 755 /opt/cabal在启动任何服务端程序之前强烈建议使用ldd命令检查其动态链接库依赖。进入某个可执行文件所在的目录例如LoginSvrcd /opt/cabal/LoginSvr ldd ./LoginSvr如果输出中有“not found”的提示就说明缺少对应的库文件。你需要根据提示的库名使用yum provides */libxxx.so来查找并提供该库的包名然后安装对应的32位或64位版本。这个过程可能需要重复几次直到所有依赖都满足。4. 服务端配置详解让各个模块协同工作CABAL EP8服务端通常由多个独立的进程组成每个进程都有自己的配置文件。这些配置文件通常是以.ini或.cfg为扩展名的文本文件它们决定了服务器的IP、端口、数据库连接信息以及各模块间的通信方式。配置错误是导致服务端无法启动或客户端无法连接的最常见原因。4.1 网络与端口规划首先我们需要规划好各个服务需要监听的端口并在防火墙中开放它们。以下是一个典型的端口规划示例服务进程默认端口作用客户端连接Login Server38101处理账号登录、认证是World Server38111世界服务器角色选择是通过Login跳转Channel Server 138121频道服务器1游戏主世界是Agent Shop38180代理商店服务器内部Global DB Agent38170全局数据库代理内部Chat Node38181聊天服务器内部根据这个规划我们需要在iptables中开放38101, 38111, 38121等对客户端开放的端口。编辑/etc/sysconfig/iptables文件如果不存在可以先iptables-save /etc/sysconfig/iptables在-A INPUT -j REJECT规则之前添加允许规则-A INPUT -p tcp --dport 38101 -j ACCEPT -A INPUT -p tcp --dport 38111 -j ACCEPT -A INPUT -p tcp --dport 38121 -j ACCEPT然后重启iptables服务systemctl restart iptables。可以使用netstat -tlnp命令检查端口是否已成功监听。4.2 核心配置文件修改每个服务端目录下都有一个或多个配置文件。我们需要重点关注以下几个关键配置项1. 数据库连接配置这通常在一个共享的配置文件里比如/opt/cabal/common.ini或各个服务器目录下的svr.ini。你需要找到类似于以下内容的段落[DB] DSN“cabal_db” UID“cabal_user” PWD“GameDbPassword456!”确保这里的数据库名、用户名、密码与你之前在MySQL中设置的完全一致。密码错误或数据库不存在会导致服务端启动时连接数据库失败。2. 服务器IP地址配置这是最容易出错的地方。你需要将配置文件中所有指向服务器地址的项从127.0.0.1或localhost改为你服务器的公网IP地址或内网IP地址取决于客户端从哪里连接。常见的配置项名称为IP、Addr、ExternalIP等。需要修改的文件可能包括LoginSvr目录下的server.ini或config.iniWorldSvr目录下的配置文件ChannelSvr目录下的配置文件3. 服务器间通信配置WorldSvr需要知道LoginSvr的地址和端口来进行认证交接ChannelSvr需要向WorldSvr注册。这些配置项通常名为LoginServerIP、WorldServerIP等需要将它们指向正确的服务器IP和端口。实操心得修改配置文件时建议先做备份。并且不要盲目替换所有“127.0.0.1”。有些用于本地进程间通信的配置项比如连接本机数据库可能不需要改动。最好的方法是结合服务端的日志和启动错误信息来定位问题。5. 启动流程、排错与优化当所有环境、数据库、配置都准备就绪后就可以开始尝试启动服务了。启动顺序有严格的要求通常需要按照以下流程进行5.1 正确的启动顺序与守护启动数据库确保MySQL服务正在运行 (systemctl status mysqld)。启动核心后台服务首先启动那些不直接面对客户端但为其他服务提供支持的后台进程例如GlobalDBAgent、CashDBAgent、AgentShop、ChatNode等。这些进程一般没有依赖或依赖数据库。启动Login Server这是客户端第一个连接点。启动World ServerLogin Server验证账号后会将客户端引导至World Server。启动Channel Server(s)最后启动一个或多个频道服务器玩家实际在这里游戏。每个服务端程序通常是一个独立的可执行文件。我们可以编写一个简单的Shell脚本来批量启动和管理它们。创建一个start_cabal.sh#!/bin/bash BASE_DIR“/opt/cabal” cd $BASE_DIR/GlobalDBAgent ./GlobalDBAgent sleep 2 cd $BASE_DIR/CashDBAgent ./CashDBAgent sleep 2 cd $BASE_DIR/AgentShop ./AgentShop sleep 2 cd $BASE_DIR/ChatNode ./ChatNode sleep 2 cd $BASE_DIR/LoginSvr ./LoginSvr sleep 5 # 给LoginSvr更多时间初始化 cd $BASE_DIR/WorldSvr ./WorldSvr sleep 5 cd $BASE_DIR/ChannelSvr ./ChannelSvr echo “All CABAL EP8 servers have been started.” echo “Use ‘ps aux | grep Svr’ to check processes.”给脚本执行权限chmod x start_cabal.sh。运行时使用nohup ./start_cabal.sh 可以让其在后台运行并且终端退出后不中断。5.2 常见启动问题与排查思路启动过程几乎不可能一帆风顺。以下是几个我踩过的坑及其解决方法问题一启动程序立即崩溃提示“段错误 (核心已转储)” (Segmentation fault)。可能原因132位库缺失。这是最常见的原因。用ldd命令检查该程序确认所有动态库都能找到。重点安装glibc.i686,libstdc.i686等。可能原因2配置文件格式错误。例如配置项的值缺少引号或者有中文空格等不可见字符。使用cat -A命令查看文件检查行尾和空格。用dos2unix命令转换可能从Windows上传过来的配置文件。可能原因3文件权限问题。确保可执行文件有执行权限(x)并且其依赖的配置文件、日志目录有读写权限。问题二服务端进程启动后日志显示数据库连接失败。排查步骤确认MySQL服务是否运行systemctl status mysqld。用配置文件中的账号密码手动在服务器上连接数据库mysql -ucabal_user -p -h 127.0.0.1。这能验证账号密码和网络权限。检查配置文件中数据库连接字符串的DSN数据库名是否正确。检查MySQL是否绑定了127.0.0.1而非0.0.0.0导致非本地连接被拒绝。查看my.cnf中bind-address的设置。问题三客户端能连接到Login Server但卡在“连接世界服务器”或“进入频道”阶段。可能原因1World Server或Channel Server的IP配置错误。检查WorldSvr和ChannelSvr的配置文件中对外宣告的IP(ExternalIP)是否设置成了客户机能访问到的地址。可能原因2防火墙拦截。这是高频问题使用iptables -L -n仔细检查是否开放了38111、38121等端口。也可以临时关闭iptables (systemctl stop iptables) 测试是否为防火墙问题。可能原因3服务器间通信端口未开放。除了客户端端口服务器内部进程间通信的端口如38170, 38180等也需要在防火墙中对localhost或内部IP开放或者直接关闭防火墙进行测试。5.3 基础优化与日常维护服务稳定运行后可以考虑一些优化措施1. 进程监控与自动重启使用Supervisor这样的进程管理工具可以监控每个服务端进程如果崩溃则自动重启。编写一个Supervisor配置文件 (/etc/supervisord.d/cabal.ini) 是比简单Shell脚本更可靠的生产环境方案。2. 日志管理服务端会产生大量日志文件。定期清理或轮转日志是必要的可以使用Linux自带的logrotate工具进行配置避免日志占满磁盘空间。3. 系统资源监控使用top、htop或glances监控CPU和内存使用情况。CABAL服务端特别是ChannelSvr在玩家多时可能消耗较多资源。确保服务器有足够的Swap空间并考虑对关键进程使用nice命令调整其CPU优先级。4. 数据库备份定期备份cabal_db数据库是重中之重。可以使用mysqldump命令制作备份脚本并配合cron定时任务执行。# 简单的备份脚本示例 mysqldump -ucabal_user -pGameDbPassword456! cabal_db /backup/cabal_db_$(date %Y%m%d).sql这次从零开始在CentOS 7上部署CABAL EP8的旅程更像是一次对老旧软件系统与现代操作系统环境兼容性的深度探索。整个过程的关键不在于执行了多少条命令而在于建立了一套清晰的排查思路从系统底层依赖32位库开始到中间件MySQL的配置再到应用层服务端的配置与协同最后是网络与安全的打通。每一个环节的报错信息都是下一步行动的线索。最深的体会是对待这类老程序耐心和细致的日志分析能力比任何现成的教程都更重要。当你看到客户端最终成功连接并创建角色在熟悉的游戏世界里跑动时之前所有繁琐的配置和排错瞬间都变得值得了。

相关新闻

【金仓数据库征文】从零到一:基于 Docker 部署 KingbaseES V9R1C10 的国产数据库实战体验

【金仓数据库征文】从零到一:基于 Docker 部署 KingbaseES V9R1C10 的国产数据库实战体验

摘要下午开始弄的。手头就一台 2 核 1.9 GiB 的腾讯云轻量服务器,平时跑博客,这次拿来当测试机。金仓 V9R1C10 的镜像 731 MB,从官方 OSS 拉,头一回还被防盗链拦了,加上 Referer 才下来。docker load 然后 docker run&…

2026/10/10 5:14:55 阅读更多 →
5W 迷你充电器成本之王|屹晶 EG1123 集成 700V BJT 准谐振原边开关,6W 以内小功率极致性价比方案

5W 迷你充电器成本之王|屹晶 EG1123 集成 700V BJT 准谐振原边开关,6W 以内小功率极致性价比方案

做 5V1A 蓝牙耳机、手环、电动牙刷、LED 小台灯适配器的电源工程师看过来!低端 RCC 方案噪音大、精度差、待机超标,分立 MOS 方案 BOM 多、贴片成本高?屹晶EG1123单芯片集成 700V 高压功率管,准谐振静音原边反馈,最大 …

2026/9/27 0:07:40 阅读更多 →
OBS多平台直播插件:obs-multi-rtmp完全指南,告别重复推流的烦恼

OBS多平台直播插件:obs-multi-rtmp完全指南,告别重复推流的烦恼

OBS多平台直播插件:obs-multi-rtmp完全指南,告别重复推流的烦恼 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp 你是否曾经为了在不同直播平台同时开播而手忙脚乱…

2026/10/2 4:39:20 阅读更多 →

最新新闻

RouterOS WebFig汉化补丁:v7.9–v7.13内核级本地化方案

RouterOS WebFig汉化补丁:v7.9–v7.13内核级本地化方案

简介:本资源是专为中文网络管理员与RouterOS初学者设计的Web界面汉化补丁包,解决英文WebFig界面带来的理解与操作障碍,显著提升中文用户在企业级路由配置中的效率与体验。压缩包共4个文件(257KB),含1个核心…

2026/10/13 3:43:54 阅读更多 →
用NodeXL做动态网络分析:从时间线到演化指标全流程

用NodeXL做动态网络分析:从时间线到演化指标全流程

很多人做社会网络分析,第一步就是把边列表导入软件,出一张五颜六色的网络图,然后开始数节点、算密度、找社群。说实话,静态分析确实入门友好,但我自己在用 NodeXL 的过程中越来越觉得,如果数据里带着时间戳…

2026/10/13 3:43:54 阅读更多 →
SpringAI+MySQL:基于MCP协议的安全数据访问服务实战

SpringAI+MySQL:基于MCP协议的安全数据访问服务实战

前阵子有个需求,要在内部系统里挂一个能回答业务问题的大模型助手,结果发现大部分问题都牵扯到真实订单数据。最开始我有两条路:给模型一个直连数据库的账号,或者给它写一堆REST查询接口。前者太吓人,后者太磨人。后来…

2026/10/13 3:43:54 阅读更多 →
RabbitMQ路由模式实战:用direct交换机实现日志分级精准投递

RabbitMQ路由模式实战:用direct交换机实现日志分级精准投递

我最早用RabbitMQ做基础的消息推送时,只会一把梭用fanout交换机,把所有消息广播出去,也没觉得有什么不对劲。直到做日志分级推送,才被现实狠狠教育了一顿:告警系统只想收error级别,审计系统只想收某个特定业…

2026/10/13 3:43:54 阅读更多 →
Windows端口占用排查与清理实战:从netstat到PowerShell

Windows端口占用排查与清理实战:从netstat到PowerShell

1. 端口占用这件事,到底是怎么回事先从一个最典型的场景说起:本地起了个后端服务,端口习惯性用 8080,结果启动日志直接报 "Port 8080 was already in use"。又或者装了个数据库,怎么都连不上,排查…

2026/10/13 3:43:54 阅读更多 →
Python编程中类与类的关系详解

Python编程中类与类的关系详解

前言 写代码写到一定程度,问题就不再是"怎么写一个类",而是"这几个类之间到底该是什么关系"。常见的关系有三类:继承(inheritance)、组合(composition)、依赖(d…

2026/10/13 3:42:54 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →