Перейти к содержанию

Установка через Docker Compose

Требования к вычислительной мощности

Для функционирования Нимбиус требуется минимальные технические требования:

  • 4 физических ядра ЦП;
  • 16 ГБ RAM;
  • 16 ГБ дискового пространства.

Требования к установленному ПО

Для запуска Нимбиус необходимо предварительно установить Docker до актуальной версии.

$ sudo docker version

Client:
    Version:            20.10.21
    API version:        1.41
    Go version:         go1.18.1
    Git commit:         20.10.21-0ubuntu1\~22.04.3
    Built:              Thu Apr 27 05:57:17 2023
    OS/Arch:            linux/amd64
    Context:            default
    Experimental:       true

Server:
    Engine:
        Version:        20.10.21
        API version:    1.41 (minimum version 1.12)
        Go version:     go1.18.1
        Git commit:     20.10.21-0ubuntu1\~22.04.3
        Built:          Thu Apr 27 05:37:25 2023
        OS/Arch:        linux/amd64
        Experimental:   false
    containerd:
        Version: 1.6.12-0ubuntu1\~22.04.3
        GitCommit:
    runc:
        Version: 1.1.7-0ubuntu1\~22.04.2
        GitCommit:
    docker-init:
        Version: 0.19.0
        GitCommit:

Содержимое дистрибутива

В состав дистрибутива входят:

  • data - директория, в которой хранятся служебные файлы приложений;
  • docker-compose.yaml - файл для развертывания продукта;
  • .env - переменные конфигурации Нимбиус;
  • images.tar - образы контейнеров Нимбиус;
  • terraform-assets - сформированные манифесты terraform для работы с Yandex.Cloud.

Конфигурации переменных хранятся в файле «.env»

## Базовая конфигурация:

# Тег образов компонентов
NIMBIUS_BASE_IMAGE_TAG=<хх.хх.хх>
NIMBIUS_DB_IMAGE_TAG=<хх.хх.хх>
NIMBIUS_UI_IMAGE_TAG=<хх.хх.хх>
NIMBIUS_BILLING_IMAGE_TAG=<хх.хх.хх>
NIMBIUS_TF_IMAGE_TAG=<хх.хх.хх>
NIMBIUS_KEYCLOAK_IMAGE_TAG=<хх.хх.хх>

# Сервер БД. По умолчанию используется контейнер с именем хоста 'nimbius-db'
DB_SRV=nimbius-db
# Порт БД
DB_PORT=5432
# Пользователь БД
DB_USER=miq
# Пароль БД
DB_PASSWD=miq
# Имя БД. По умолчанию при первом запуске сервер
# генерирует БД с именем 'vmdb_production'
DB_NAME=vmdb_production
# Публичный IP или имя хоста
PUBLIC_IP={{your_public_ip}}
# Публичный порт портала администратора
PUBLIC_ADMIN_PORT=8443
# Публичный порт портала пользователя
PUBLIC_USER_PORT=443
# Устанавливать пакет дополнение Нимбиус
# при первичной инициализации БД (включено=true)
EXT_PACK_INSTALL=true

## Конфигурация сервиса биллинга:
BILLING_DB_NAME=billing
BILLING_DB_USER=billing
BILLING_DB_PASSWD=billing
BILLING_PUBLIC_PORT=3000

## Конфигурация сервиса Terraform:
# Пользователь и пароль БД для сервиса
TF_DB_USER=terraform
TF_DB_PASSWD=terraform-password

## Конфигурация сервиса Keycloak:
# Применять ли конфигурацию для httpd:
KEYCLOAK_ENABLED=true
# DB name for keycloak data
KC_DB_NAME=keycloak
# Пользователь и пароль БД
KC_DB_USER=keycloak
KC_DB_PASSWD=keycloak
# Публичный порт веб-интерфейса
KC_SERVER_PORT=7788
# Имя пользователя и пароль администратора Keycloack
KC_ADMIN_USERNAME=keycloak 
KC_ADMIN_PASSWORD=keycloak

# Переменные для конфига httpd:
OIDC_PROVIDER_METADATA_URL=https://nimbius
OIDC_CLIENT_ID=nimbius
OIDC_CLIENT_SECRET=Ni24MB42IuS
OIDC_OAUTH_INTROSPECTION_ENDPOINT=https://nimbius
KC_REALM_API_PATH=https://nimbius/realms/nimbius-realm

# EVM RESTART TIME(HH24:MM). Default: 03:00 everyday
# EVM_AUTORESTART = true - перезапуск включен
# EVM_AUTORESTART = false - перезапуск выключен
EVM_AUTORESTART="false"
EVM_RESTART_HOUR=03
EVM_RESTART_MINUTE=30

Примечание

Вместо тега <хх.хх.хх> необходимо использовать последний актуальный релиз.

Если переменная EVM_AUTORESTART отсутствует в .env, то перезапуск отключен.

Если переменные EVM_RESTART_HOUR и EVM_RESTART_MINUTE отсутствуют в .env, то перезапуск будет выполняться в 03:00 по времени контейнера.

Инструкции развертывания из файла docker-compose.yaml

