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

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

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

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

* [Извлечение данных из документов](/servisy/izvlechenie-dannykh.md)
* [Классификация документов](/servisy/document-classification.md)
* [Антифрод 2.0](/servisy/proverka-dokumentov/antifrod-2.0.md) (только на серверах с GPU)
* [Базовый OCR](/servisy/fulltext-recognition.md)
* [Бухгалтерская первичка](/servisy/izvlechenie-dannykh/bukhgalterskaya-pervichka.md)
* [Подписи и печати](/servisy/proverka-dokumentov/podpisi-i-pechati.md)

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

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

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

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

{% hint style="danger" %}
Сервис требует от процессора поддержку набора инструкций AVX-512. Без них сервис не будет работать. Вот [список архитектур](https://en.wikipedia.org/wiki/AVX-512#CPUs_with_AVX-512) с поддержкой AVX-512.
{% endhint %}

#### 1. Минимальная конфигурация (только CPU)

{% hint style="success" %}

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

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

* Процессор: 2 ядра, 2.3 GHz

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

#### 1. Слабая конфигурация (только CPU)

{% hint style="success" %}

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

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

* Процессор: 16 ядер, 2.3 GHz, ориентир [**Intel Xeon Gold 5218**](https://www.intel.com/content/www/us/en/products/sku/192444/intel-xeon-gold-5218-processor-22m-cache-2-30-ghz/specifications.html)

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

#### 2. Средняя конфигурация (CPU + GPU)

{% hint style="success" %}

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

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

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

* Процессор: 24 ядра, 2.3 GHz

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

#### 3. Максимальная конфигурация (CPU + GPU)

{% hint style="success" %}

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

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

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

* Процессор: 48 ядер, 2.3 GHz

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

#### 4. Production single-node

{% hint style="success" %}

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

Балансировщик:

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

Сервисы:

* Физический сервер
* Видеокарта: Nvidia A2
* Процессор: 10 ядер, 3.5-3.9 GHz, ориентир: [Intel W-2255](https://www.intel.com/content/www/us/en/products/sku/198016/intel-xeon-w2255-processor-19-25m-cache-3-70-ghz/specifications.html)
* Оперативная память: 128 Gb
* SSD 1024 Gb

#### 6. Production double-node

{% hint style="success" %}

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

Балансировщик:

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

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

* Физический сервер
* Видеокарта: Nvidia A2
* Процессор: 10 ядер, 3.5-3.9 GHz, ориентир: [Intel W-2255](https://www.intel.com/content/www/us/en/products/sku/198016/intel-xeon-w2255-processor-19-25m-cache-3-70-ghz/specifications.html)
* Оперативная память: 128 Gb
* SSD 1024 Gb

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

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

1. Операционная система **Ubuntu** версии 18.04+
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: "***"  # Поменяйте на своё значение
    ALLOW_GPU: "%ALLOW_GPU%" # Укажите необходимое значение, в зависимости от конфигурации сервера
    FACE_API_URL: ""
    FACE_API_USERNAME: ""
    FACE_API_PASSWORD: ""
    
  depends_on:
    - tasque
    - redis
    - 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.149.0
    command: [ api ]

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

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

  redis:
    image: redis:7.0.7-alpine3.17
    restart: always
    logging:
      driver: none

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

  db:
    image: registry.dbrain.io/docr/db:v4.149.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.149.0
    restart: always
    logging: *logging

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

  tasque:
    image: registry.dbrain.io/docr/tasque:v4.149.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`

{% hint style="info" %}
При первом запуске на сервере может возникнуть конкуренция за процессор, память и видеокарту.

Сервисы и процессы запускаются одновременно и используют одни и те же ресурсы.

Рекомендуем дождаться, пока не произойдет равномерное распределение нагрузки.
{% endhint %}

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`

Обратите внимание, передавать `token` в запросе не нужно, он передаётся в `environment` в docker-compose.yml

Пример запроса через терминал:

```shell
curl -X POST 'http://localhost:8080/pipelines/run/recognize' \
-H 'Content-Type: multipart/form-data' \
-H 'Accept: application/json' \
-F "image=@image.pdf;type=image/pdf"
```

{% 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://docs.dbrain.io/lokalnaya-ustanovka/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.
