创建: 2026/06/30 13:24:48 America/Chicago
作者: admin

本指南安装的内容

本指南安装来自官方的 Verlihub Verlihub/verlihub Ubuntu 服务器上的源树。它使用 CMake 编译 NMDC 集线器服务器,将集线器数据存储在 /var/lib/verlihub ,使用 MariaDB 作为中心表,并通过 systemd 服务启动中心。

如果您想要容器隔离,请使用 Docker 文章。当集线器应直接在 VPS、专用服务器或裸机计算机上运行时,请使用这篇 Ubuntu 文章。

安装前的服务器规划

  • 为中心选择一个公共 DNS 名称,例如 hub.example.org.
  • 选择 NMDC 端口。港口 411/tcp 是传统的。 Verlihub 可以通过 systemd 安全地绑定它,而无需运行为 root。港口 4111/tcp 当您不需要历史港口时,这是一个更简单的替代方案。
  • 决定第一次安装是否仅为普通 NMDC。待普通轮毂稳定后添加 NMDCS。
  • 为该服务保留一个 Linux 帐户: verlihub.
  • 保留一个 MariaDB 数据库和用户: verlihub.
  • 在运行向导之前记下主集线器昵称和密码。

安装 Ubuntu 软件包

官方安装说明列出了 GCC、CMake、MySQL 客户端库、OpenSSL、ICU、Make、ZLib、PCRE、GetText、MaxMindDB、LibIntl、线程、动态加载、Lua 和 Dialog。在 Ubuntu 上,首先安装匹配的软件包。

 sudo apt update
sudo apt install -y \
    build-essential \
    ca-certificates \
    cmake \
    default-libmysqlclient-dev \
    default-mysql-client \
    dialog \
    gettext \
    git \
    libasprintf-dev \
    libicu-dev \
    liblua5.2-dev \
    libmaxminddb-dev \
    libpcre3-dev \
    libssl-dev \
    make \
    mariadb-server \
    pkg-config \
    zlib1g-dev 

启动 MariaDB 并确保它在重新启动后恢复。

 sudo systemctl enable --now mariadb
sudo systemctl status mariadb 

创建 Verlihub Linux 用户

以非特权用户身份运行 Verlihub。不要将集线器运行为 root.

 sudo adduser --system --group --home /var/lib/verlihub --shell /bin/bash verlihub
sudo install -d -o verlihub -g verlihub /var/lib/verlihub
sudo install -d -o verlihub -g verlihub /var/log/verlihub 

verlihub 用户应该只拥有运行时文件。将源文件保存在 /usr/local/src/verlihub ,将二进制文件保存在 /usr/local ,并将数据库管理保留在 MariaDB 下。服务帐户需要写入权限 /var/lib/verlihub/var/log/verlihub; 它不需要 sudo 访问权限。

使用 sudo 作为服务器管理员安装软件包、编译二进制文件并创建 systemd 单元。运行集线器进程本身 verlihub。这种划分很重要,因为集线器接受来自 DC++ 客户端的不受信任的公共流量。

创建 MariaDB 数据库

运行前创建数据库和用户 vh --install。使用真实密码而不是示例值。

 sudo mariadb 
 CREATE DATABASE verlihub CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'verlihub'@'localhost' IDENTIFIED BY 'change-this-password';
GRANT ALL PRIVILEGES ON verlihub.* TO 'verlihub'@'localhost';
FLUSH PRIVILEGES;
EXIT; 

检查应用程序用户是否可以登录。

 mariadb -u verlihub -p verlihub 

下载 Verlihub 源代码

从官方 GitHub 存储库构建。将源文件保存在 /usr/local/src 因此构建树与集线器运行时数据是分开的。

 sudo install -d -o "$USER" -g "$USER" /usr/local/src/verlihub
git clone https://github.com/Verlihub/verlihub.git /usr/local/src/verlihub
cd /usr/local/src/verlihub 

如果您需要特定的版本或提交,请在构建之前检查一下。对于首次安装,请在阅读存储库注释后构建当前的上游分支。

编译并安装 Verlihub