version: "3.9"
services:
  nimbius-db:
    image: registry.nimbius.tech/nimbius-public/containers-public/postgres:${NIMBIUS_DB_IMAGE_TAG}
    restart: always
    container_name: nimbius-db
    environment:
      POSTGRES_USER: ${DB_USER}
      POSTGRES_PASSWORD: ${DB_PASSWD}
    ports:
      - "5432:5432"
    volumes:
      - "./data/db-data:/var/lib/postgresql/data:rw,z"

  nimbius-base:
    image: registry.nimbius.tech/nimbius-public/containers-public/nimbius-base:${NIMBIUS_BASE_IMAGE_TAG}
    restart: always
    container_name: nimbius-core
    hostname: nimbius-server
    environment:
      DATABASE_URL: postgresql://${DB_USER}:${DB_PASSWD}@${DB_SRV}/${DB_NAME}?encoding=utf8&pool=5&wait_timeout=5
      DATABASE_SRV: postgresql://${DB_USER}:${DB_PASSWD}@${DB_SRV}:${DB_PORT}/
      EXT_PACK_INSTALL: ${EXT_PACK_INSTALL}
      DB_SRV: ${DB_SRV}
      DB_NAME: ${DB_NAME}
      DB_USER: ${DB_USER}
      DB_PASSWD: ${DB_PASSWD}
      OIDC_PROVIDER_METADATA_URL: ${OIDC_PROVIDER_METADATA_URL}
      OIDC_CLIENT_ID: ${OIDC_CLIENT_ID}
      OIDC_CLIENT_SECRET: ${OIDC_CLIENT_SECRET}
      OIDC_OAUTH_INTROSPECTION_ENDPOINT: ${OIDC_OAUTH_INTROSPECTION_ENDPOINT}
      KEYCLOAK_ENABLED: ${KEYCLOAK_ENABLED}
      NIMBIUS_APPLIANCE: ${PUBLIC_IP}:${PUBLIC_ADMIN_PORT}
      EVM_AUTORESTART: ${EVM_AUTORESTART}
      EVM_RESTART_HOUR: ${EVM_RESTART_HOUR}
      EVM_RESTART_MINUTE: ${EVM_RESTART_MINUTE}
    ports:
      - ${PUBLIC_ADMIN_PORT}:443
    depends_on:
      - "nimbius-db"
    links:
      - nimbius-db:db
    volumes:
      - "./data/certs:/var/www/miq/vmdb/certs/:rw,z"
      - "./data/ext-pack/:/var/www/miq/vmdb/nimbius/:z"
      - "./data/ansible/:/etc/ansible/:z"
      - "./data/GUID:/var/www/miq/vmdb/GUID:rw"

  nimbius-ui:
    image: registry.nimbius.tech/nimbius-public/containers-public/nimbius-ui:${NIMBIUS_UI_IMAGE_TAG}
    restart: always
    container_name: nimbius-ui
    environment:
      VITE_KEYCLOAK_ENABLED: ${KEYCLOAK_ENABLED}
      VITE_KEYCLOAK_API: ${KC_REALM_API_PATH}
      VITE_KEYCLOAK_CLIENT: ${OIDC_CLIENT_ID}
      VITE_KEYCLOAK_PASSWORD: ${OIDC_CLIENT_SECRET}
    volumes:
      - "./data/certs:/etc/nginx/certs:z"
    ports:
      - ${PUBLIC_USER_PORT}:443
    depends_on:
      - "nimbius-base"
    links:
      - nimbius-base:nimbius

  nimbius-billing:
    image: registry.nimbius.tech/nimbius-public/containers-public/nimbius-billing:${NIMBIUS_BILLING_IMAGE_TAG}
    restart: always
    container_name: nimbius-billing
    environment:
      DB_SRV: ${DB_SRV}
      DB_PORT: ${DB_PORT}
      DB_NAME: ${DB_NAME}
      DB_USER: ${DB_USER}
      DB_PASSWD: ${DB_PASSWD}
      DATABASE_SRV: postgresql://${DB_USER}:${DB_PASSWD}@${DB_SRV}:${DB_PORT}/
      BILLING_DB: postgresql://${BILLING_DB_USER}:${BILLING_DB_PASSWD}@${DB_SRV}:${DB_PORT}/${BILLING_DB_NAME}
      BILLING_DB_NAME: ${BILLING_DB_NAME}
      BILLING_DB_USER: ${BILLING_DB_USER}
      BILLING_DB_PASSWD: ${BILLING_DB_PASSWD}
      PGRST_DB_URI: postgresql://postgrest:${BILLING_DB_PASSWD}@${DB_SRV}:${DB_PORT}/${BILLING_DB_NAME}
      PGRST_DB_ANON_ROLE: billing 
      PGRST_DB_SCHEMAS: billing
    ports:
      - ${BILLING_PUBLIC_PORT}:3000
    depends_on:
      - "nimbius-db"
      - "nimbius-base"
    links:
      - nimbius-db:nimbius-db
    volumes:
      - "./data/billing-migrations:/migrations"

  nimbius-tf:
    image: registry.nimbius.tech/nimbius-public/containers-public/nimbius-tf:${NIMBIUS_TF_IMAGE_TAG}
    restart: always
    container_name: nimbius-terraform
    environment:
      TZ: 'Europe/Moscow'
      DB_SRV: ${DB_SRV}
      DB_PORT: ${DB_PORT}
      DB_USER: ${DB_USER}
      DB_PASSWD: ${DB_PASSWD}
      TF_DB_USER: ${TF_DB_USER}
      TF_DB_PASSWD: ${TF_DB_PASSWD}
      TF_VAR_DB_USER: ${TF_DB_USER}
      TF_VAR_DB_PASSWD: ${TF_DB_PASSWD}
      TF_VAR_DB_SRV: ${DB_SRV}
    links:
      - nimbius-db:nimbius-db
    depends_on:
      - "nimbius-db"
      - "nimbius-base"
    volumes:
      - "./data/tf-infra:/infra:rw,z"
    working_dir: /infra

  nimbius-keycloak:
    image: registry.nimbius.tech/nimbius-public/containers-public/nimbius-keycloak:${NIMBIUS_KEYCLOAK_IMAGE_TAG}
    restart: always
    container_name: nimbius-keycloak 
    depends_on:
      - "nimbius-db"
    environment:
        NIMBIUS_DB_USER: ${DB_USER}
        NIMBIUS_DB_PASSWD: ${DB_PASSWD}
        NIMBIUS_DB_PORT: ${DB_PORT}
        DB_ADDR: ${DB_SRV}
        DB_DATABASE: ${KC_DB_NAME}
        KC_DB: postgres
        KC_DB_URL: jdbc:postgresql://${DB_SRV}:${DB_PORT}/${KC_DB_NAME}
        KC_DB_USERNAME: ${KC_DB_USER}
        KC_DB_PASSWORD: ${KC_DB_PASSWD}
        KC_HOSTNAME_URL: https://${PUBLIC_IP}:${KC_SERVER_PORT}
        KC_HOSTNAME_ADMIN_URL: https://${PUBLIC_IP}:${KC_SERVER_PORT}
        KEYCLOAK_ADMIN: ${KC_ADMIN_USERNAME}
        KEYCLOAK_ADMIN_PASSWORD: ${KC_ADMIN_PASSWORD}
        KEYCLOAK_ENABLED: ${KEYCLOAK_ENABLED}
    ports:
      - ${KC_SERVER_PORT}:8443
    volumes:
      - "./data/certs:/opt/certs/:z"

