Что устанавливает это руководство
Это руководство устанавливает Verlihub с официального сайта. Verlihub/verlihub дерево исходного кода на сервере Ubuntu. Он компилирует хаб-сервер NMDC с CMake, сохраняет данные хаба под /var/lib/verlihub, использует MariaDB для таблиц хаба и запускает хаб через службу systemd.
Используйте статью Docker, если вы хотите изолировать контейнер. Используйте эту статью Ubuntu, если хаб должен работать непосредственно на VPS, выделенном сервере или аппаратном компьютере.
План сервера перед установкой
- Выберите общедоступное 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 после того как хаб запускается чисто.
Запустите порт 411 без sudo
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 | Файл дампа существует до изменения плагинов или обновления. |
Этикет хостинга для публичного хаба
- Опубликуйте один доступный адрес. Используйте DNS-имя и порт, которые клиенты должны хранить в избранном, и hublists. Не отправляйте временные IP-адреса, мертвые перенаправления или несколько имен для одного и того же хаба, если они не обслуживают разные протоколы.
- Сохраняйте MOTD полезным. Укажите адрес хаба, безопасный адрес, если он доступен, правила, команду регистрации, контактную информацию оператора и сайт поддержки. Пользователям не нужно гадать, как зарегистрироваться или кому принадлежит хаб.
- Не подделывайте статистику хаба. Общедоступный hublists работает лучше всего, когда пользователи, общий ресурс, протокол, программное обеспечение и тема соответствуют реальному состоянию хаба.
- Держите журналы конфиденциальными и чередуйтесь. Журналы предназначены для обработки злоупотреблений и устранения неполадок. Не публикуйте IP-адреса пользователей, личные сообщения или регистрационные данные на общедоступных страницах. Настройте ротацию журналов перед первой загруженной неделей.
- Пропатчить хост. Применяйте обновления безопасности Ubuntu, сохраняйте поддержку MariaDB и тестируйте обновления Verlihub на копии базы данных перед заменой рабочих двоичных файлов.
- Ограничьте открытые порты. Публикуйте порт хаба и любой проверенный безопасный порт хаба. Держите MariaDB в тайне. Ограничьте SSH IP-адресами администратора, если ваш провайдер поддерживает это.
- Установите простые правила. Укажите, что запрещено, как операторы справляются со спамом или незаконным контентом и что происходит с ботами, которые заполонили поиск или чат.
- Сделайте резервную копию перед экспериментами. Сохранять
/var/lib/verlihubи базу данных MariaDB перед изменением плагинов, сценариев Lua, настроек локали или разрешений класса.
Процедура обновления и резервного копирования
Сделайте резервную копию базы данных и /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 должен работать до добавления безопасного доступа к хабу.