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

本指南的构建内容

本指南从官方创建基于 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 管理员凭据,请使用 rootMARIADB_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 稳定。