Установка сертификатов

При использовании корпоративного или внешнего СА, положить сертификаты SSL ~/nimbius/data/certs

Важно

Если не выполнить это действия, будут сгенерированы самоподписанные сертификаты!

Процедура запуска платформы через docker-compose

Перед первым запуском необходимо:

  1. скопировать дистрибутив на целевой хост и распаковать.

    tar -xzf nimbius.tgz
    
  2. добавить образы контейнеров в локальный registry.

    docker load -i images.tar
    
  3. В файле .env изменить необходимые параметры.

  4. (Опциально) При использовании корпоративного или внешнего СА, положить сертификаты SSL ~/nimbius/data/certs.

    Важно

    Если не выполнить это действия, будут сгенерированы самоподписанные сертификаты!

  5. Выполнить команду для запуска сервиса

    docker-compose up --d
    

Сервис доступен по адресу

https://<FQDN>:8443

  • Логин по умолчанию: admin
  • Пароль по умолчанию: smartvm

Cервис «Keycloak» доступен по адресу

https://<FQDN>:7788

  • Логин по умолчанию: keycloak
  • Пароль по умолчанию: keycloak

Примечание

Для изменения портов сервисов на собственные необходимо изменить значения PUBLIC_ADMIN_PORT, KC_SERVER_PORT в файле .env

Пояснение к пакету расширений Нимбиус

Пакет расширений загружается при первом запуске сервиса. Для этого необходимо выставить значение true параметра EXT_PACK_INSTALL в файле .env. Если значение параметра false, при запуске сервиса пакет не будет автоматически загружен.

После успешной загрузки пакета расширений в интерфейсе Нимбиус будут присутствовать перечень услуг-шаблонов и дополнительные домены (расширения), как на рисунке ниже.

Перечень услуг-шаблонов:

  • «Виртуальная машина»;
  • «Создание ВМ в публичном облаке Яндекс.Облако»;
  • «Создание ВМ в публичном облаке Селектел»;

Рисунок 1

Процедура остановки платформы

Процедуры запуска и остановки платформы состоят из следующих процессов:

  1. Процессы серверной части
    Для запуска необходимо запустить базу данных затем платформу.
    Для остановки необходимо остановить платформу затем базу данных.

  2. Процессы модуля приложения
    Для запуска необходимо запустить контейнер платформы.

    # sudo docker start NIMBIUS_CONTAINER_NAME
    
    Для остановки необходимо остановить контейнер платформы.
    # sudo docker stop NIMBIUS_CONTAINER_NAME
    
    Для проверки работоспособности сервисов подключитесь к консоли контейнера с приложением и введите команду appliance_console.