![]()
Для быстрой и надежной установки NMDC-хаба Verlihub в Docker лучше всего использовать связку с базой данных MariaDB или Mysql через Docker Compose. Поскольку готовые официальные образы Verlihub в Docker Hub часто устаревают, самым надежным способом является сборка собственного легковесного контейнера на базе Ubuntu/Debian
Установка docker:
sudo snap install docker
Для начала создадим каталог:
mkdir ~/DOCKER
Переходим в него:
cd ~/DOCKER
Создаем проэкт:
mkdir project_hub
Важно: Чтобы вы могли создавать там файлы без sudo, сразу после этого дайте своему пользователю права на эту папку:
sudo chown $USER:$USER /project_hub
Переходим в нее в неё:
cd project_hub
Скачивание verlihub:
git clone http://github.com/verlihub/verlihub/
Создаем Dockerfile.verlihub:
FROM ubuntu:20.04
# Отключаем интерактивные диалоги apt
ENV DEBIAN_FRONTEND=noninteractive# Устанавливаем базовые утилиты, включая software-properties-common для работы с PPA
RUN apt-get update && apt-get install -y \
software-properties-common \
&& rm -rf /var/lib/apt/lists/*# Добавляем официальный PPA репозиторий со свежими версиями Go для Ubuntu
RUN add-apt-repository -y ppa:longsleep/golang-backports && apt-get update# Устанавливаем ВСЕ зависимости C++ и стабильный пакет golang-go из репозитория
# ДОБАВЛЕН пакет locales для работы с кодировками
RUN apt-get install -y \
libpcre3-dev \
libssl-dev \
libmysqlclient-dev \
g++ \
gcc \
libmaxminddb-dev \
libicu-dev \
gettext \
libasprintf-dev \
make \
cmake \
liblua5.2-dev \
golang-go \
git \
locales \
&& rm -rf /var/lib/apt/lists/*# Генерация русской локали CP1251
RUN sed -i -e 's/# ru_RU.CP1251 CP1251/ru_RU.CP1251 CP1251/' /etc/locale.gen && \
locale-gen# Установка переменных окружения для Verlihub
ENV LANG=ru_RU.CP1251
ENV LANGUAGE=ru_RU:ru
ENV LC_ALL=ru_RU.CP1251WORKDIR /usr/src/verlihub
# Копируем ваш локальный каталог с исходниками хаба
COPY ./verlihub .# Автоматическая сборка: CMake сам найдет g++, gcc и установленный из PPA Go
RUN mkdir build && cd build && \
cmake -DUSE_TLS_PROXY=ON -DENABLE_TESTS=OFF .. && \
make -j$(nproc) && \
make install && \
ldconfigRUN mkdir -p /root/.verlihub
EXPOSE 411 4111
Теперь создаем docker-compose.yml:
name: verlihub_platform
services:
db:
image: mysql:8.0
container_name: verlihub_db
command: --default-authentication-plugin=mysql_native_password --bind-address=0.0.0.0 --sql-mode=""
ports:
- "3311:3306"
environment:
MYSQL_ROOT_PASSWORD: "ваш пароль"
MYSQL_DATABASE: "verlihub"
volumes:
- ./db_data:/var/lib/mysql
- /etc/localtime:/etc/localtime:ro
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p ваш пароль"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
networks:
- verlihub_net
restart: alwaysverlihub:
build:
context: .
dockerfile: Dockerfile.verlihub
container_name: verlihub_app
hostname: ваш домен
tty: true
stdin_open: true
ports:
- "411:4111"
- "4111:411"
volumes:
- ./verlihub_config:/root/.verlihub
- ./verlihub_scripts:/root/.verlihub/scripts
- /etc/localtime:/etc/localtime:ro
ulimits:
nofile:
soft: 65535
hard: 65535
networks:
- verlihub_net
depends_on:
db:
condition: service_healthy
command: verlihub
restart: alwaysverlihub_pma:
image: phpmyadmin:latest
container_name: verlihub_pma
entrypoint: >
bash -c "a2enmod ssl && a2ensite default-ssl && exec /docker-entrypoint.sh apache2-foreground"
ports:
- "8080:80"
- "9444:443"
environment:
PMA_HOST: db
PMA_PORT: 3306
PMA_ARBITRARY: 1
UPLOAD_LIMIT: 512M
MAX_EXECUTION_TIME: 600
volumes:
- /etc/letsencrypt/ваш/путь/до/сертификатов/fullchain.pem:/etc/ssl/certs/ssl-cert-snakeoil.pem:ro
-/etc/letsencrypt/ваш/путь/до/сертификатов/privkey.pem:/etc/ssl/private/sslcert-snakeoil.key:ro
- /etc/localtime:/etc/localtime:ro
networks:
- verlihub_net
depends_on:
db:
condition: service_healthy
restart: alwaysnetworks:
verlihub_net:
driver: bridge
ОБЯЗАТЕЛЬНО изменить пароль root и путь до сертификатов на свои:
это полностью рабочий конфиг на Ubuntu 22.04
Погнали:
docker compose up --build
После успешного завершения работы скрипта vh-i контейнер закроется, сохранив настройки в созданный volume. Теперь можно запустить весь стек в фоновом режиме на постоянной основе:
docker compose up -d
Просмотр логов работы хаба:
docker compose logs -f verlihub
Если внутри контейнера система сообщит, что утилита vh не найдена в системном пути, укажите её полный путь к месту установки:
docker compose run --rm verlihub /usr/local/bin/vh -i
Если установщик vh -i запрашивает root-доступ для создания базыИногда утилита пытается создать базу данных и пользователя с нуля. Если на этом этапе возникает ошибка прав, используйте учетные данные root:Хост: verlihub-dbПользователь: rootПароль:это нужно если дампа базы данных нет, если он есть то нужно просто импортировать базу но лучше пройти vh -i а потом сделать импорт, vh-i создаст все необходимые каталоги
Если все удачно запустилось погнали дальше Обновляем geo-ip:
vh -g
Переводим verlihub на русский язык:
locale-gen ru_RU.CP1251
echo "locale = ru_RU.CP1251" >> /etc/verlihub/dbconfig (иногда требуется в ручную отредактироать строчку в dbconfig :db_charset = latin1 )
Скрипты для verlihub:
Переходим в нужную папку:
cd /DOCKER/project_hub/verlihub_config/scripts
Скачивем скрипты:
wget https://ledo.feardc.net/dev/ledokol.lua
wget https://ledo.feardc.net/dev/ledo_ru.lang
Включаем скрипты через dc-клиент:
!modplug lua -a 1
!onplug lua
Запуск tls
набираем в клиенте !gc
listen_ip =0.0.0.0
listen_port = 411
extra_listen_ports =
tls_listen_ip = 0.0.0.0
tls_listen_port = 411
tls_only_mode = 0 (принудительное перенаправление пользователей на протокол шифрования) 1 вкл 0 выкл
not_tls_redirect = nmdcs://ваш.домен:порт
tls_detect_wait = 600
tls_cert_file = hub.crt
tls_key_file = hub.key
tls_cert_org = Verlihub
tls_cert_mail = verlihub@localhost
tls_cert_host = ваш домен
tls_min_ver = 2
tls_buf_size = 10
tls_err_log = 0