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

{% 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 %}

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

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

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

* [Классификация документов](/dbrain-official/document-classification.md)
* [Проверка документов на признаки подделки](/dbrain-official/proverka-dokumentov/priznaki-poddelki.md)
* [Базовый OCR](/dbrain-official/fulltext-recognition.md)
* [Извлечение данных из документов](/dbrain-official/izvlechenie-dannykh.md):
  * Россия: паспорт, главный разворот, печатный образец — `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 %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://doc.dbrain.io/dbrain-official/podklyuchenie/ustanovka-docr.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
