Установка Verlihub в Docker

Для быстрой и надежной установки 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.CP1251

WORKDIR /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 && \
   ldconfig

RUN 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: always

 verlihub:
   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: always

 verlihub_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: always

networks:
 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