本指南的构建内容
本指南从官方创建基于 Verlihub 的安装 Docker Verlihub/verlihub 源树。容器编译 Verlihub 和 CMake,运行安装的 vh helper,将 hub 文件存储在 /var/lib/verlihub,并为 Verlihub 数据库使用单独的 MariaDB 容器。
上游存储库当前提供源代码、CMake 构建说明、安装说明和 vh 管理脚本。它不会在存储库根目录中提供现成的 Docker Compose 堆栈,因此最安全的 Docker 设置是从官方源构建您自己的映像并将数据库状态保留在命名卷中。
开始之前
- 在主机上安装 Docker 引擎和 Docker Compose。
- 在运行 Verlihub 向导之前选择公共集线器主机名。例子:
hub.example.org. - 打开主机防火墙上的集线器端口。经典 NMDC 常用
411/tcp; 许多容器部署使用4111/tcp以避免特权低端口。 - 决定持久数据所属的位置。以下示例使用名为 Docker 的卷来进行 MariaDB 和 Verlihub 配置。
- 将数据库密码保密
.env文件。不要将该文件提交到 Git。
创建 Docker 项目目录
为构建文件创建一个目录。该目录可以位于 Docker 主机上的任何位置。
mkdir -p verlihub-docker
cd verlihub-docker
touch Dockerfile docker-compose.yml .env
chmod 600 .env
将数据库值添加到 .env。使用您自己的密码。
MARIADB_ROOT_PASSWORD=change-root-password
MARIADB_DATABASE=verlihub
MARIADB_USER=verlihub
MARIADB_PASSWORD=change-hub-password
创建 Verlihub Docker 文件
官方安装说明列出了 GCC、CMake、MySQL 客户端库、OpenSSL、ICU、Make、ZLib、PCRE、GetText、MaxMindDB 和可选的 Lua 作为重要的构建依赖项。下面的 Docker 文件使用编译器的构建阶段和已安装集线器的较小运行时阶段。
FROM debian:12 AS build
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
ca-certificates \
cmake \
default-libmysqlclient-dev \
g++ \
gettext \
git \
libasprintf-dev \
libicu-dev \
liblua5.2-dev \
libmaxminddb-dev \
libpcre3-dev \
libssl-dev \
make \
zlib1g-dev \
&& rm -rf /var/lib/apt/lists/*
RUN git clone --depth=1 https://github.com/Verlihub/verlihub.git /src/verlihub
RUN cmake -S /src/verlihub -B /src/verlihub/build \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DUSE_TLS_PROXY=OFF \
-DUSE_FEARTLS_PROXY=OFF \
&& cmake --build /src/verlihub/build -j"$(nproc)" \
&& cmake --install /src/verlihub/build
FROM debian:12
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
bash \
ca-certificates \
default-mysql-client \
gettext \
libicu72 \
liblua5.2-0 \
libmaxminddb0 \
libpcre3 \
libssl3 \
procps \
zlib1g \
&& rm -rf /var/lib/apt/lists/*
COPY --from=build /usr/local /usr/local
RUN ldconfig \
&& useradd -r -m -d /var/lib/verlihub -s /bin/bash verlihub
USER verlihub
WORKDIR /var/lib/verlihub
VOLUME ["/var/lib/verlihub"]
EXPOSE 411 4111 4112
CMD ["bash", "-lc", "vh --run /var/lib/verlihub"]
使能够 -DUSE_TLS_PROXY=ON 仅当您还构建和配置 Verlihub 分支所需的 TLS 代理依赖项时。不要打开 TLS 标志并假设 NMDCS 在没有证书、代理二进制文件和经过测试的防火墙规则的情况下工作。
创建 docker-compose.yml
此 Compose 文件在一个专用 Docker 网络上启动 MariaDB 和 Verlihub 容器。它映射主机端口 4111 至集装箱港口 4111。如果您的集线器将侦听不同的值,请更改端口。
services:
db:
image: mariadb:10.11
restart: unless-stopped
env_file: .env
environment:
MARIADB_ROOT_PASSWORD: ${MARIADB_ROOT_PASSWORD}
MARIADB_DATABASE: ${MARIADB_DATABASE}
MARIADB_USER: ${MARIADB_USER}
MARIADB_PASSWORD: ${MARIADB_PASSWORD}
volumes:
- verlihub-db:/var/lib/mysql
healthcheck:
test: ["CMD", "mariadb-admin", "ping", "-h", "127.0.0.1", "-u", "root", "-p${MARIADB_ROOT_PASSWORD}"]
interval: 10s
timeout: 5s
retries: 10
verlihub:
build: .
restart: unless-stopped
env_file: .env
depends_on:
db:
condition: service_healthy
ports:
- "4111:4111/tcp"
volumes:
- verlihub-config:/var/lib/verlihub
command: ["bash", "-lc", "vh --run /var/lib/verlihub"]
volumes:
verlihub-db:
verlihub-config:
建立形象
docker compose build
docker compose up -d db
等到 MariaDB 运行正常后再运行 Verlihub 安装向导。
docker compose ps
docker compose logs -f db
运行 Verlihub 安装向导
这 vh --install 助手是交互式的。运行一次,回答数据库问题,然后将生成的配置保存到已安装的 Verlihub 卷中。
docker compose run --rm verlihub bash
vh --install
当向导请求数据库访问时,请在向导中使用这些值:
| 巫师领域 | 使用价值 | 为什么 |
|---|---|---|
| 数据库名称 | verlihub 或你的 MARIADB_DATABASE | 匹配 Compose 创建的 MariaDB 数据库。 |
| MySQL 用户 | verlihub 或你的 MARIADB_USER | 匹配应用程序数据库用户。 |
| MySQL 密码 | 你的 MARIADB_PASSWORD | 让 Verlihub 创建并读取中心表。 |
| MySQL 主机名 | db | db 是 Compose 服务名称,在 Docker 网络内解析。 |
| 配置文件夹 | /var/lib/verlihub | 这条道路得到了支持 verlihub-config 体积。 |
| 集线器端口 | 4111 | 与上面显示的 Compose 端口映射匹配。 |
| 集线器主机 | 您的公共 DNS 名称 | 这是用户和 hublists 应该发布的地址。 |
如果向导要求提供 MySQL 管理员凭据,请使用 root 和 MARIADB_ROOT_PASSWORD 从 .env。官方 vh 脚本可以创建数据库、授予权限、创建表、写入 dbconfig,注册主用户,并写入初始集线器设置。
启动中心
docker compose up -d
docker compose logs -f verlihub
启动后,从 Docker 主机外部测试公共端口。如果主机防火墙或提供商防火墙阻止该端口,容器可以正常运行,但 DC++ 个客户端仍然无法连接。
docker compose exec verlihub vh --status /var/lib/verlihub
docker compose exec verlihub vh --getconf hub_name /var/lib/verlihub
docker compose exec verlihub vh --getconf listen_port /var/lib/verlihub
日常运作
| 任务 | 命令 | 笔记 |
|---|---|---|
| 停止堆栈 | docker compose down | 停止容器,同时保留命名卷。 |
| 重新启动集线器 | docker compose restart verlihub | 简单配置更改后使用。 |
| 打开一个外壳 | docker compose exec verlihub bash | 用于 vh 命令和日志检查。 |
| 备份 MariaDB | docker compose exec db mariadb-dump -u root -p verlihub > verlihub.sql | 在升级和架构更改之前运行。 |
| 备份集线器文件 | docker run --rm -v verlihub-docker_verlihub-config:/data -v "$PWD":/backup debian:12 tar czf /backup/verlihub-config.tar.gz -C /data . | 捕获 dbconfig、脚本、插件、日志和本地集线器文件。 |
升级 Verlihub 稍后
首先备份数据库和配置卷。然后从最新的官方源重建映像并重新启动集线器。
docker compose exec db mariadb-dump -u root -p verlihub > verlihub-before-upgrade.sql
docker compose build --pull --no-cache verlihub
docker compose up -d verlihub
docker compose logs -f verlihub
如果新的 Verlihub 版本更改了数据库表,请在更换生产中心之前阅读上游版本说明。保留一份经过测试的备份,无需从互联网上提取新图像即可恢复。
常见问题
- 集线器启动,但客户端无法连接。 检查 Compose 端口映射、主机防火墙、提供商防火墙和
listen_port值为 Verlihub。 - 该向导无法连接到 MySQL。 使用
db作为 Verlihub 容器内部的主机名。请勿使用localhost除非 MariaDB 在同一个容器中运行。 - 重建后集线器会丢失设置。 确认
verlihub-config卷安装在/var/lib/verlihub. - 聊天中的角色看起来不正确。 设置您的社区使用的相同数据库字符集和中心区域设置,然后重新启动中心。
- NMDCS 还不能使用。 Verlihub TLS 代理支持需要匹配的代理版本、证书、端口和客户端测试。首先获得简单的 NMDC 稳定。