# Установка на сервер

{% hint style="info" %}
Dbrain — серверное решение. Если хотите его протестировать, [воспользуйтесь веб-демо](https://latest.dbrain.io). Мы не используем долговременные хранилища данных. Все входящие файлы передаются на сервер по защищённому протоколу, обрабатываются в оперативной памяти и удаляются сразу после возврата результатов пользователю. В тестовых целях пригодится [паспорт России из Википедии](https://ru.wikipedia.org/wiki/%D0%9F%D0%B0%D1%81%D0%BF%D0%BE%D1%80%D1%82_%D0%B3%D1%80%D0%B0%D0%B6%D0%B4%D0%B0%D0%BD%D0%B8%D0%BD%D0%B0_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B9%D1%81%D0%BA%D0%BE%D0%B9_%D0%A4%D0%B5%D0%B4%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8#/media/%D0%A4%D0%B0%D0%B9%D0%BB:Pasport_RF.jpg)
{% endhint %}

## Функциональность локальной версии

Локальная версия в отличие от облачной имеет ограниченную функциональность.

Поддерживаются:

* [Классификация документов](https://doc.dbrain.io/dbrain-official/document-classification)
* [Проверка документов на признаки подделки](https://doc.dbrain.io/dbrain-official/proverka-dokumentov/priznaki-poddelki)
* [Базовый OCR](https://doc.dbrain.io/dbrain-official/fulltext-recognition)
* [Извлечение данных из документов](https://doc.dbrain.io/dbrain-official/izvlechenie-dannykh):
  * Россия: паспорт, главный разворот, печатный образец — `passport_main`
  * Россия: паспорт, главный разворот, рукописный образец — `passport_main_handwritten`
  * Россия: паспорт, место жительства, печатный штамп — `passport_registration`
  * Россия: паспорт, место жительства, рукописный штамп — `passport_registration_handwritten`
  * Россия: паспорт, место жительства, штамп о снятии с регистрации — `passport_registration_deregistered`
  * Россия: Водительское удостоверение, лицевая сторона — `driver_license_2011_front`
  * Россия: Водительское удостоверение, обратная сторона, образец 2011 года — `driver_license_2011_back`
  * Россия: Водительское удостоверение, обратная сторона, образец 2014 года — `driver_license_2014_back`
  * Россия: СТС, лицевая сторона — `vehicle_registration_certificate_front`
  * Россия: СТС, лицевая сторона — `vehicle_registration_certificate_back`
  * Россия: СНИЛС образца 1996 года — `snils_front`
  * Россия: СНИЛС образца 2003 года — `insurance_plastic`
  * Россия: СНИЛС образца 2019 года — `adi_reg`
  * Россия: ИНН физлица — `inn_person`
  * Россия: свидетельство о рождении — `birth_certificate`
  * Россия: свидетельство о браке — `marriage_certificate`
  * Россия: ПТС, лицевая сторона — `pts_front`
  * Россия: ПТС, обратная сторона — `pts_back`
  * Банковская карта — `bank_card`

## Требования к аппаратной части

#### Сценарии использования:

{% hint style="info" %}
Оценили скорость распознавания на изображениях этих документов в формате JPEG:

* Паспорт РФ — главный разворот
* Паспорт РФ — прописка с печатными и рукописными штампами
* Водительское удостоверение — лицевая сторона
* Водительское удостоверение — обратная сторона 2011 и 2014 годов
* СТС — лицевая и обратная стороны
* СНИЛС — образец 1996 года
  {% endhint %}

{% hint style="danger" %}
Мы не гарантируем работоспособность сервиса на архитектурах, выпущенных до 2011 года. Рекомендуем использовать процессоры не старше [Sandy Bridge](https://en.wikipedia.org/wiki/Sandy_Bridge) у Intel и [Bulldozer](https://en.wikipedia.org/wiki/Bulldozer_\(microarchitecture\)) у AMD
{% endhint %}

#### 1. Минимальный

{% hint style="success" %}

* Обработка одного документа: 10 секунд

* Обработка комплекта из 100 документов: 100 секунд (1 RPS)
  {% endhint %}

* Виртуальная машина

* Процессор: 16 ядер, 2.0 GHz, ориентир: Intel Skylake Xeon E3 v5

* Оперативная память: 24 Gb

#### 2. Дешёвый

{% hint style="success" %}

* Обработка одного документа: 5 секунд

* Обработка комплекта из 100 документов: 66 секунд (1.5 RPS)
  {% endhint %}

* Виртуальная машина

* Видеокарта: Nvidia Tesla T4

* Процессор: 20 ядер, 2.0 GHz, ориентир: Intel Skylake Xeon E3 v5

* Оперативная память: 32 Gb

#### 3. Стандартный

{% hint style="success" %}

* Обработка одного документа: 3 секунды

* Обработка комплекта из 100 документов: 50 секунд (2 RPS)
  {% endhint %}

* Физический сервер

* Видеокарта: Nvidia Tesla T4

* Процессор: 16 ядер, 3.2-3.9 GHz, ориентир: [AMD EPYC 7343](https://www.amd.com/ru/products/cpu/amd-epyc-7343)

* Оперативная память: 64 Gb

* SSD 512 Gb

#### 4. Корпоративный

{% hint style="success" %}

* Обработка одного документа: 3 секунды
* Обработка комплекта из 100 документов: 15 секунд (6.5 RPS)
  {% endhint %}

Балансировщик (2 сервера):

* Процессор: 2 ядра
* Оперативная память: 2 Gb

База данных (PostgreSQL, 2 сервера):

* Процессор: 8 ядер
* Оперативная память: 64 Gb
* Накопитель: 512 Gb NVMe (допустимо использование SSD)

Сервисы (2 сервера):

* Видеокарта (x3): Nvidia Tesla T4
* Процессор (x2): 24 ядра, 3.2-4.0 GHz, ориентир: [AMD EPYC 74F3](https://www.amd.com/ru/products/cpu/amd-epyc-74f3)
* Оперативная память: 256 Gb
* Накопитель: 512 Gb SSD

Выше перечислены аппаратные требования для продуктивной эксплуатации. Dbrain запускается и на слабых конфигурациях. Например, на ноутбуке Core i5-8250U 1.6 GHz / 8 Gb ОЗУ / 250 Gb SSD. Но работоспособность на таких слабых конфигурациях не гарантируется.

## Требования к окружению:

1. Современная операционная система на базе Linux (выпуска 2018 года или новее)
2. Система менеджмента контейнеров **Docker**
3. **docker-compose**
4. Для использования мощностей видеокарт нужны:
   1. **nvidia-docker**
   2. **Драйвера Nvidia** последней доступной версии
   3. **CUDA** версии не ниже 11.1
5. Доступ в интернет для проверки лицензии:
   * Адрес: **<https://license.ml.dbrain.io/check/v2>**
   * IP: динамический
   * Порт: 443
   * Протокол: TCP
   * Запрос: POST

## Запуск локальной версии Dbrain

1. Создайте файл с названием docker-compose.yml
2. Скопируйте конфигурацию ниже и вставьте его в docker-compose.yml:

```yaml
version: "3.7"

# Сначала логинимся докером в наш реджистри:
# docker login registry.dbrain.io/docr
# login: r@b@t$docr+docr
# secret: p2JDaaFKIDEoddf8mho7

# Во всех сервисах закомментирован раздел volumes.
# Нужно самостоятельно решить куда монтировать,
# т.к. это зависит от вашего оркестратора.
# Для тестов - можно просто оставить закомментированными.


x-service: &service
  volumes:
    - "./data/files:/files"
#    - "./data/logs:/logs"
  environment:
    LOGURU_LEVEL: "INFO"
    LOGURU_COLORIZE: "YES"
    LICENSE_TOKEN: "***"  # Поменяйте на своё значение
    FACE_API_URL: ""
    FACE_API_USERNAME: ""
    FACE_API_PASSWORD: ""
    
  depends_on:
    - tasque
    - db
    - files
  tmpfs:
    - /tmp
  restart: always
  logging: &logging
    driver: "json-file"
    options:
      max-file: "10"
      max-size: "100m"


services:
  api:
    <<: *service
    image: registry.dbrain.io/docr/api:v4.52.0
    command: [ api ]

  specs:
    <<: *service
    image: registry.dbrain.io/docr/specs:v4.52.0
    command: [ specs ]

  agent:
    <<: *service
    image: registry.dbrain.io/docr/agent:v4.52.0
    command: [ agent ]

  files:
    image: registry.dbrain.io/docr/files:v4.52.0
    sysctls:
      net.core.somaxconn: 4096
#    volumes:
#      - "./data/files:/files"
    restart: always
    logging: *logging

  db:
    image: registry.dbrain.io/docr/db:v4.52.0
    user: root
#    volumes:
#      - "./data/postgres:/var/lib/postgresql/data"
    environment:
      POSTGRES_DB: postgres
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres}
    healthcheck:
      test: pg_isready -U postgres -h 127.0.0.1
      interval: 5s
    restart: always
    logging: *logging

# Это сервис очистки старых данных по уже отработавшим задачам.
# Он закомментирован, т.к. вы можете захотеть иначе очищать старые файлы.
# Для теста - можно просто оставить закомментированным.

#  cleaner:
#    image: alpine
#    volumes:
#      - "./data/files:/files"
#    command: sh -c "while true ; do find /files -mmin +"$(( ($PIPELINE_TIMEOUT+$COMPLETED_TASK_TTL_SECONDS) / 60 ))" -type f -print0 | xargs -0 -n 100 -P 4 rm -f; echo cleaning done ; sleep 60 ; done"
#    restart: always
#    logging: *logging

  demo:
    image: registry.dbrain.io/docr/demo:v4.52.0
    restart: always
    logging: *logging

  lb:
    image: registry.dbrain.io/docr/lb:v4.52.0
    restart: always
    ports:
      - 8080:80  # Поменяйте на своё значение, например, 8090:80
    logging: *logging

  tasque:
    image: registry.dbrain.io/docr/tasque:v4.52.0
#    volumes:
#      - "./data/logs:/logs"
    restart: always
    logging: *logging
```

3. Замените `***` в строке `LICENSE_TOKEN: "***"` на ваш токен. Если у вас нет токена, напишите нам в[ телеграм](https://t.me/dbrain_support_bot) или на <hello@dbrain.io>.
4. Если на вашем сервере доступна видеокарта, допишите в раздел environment файла строку `ALLOW_GPU: true`
5. Если вы используете прокси для доступа к сервису лицензий, укажите его в параметре `LICENSE_TOKEN` раздела environment
6. Сохраните изменения в файле docker-compose.yml
7. Залогиньтесь через докер для доступа в наш репозиторий. Для этого выполните команду:

```sh
docker login registry.dbrain.io/docr
```

8. Введите логин `r@b@t$docr+docr` и пароль `p2JDaaFKIDEoddf8mho7`
9. Проверьте, что сервис лицензий доступен. Для этого выполните команду:

```sh
curl https://license.ml.dbrain.io/check/v2
```

10. Если ответ 405 — всё хорошо. В противном случае вам нужно открыть нашему сервису доступ до этого адреса.
11. Запустите сервис следующей командой:

```sh
docker compose up
```

12. Подождите, когда сервис полностью развернётся. В логах появится надпись вида `INFO: Uvicorn running on http://0.0.0.0:80`

Сервис развёрнут локально. Теперь вы можете обращаться к нему по API. Примеры корректных запросов можно получить в свагере, он доступен по адресу `localhost:8080/docs`

{% hint style="warning" %}
Сервис обращается к [Dadata.ru](https://dadata.ru/api/suggest/address/), чтобы повысить точность выдаваемых адресов.

Если у вас ограничен доступ в Интернет, внесите в белый список адрес <https://suggestions.dadata.ru>. Если такой возможности нет, отключите обращение к Dadata.ru. Для этого в запросе к методу`recognize`\
передавайте параметр `normalization_fias=false`
{% endhint %}

#### Локально доступные методы:

* Классификация документов: `/pipelines/run/classify`
* Проверка документов на признаки подделки: `/pipelines/run/fraud`
* Базовый OCR: `/pipelines/run/fulltext`
* Извлечение данных из документов: `/pipelines/run/recognize`

{% hint style="info" %}
Ничего не получилось, и вы хотите рассказать, что эта инструкция никуда не годится? Пишите нам в[ телеграм](https://t.me/dbrain_support_bot) или на <hello@dbrain.io>, мы оперативно поможем
{% endhint %}