上游安装路径使用 mkdir build, cmake .., make, make install , 和 ldconfig。下面的命令将 Verlihub 安装在 /usr/local.

 mkdir -p build
cd build
cmake .. \
    -DCMAKE_INSTALL_PREFIX=/usr/local \
    -DUSE_TLS_PROXY=OFF \
    -DUSE_FEARTLS_PROXY=OFF
make -j"$(nproc)"
sudo make install
sudo ldconfig 

首次运行时请关闭 TLS 代理选项,除非您已经准备好用于 NMDCS 的代理依赖项、证书、防火墙规则和测试客户端。

运行 vh --install

vh helper 写入 Verlihub 配置,创建或更新集线器表,并存储第一个集线器设置。运行它作为 verlihub Linux 用户这样生成的文件属于服务帐户。

 sudo -iu verlihub
vh --install 
巫师领域使用该值原因
配置文件夹 /var/lib/verlihub 拥有者为 verlihub 服务用户。
数据库主机 localhost MariaDB 在同一个 Ubuntu 服务器上运行。
数据库名称 verlihub 匹配上面创建的数据库。
数据库用户 verlihub 匹配上面创建的 MariaDB 用户。
数据库密码您的 MariaDB 密码允许 Verlihub 读取和写入集线器表。
集线器地址您的公共 DNS 名称这是客户和 hublists 应该发布的地址。
集线器端口 411, 4111 ,或您选择的端口必须匹配 systemd、防火墙和路由器规则。
主用户您的操作员昵称创建具有中心管理访问权限的第一个帐户。

如果向导要求提供 MariaDB 管理员凭据,请使用本地 MariaDB 管理员帐户。在许多 Ubuntu 安装上,这意味着通过运行数据库管理 sudo mariadb 而不是基于密码的 root 登录。

在前台测试集线器

在创建 systemd 之前,从终端启动一次集线器并观察输出。

 vh --run /var/lib/verlihub 

如果可能,打开第二个终端并测试另一台计算机的端口。停止前台进程 Ctrl+C 集线器干净启动后。

不使用 sudo 运行端口 411

Linux 通常保留以下端口 1024 对于特权进程。不要通过以 Verlihub 开头来解决这个问题 sudo vh --run。仅授予服务所需的绑定功能。

下面的 systemd 单元使用 AmbientCapabilities=CAP_NET_BIND_SERVICECapabilityBoundingSet=CAP_NET_BIND_SERVICE。这让 verlihub 用户绑定 411/tcp 而进程仍然在没有 root 权限的情况下运行。如果你使用 4111/tcp ,您可以删除这两条功能线。

避免全局 sysctl net.ipv4.ip_unprivileged_port_start=0 为了这份工作。它更改服务器上每个进程的低端口策略。避免 setcap 除非您完全控制升级,否则在 Verlihub 二进制文件上,因为包或源安装可以替换文件并删除功能。

创建 systemd 服务

创建一个服务文件,以便 Ubuntu 在启动后启动 Verlihub,在崩溃后重新启动它,并将运行时用户限制为集线器文件。

 sudo tee /etc/systemd/system/verlihub.service >/dev/null <<'EOF'
[Unit]
Description=Verlihub NMDC hub server
After=network-online.target mariadb.service
Wants=network-online.target

[Service]
Type=simple
User=verlihub
Group=verlihub
WorkingDirectory=/var/lib/verlihub
ExecStart=/usr/local/bin/vh --run /var/lib/verlihub
AmbientCapabilities=CAP_NET_BIND_SERVICE
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=full
ProtectHome=true
ReadWritePaths=/var/lib/verlihub /var/log/verlihub
Restart=on-failure
RestartSec=5
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
EOF 
 sudo systemctl daemon-reload
sudo systemctl enable --now verlihub
sudo systemctl status verlihub
journalctl -u verlihub -f 

打开集线器端口

如果启用了 UFW,请打开您配置的集线器端口。另请检查 VPS 提供商的防火墙面板。

 sudo ufw allow 411/tcp comment 'Verlihub NMDC'
# Or, if you configured 4111 instead:
sudo ufw allow 4111/tcp comment 'Verlihub NMDC alternate'
sudo ufw status numbered 

