Docker арқылы Hub-ты орналастыруға арналған қадамдық нұсқаулық

Docker арқылы орнату

Бір сервер үшін ұсынылатын әдіс. Hub-тың бір Docker-образы (bidder-hub) қосымшаны — REST API мен веб-интерфейсті бір портта (8082) — іске қосады, ал қатарына PostgreSQL көтеріледі. Фронтенді бар жеке контейнер жоқ: веб-интерфейсті Hub өзі береді.

i

Бастамас бұрын Docker орнатылып, іске қосылғанына көз жеткізіңіз: Docker қосымшасы (Docker Desktop) ашық және жұмыс істеуі керек. Іске қосылмаған Docker-де docker compose командалары орындалмайды.

1-қадам. docker-compose.yml файлын жасаңыз

Серверде Hub үшін бөлек қалта жасаңыз (мысалы, bidder-hub) — онда орналастыру файлдарының екеуі де жатады. Осы қалтада келесі мазмұнмен docker-compose.yml файлын жасаңыз:

yaml
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 баптаулары сақталады. Төмендегі үлгіні оған көшіріңіз:

dotenv
# 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_USERNAMEHub-тің алғашқы әкімшісінің логині (әдепкі бойынша admin)
HUB_ADMIN_PASSWORDӘкімшінің сенімді құпия сөзін ойлап табыңыз
CIPHER_SALTДеректерді шифрлауға арналған тұз — кездейсоқ символдар жиынтығы
i

HUB_IMAGE, CORE_GRPC_HOST және CORE_PORTAL_URL үлгіде толтырылған — оларды өзгертудің қажеті жоқ.

i

CIPHER_SALT қалай алу керек. Бұл жай ғана кездейсоқ символдардың ұзын жолы — оны кез келген ыңғайлы тәсілмен генерациялаңыз: мысалы, браузерден «онлайн тұз генерациялау» сұрауы бойынша табыңыз немесе жай ғана пернетақтада кездейсоқ пернелерді басыңыз.

!

HUB_ADMIN_USERNAME, DATABASE_PASSWORD, HUB_ADMIN_PASSWORD және CIPHER_SALT мәндерін қауіпсіз жерде сақтаңыз. Алғашқы іске қосудан кейін оларды дерекқорды қайта жасамай өзгертуге болмайды.

Міндетті емес параметрлер

АйнымалыӘдепкі бойыншаСипаттамасы
HUB_PORT8082Веб-интерфейс пен REST API үшін хост порты (Hub браузерде осында қолжетімді)
HUB_MANAGEMENT_PORT8081Қызметтік эндпоинттер порты: жағдайды тексеру (/actuator/health) және метрикалар
POSTGRES_PORT5432Дерекқор контейнерден сыртқа қолжетімді болатын порт. Дерекқорға тікелей қосылатын болсаңыз ғана керек (мысалы, әкімшілік құралымен). Бос қалдырыңыз — сонда PostgreSQL Docker ішінде тек Hub үшін қолжетімді болады (қауіпсіздеу)
HUB_NAMEHubИнтерфейсте Hub-тің көрсетілу атауы
JAVA_OPTS-Xmx512m -Xms256m -XX:+UseG1GCJVM параметрлері

Дерекқор параметрлері (сыртқы PostgreSQL қолданғанда)

Әдепкі бойынша PostgreSQL жеке контейнерде іске қосылады. Сыртқы дерекқорды қолдану үшін үш айнымалыны бір мезгілде беріңіз — Hub R2DBC-ті (реактивті қолжетімділік) де, JDBC-ті (Liquibase-миграциялары үшін) де пайдаланады:

АйнымалыӘдепкі бойыншаСипаттамасы
DATABASE_URLr2dbc:postgresql://postgres:5432/hubДерекқордың R2DBC URL-і
DATABASE_JDBC_URLjdbc:postgresql://postgres:5432/hubLiquibase-миграциялар үшін JDBC URL
DATABASE_USERNAMEhubДерекқор пайдаланушысы

4-қадам. Hub-ты іске қосыңыз

Терминалды ашып, cd командасымен docker-compose.yml және .env файлдары бар қалтаға өтіп, іске қосу командасын орындаңыз:

bash
docker compose up -d

Алғашқы іске қосу кезінде келесілер орындалады:

1
PostgreSQL инициализацияланады.
2
Liquibase дерекқор миграцияларын автоматты түрде қолданады.
3
HUB_ADMIN_USERNAME / HUB_ADMIN_PASSWORD-тен әкімші тіркелгісі жасалады.
4
JWT-кілттер жұбы генерацияланып сақталады (шифрланған).
5
Hub Core-мен gRPC-байланыс орнатады (автоматты қайталанған әрекеттермен).

5-қадам. Hub іске қосылғанын тексеріңіз

Браузерде веб-интерфейсті ашыңыз — оны Hub өзі API-мен бірдей портта береді:

http://localhost:8082/

Егер Hub-тың кіру/байланыстыру беті ашылса — бәрі жұмыс істейді, белсендіруге көшуге болады.

(қаласаңыз, терминалдан) Hub жауабын келесі командамен тексеруге болады:

bash
curl http://localhost:8082/public/api/v1/activation/status

Егер бет ашылмаса немесе бірдеңе дұрыс болмаса — қараңыз: Ақауларды жою.

Логтарды қарау

bash
docker compose logs -f hub
docker compose logs -f postgres

Hub-ты жаңарту

1
Дерекқордың резервтік көшірмесін жасаңыз:
bash
docker compose exec postgres pg_dump -U hub hub > backup_$(date +%Y%m%d_%H%M%S).sql
2
.env-тегі HUB_IMAGE мәнін жаңа тегке жаңартыңыз (вендор береді).
3
Жаңа образды жүктеп, іске қосыңыз:
bash
docker compose pull hub
docker compose up -d hub
4
Hub қайтадан қолжетімді екенін тексеріңіз — браузерде http://localhost:8082/ мекенжайын ашыңыз немесе орындаңыз:
bash
curl http://localhost:8082/public/api/v1/activation/status

Алдыңғы нұсқаға қайту

1
Hub-ты тоқтатыңыз:
bash
docker compose stop hub
2
Дерекқорды резервтік көшірмеден қалпына келтіріңіз:
bash
docker compose exec -T postgres psql -U hub hub < backup_YYYYMMDD_HHMMSS.sql
3
.env-тегі HUB_IMAGE-тің алдыңғы мәнін қайтарыңыз.
4
Hub-ты іске қосыңыз:
bash
docker compose up -d hub

Резервтік көшірме

bash
docker compose exec postgres pg_dump -U hub hub > backup_$(date +%Y%m%d_%H%M%S).sql

Қалпына келтіру:

bash
docker compose exec -T postgres psql -U hub hub < backup_YYYYMMDD_HHMMSS.sql
!

Hub-ты жаңартар алдында әрқашан дерекқордың резервтік көшірмесін жасаңыз.

Келесі қадам

Сәтті іске қосудан кейін Hub-ты белсендіріп, Core-ға қосыңыз.