Пошаговая инструкция по развёртыванию Hub через Docker
Установка через Docker
Рекомендуемый способ для одного сервера. Один Docker-образ Hub (bidder-hub) запускает приложение — REST API и веб-интерфейс на одном порту (8082), — а рядом поднимается PostgreSQL. Отдельного контейнера с фронтендом нет: веб-интерфейс отдаёт сам Hub.
Перед началом убедитесь, что Docker установлен и запущен: приложение Docker (Docker Desktop) должно быть открыто и работать. Без запущенного Docker команды docker compose выполняться не будут.
Шаг 1. Создайте файл docker-compose.yml
Создайте на сервере отдельную папку для Hub (например, bidder-hub) — в ней будут лежать оба файла развёртывания. В этой папке создайте файл docker-compose.yml со следующим содержимым:
x-logging: &default-logging
driver: json-file
options:
max-size: "20m"
max-file: "5"
services:
hub:
image: ${HUB_IMAGE}
ports:
- "${HUB_PORT:-8082}:8082"
- "${HUB_MANAGEMENT_PORT:-8081}:8081"
environment:
TZ: UTC
SPRING_PROFILES_ACTIVE: "PROD,COMPOSE"
MANAGEMENT_SERVER_PORT: "${HUB_MANAGEMENT_PORT:-8081}"
JAVA_OPTS: "${JAVA_OPTS:--Xmx512m -Xms256m -XX:+UseG1GC -Duser.timezone=UTC}"
DATABASE_URL: "${DATABASE_URL:-r2dbc:postgresql://postgres:5432/hub}"
DATABASE_JDBC_URL: "${DATABASE_JDBC_URL:-jdbc:postgresql://postgres:5432/hub}"
DATABASE_USERNAME: "${DATABASE_USERNAME:-hub}"
DATABASE_PASSWORD: "${DATABASE_PASSWORD}"
DATABASE_POOL_INITIAL_SIZE: "${DATABASE_POOL_INITIAL_SIZE:-5}"
DATABASE_POOL_MAX_SIZE: "${DATABASE_POOL_MAX_SIZE:-10}"
DATABASE_POOL_MAX_IDLE_TIME: "${DATABASE_POOL_MAX_IDLE_TIME:-30m}"
HUB_NAME: "${HUB_NAME:-Hub}"
HUB_ADMIN_USERNAME: "${HUB_ADMIN_USERNAME}"
HUB_ADMIN_PASSWORD: "${HUB_ADMIN_PASSWORD}"
CORE_GRPC_HOST: "${CORE_GRPC_HOST}"
CORE_PORTAL_URL: "${CORE_PORTAL_URL}"
CIPHER_SALT: "${CIPHER_SALT}"
LOG_PATH: "/tmp/logs"
volumes:
- ${HUB_LOG_DIR:-./logs}:/tmp/logs
logging: *default-logging
depends_on:
postgres:
condition: service_healthy
restart: unless-stopped
postgres:
image: postgres:16-alpine
command: ["postgres", "-c", "timezone=UTC", "-c", "log_timezone=UTC"]
environment:
POSTGRES_DB: hub
POSTGRES_USER: hub
POSTGRES_PASSWORD: "${DATABASE_PASSWORD}"
PGTZ: UTC
TZ: UTC
ports:
- "${POSTGRES_PORT:-5432}:5432"
volumes:
- hub-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U hub -d hub"]
interval: 5s
timeout: 5s
retries: 5
logging: *default-logging
restart: unless-stopped
volumes:
hub-data:
Шаг 2. Создайте файл .env
Рядом с docker-compose.yml, в той же папке, создайте файл .env — в нём хранятся настройки Hub. Скопируйте в него шаблон ниже:
# Образ Hub. Реестр публичный на чтение — авторизация не нужна.
# Актуальную версию (тег) при необходимости уточните у вендора.
HUB_IMAGE=cr.yandex/crph7576m5ukcpvf6o0t/bidder-hub:1.0.8
# Подключение к Core
CORE_GRPC_HOST=grpc.bidder-box.ru
CORE_PORTAL_URL=app.bidder-box.ru
# База данных — придумайте надёжный пароль
DATABASE_PASSWORD=
# Первый администратор Hub
HUB_ADMIN_USERNAME=admin
HUB_ADMIN_PASSWORD=
# Соль для шифрования — случайная строка (например, openssl rand -hex 32)
CIPHER_SALT=
Адрес образа и параметры подключения к Core уже заполнены — осталось задать пароли и соль (следующий шаг).
Шаг 3. Заполните пароли и соль
Откройте .env любым текстовым редактором и заполните пустые значения:
Обязательные параметры
| Переменная | Что вписать |
|---|---|
DATABASE_PASSWORD | Придумайте надёжный пароль для базы данных |
HUB_ADMIN_USERNAME | Логин первого администратора Hub (по умолчанию admin) |
HUB_ADMIN_PASSWORD | Придумайте надёжный пароль администратора |
CIPHER_SALT | Соль для шифрования данных — просто набор случайных символов |
HUB_IMAGE, CORE_GRPC_HOST и CORE_PORTAL_URL уже заполнены в шаблоне — менять их не нужно.
Как получить CIPHER_SALT. Это просто длинная строка случайных символов — сгенерируйте её любым удобным способом: например, найдите в браузере по запросу «сгенерировать соль онлайн» или просто случайно понажимайте клавиши на клавиатуре.
Сохраните HUB_ADMIN_USERNAME, DATABASE_PASSWORD, HUB_ADMIN_PASSWORD и CIPHER_SALT в безопасном месте. После первого запуска их нельзя изменить без пересоздания базы данных.
Необязательные параметры
| Переменная | По умолчанию | Описание |
|---|---|---|
HUB_PORT | 8082 | Порт хоста для веб-интерфейса и REST API (на нём Hub доступен в браузере) |
HUB_MANAGEMENT_PORT | 8081 | Порт служебных эндпоинтов: проверка состояния (/actuator/health) и метрики |
POSTGRES_PORT | 5432 | Порт, на котором база данных видна снаружи контейнера. Нужен, только если вы подключаетесь к базе напрямую (например, инструментом администрирования). Оставьте пустым — и PostgreSQL будет доступен лишь самому Hub внутри Docker (безопаснее) |
HUB_NAME | Hub | Отображаемое имя Hub в интерфейсе |
JAVA_OPTS | -Xmx512m -Xms256m -XX:+UseG1GC | Параметры JVM |
Параметры базы данных (при использовании внешнего PostgreSQL)
По умолчанию PostgreSQL запускается в отдельном контейнере. Чтобы использовать внешнюю базу данных, задайте все три переменные одновременно — Hub использует и R2DBC (реактивный доступ), и JDBC (для Liquibase-миграций):
| Переменная | По умолчанию | Описание |
|---|---|---|
DATABASE_URL | r2dbc:postgresql://postgres:5432/hub | R2DBC URL базы данных |
DATABASE_JDBC_URL | jdbc:postgresql://postgres:5432/hub | JDBC URL для Liquibase-миграций |
DATABASE_USERNAME | hub | Пользователь базы данных |
Шаг 4. Запустите Hub
Откройте терминал, перейдите командой cd в папку с файлами docker-compose.yml и .env и выполните команду запуска:
docker compose up -d
При первом запуске происходит следующее:
HUB_ADMIN_USERNAME / HUB_ADMIN_PASSWORD.Шаг 5. Проверьте, что Hub запустился
Откройте в браузере веб-интерфейс — его отдаёт сам Hub на том же порту, что и API:
http://localhost:8082/
Если открылась страница входа/привязки Hub — значит, всё работает, можно переходить к активации.
(по желанию, из терминала) проверить ответ Hub можно командой:
curl http://localhost:8082/public/api/v1/activation/status
Если страница не открывается или что-то идёт не так — см. Устранение неполадок.
Просмотр логов
docker compose logs -f hub
docker compose logs -f postgres
Обновление Hub
docker compose exec postgres pg_dump -U hub hub > backup_$(date +%Y%m%d_%H%M%S).sql
HUB_IMAGE в .env на новый тег (выдаёт вендор).docker compose pull hub
docker compose up -d hub
http://localhost:8082/ в браузере или выполните:
curl http://localhost:8082/public/api/v1/activation/status
Откат к предыдущей версии
docker compose stop hub
docker compose exec -T postgres psql -U hub hub < backup_YYYYMMDD_HHMMSS.sql
HUB_IMAGE в .env.docker compose up -d hub
Резервное копирование
docker compose exec postgres pg_dump -U hub hub > backup_$(date +%Y%m%d_%H%M%S).sql
Восстановление:
docker compose exec -T postgres psql -U hub hub < backup_YYYYMMDD_HHMMSS.sql
Перед обновлением Hub всегда создавайте резервную копию базы данных.
Следующий шаг
После успешного запуска активируйте Hub и подключитесь к Core.