对于家庭服务器,将路由器上的相同 TCP 端口转发到 Ubuntu 计算机。对于 NMDCS,请在 TLS 配置并测试完毕后添加安全端口。

验证安装

查看命令寻找什么
服务状态 systemctl status verlihub active (running).
集线器日志 journalctl -u verlihub -n 100 没有数据库登录错误或端口绑定错误。
集线器状态 sudo -iu verlihub vh --status /var/lib/verlihub 助手可以读取集线器配置。
服务用户 systemctl show verlihub -p User -p Group -p NoNewPrivileges 服务报告 User=verlihubNoNewPrivileges=yes.
低端口能力 systemctl show verlihub -p AmbientCapabilities -p CapabilityBoundingSet CAP_NET_BIND_SERVICE 当集线器监听时存在 411/tcp.
集线器端口 ss -ltnp | grep -E ':411|:4111' 配置端口上的侦听 TCP 套接字。
数据库备份 mariadb-dump -u verlihub -p verlihub > verlihub.sql 在更改插件或升级之前存在转储文件。

公共中心的接待礼仪

  • 发布一个可到达的地址。 使用客户端应保留在收藏夹和 hublists 中的 DNS 名称和端口。不要提交临时 IP、无效重定向或同一集线器的多个名称,除非它们服务于不同的协议。
  • 保持 MOTD 有用。 列出中心地址、可用的安全地址、规则、注册命令、操作员联系人和支持站点。用户不需要猜测如何注册或谁拥有该集线器。
  • 不要伪造中心统计数据。 当用户、共享、协议、软件和主题与真实的集线器状态匹配时,公共 hublists 效果最佳。
  • 保持日志的私密性和轮换性。 日志用于滥用处理和故障排除。请勿在公共页面发布用户 IP、私人消息或注册数据。在第一个繁忙的一周之前配置日志轮换。
  • 给主机打补丁。 在替换生产二进制文件之前,应用 Ubuntu 安全更新,保持 MariaDB 支持,并在数据库副本上测试 Verlihub 升级。
  • 限制暴露的端口。 公开暴露集线器端口和任何经过测试的安全集线器端口。保持 MariaDB 的私密性。当您的提供商支持时,将 SSH 限制为管理员 IP。
  • 制定简单的规则。 说明哪些内容是被禁止的,运营商如何处理垃圾邮件或非法内容,以及大量搜索或聊天的机器人会发生什么情况。
  • 实验前备份。 节省 /var/lib/verlihub 以及更改插件、Lua 脚本、区域设置或类权限之前的 MariaDB 数据库。

升级和备份例程

备份数据库并 /var/lib/verlihub 在替换二进制文件之前。

 sudo -iu verlihub tar czf /tmp/verlihub-files-$(date +%F).tar.gz /var/lib/verlihub
mariadb-dump -u verlihub -p verlihub > verlihub-db-$(date +%F).sql
cd /usr/local/src/verlihub
git pull
cd build
cmake ..
make -j"$(nproc)"
sudo systemctl stop verlihub
sudo make install
sudo ldconfig
sudo systemctl start verlihub 

在升级生产中心之前,请阅读上游发行说明。如果表布局发生更改,请首先在数据库副本上测试升级。

常见问题

  • vh --install 无法连接到 MariaDB。 检查数据库名称、用户、密码以及 MariaDB 是否在本地监听。
  • 服务启动和退出。journalctl -u verlihub -n 100。大多数首次运行失败是数据库凭据、缺少配置文件或端口已在使用中。
  • 客户端超时。 检查 UFW、VPS 防火墙、NAT 端口转发和 Verlihub 侦听端口。
  • 端口 411 失败 verlihub 用户。 检查 systemd 功能线,然后运行 sudo systemctl daemon-reloadsudo systemctl restart verlihub。不要使用 sudo 启动集线器。
  • 聊天文字乱码。 匹配您的社区使用的中心区域设置、数据库字符集和客户端编码。
  • NMDCS 尚不可用。 单独构建和配置支持的 TLS 代理路径。在添加安全集线器访问之前,普通 NMDC 应该可以工作。