本指南安装的内容
本指南安装来自官方的 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_SERVICE 和 CapabilityBoundingSet=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=verlihub 和 NoNewPrivileges=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-reload和sudo systemctl restart verlihub。不要使用 sudo 启动集线器。 - 聊天文字乱码。 匹配您的社区使用的中心区域设置、数据库字符集和客户端编码。
- NMDCS 尚不可用。 单独构建和配置支持的 TLS 代理路径。在添加安全集线器访问之前,普通 NMDC 应该可以工作。