# ПринтМенеджер: базовая конфигурация - Сингл

## **Назначение**

Эта статья разбирает архитектуру обработки заданий печати, копирования и сканирования.

## **Роль в системе**

ПринтМенеджер нужен для обработки заданий печати, сканирования и копирования, а также для авторизации пользователя на устройстве. 

## **Логические блоки**

* **ПринтМенеджер** — сервер с описанными ниже компонентами.  
* **АРМы сотрудников** — источник заданий. В зависимости от сценария печати на АРМ работает либо Клиент ПМ с локальной очередью печати рабочей станции, либо универсальный PostScript-драйвер, настроенный на виртуальный принтер, находящийся на сервере печати (см. сценарии печати ниже).  
* **Встроенное приложение** (на принтере/МФУ) — управляет заданиями печати/копирования/сканирования и авторизацией пользователя.  
* **Внешнее устройство авторизации** — опционально, для аутентификации на принтере/МФУ без встроенного приложения.

## **Общие компоненты (как в мониторинге)**

* **PostgreSQL** — данные пользователей, информация об устройствах, настройки печати, атрибуты заданий печати, копирования, сканирования, статусы заданий. В отличие от мониторинга, здесь **нет ClickHouse** — нет необходимости хранить большой объём сырых данных от МФУ.  
* **Redis** — брокер сообщений между Django, планировщиком и Celery, как и в мониторинге.  
* **Django** — бэкенд: принимает запросы, создаёт задания, управляет авторизацией и настройками, отдаёт данные для админ-панели ПринтМенеджера.  
* **Celery** — тяжёлые и долгие операции: обработка PDF-документов, отправка заданий в печать, работа с очередями CUPS, работа с внешними интеграциями.  
* **Планировщик** — периодические задачи: очистка старых заданий, проверка очередей печати, обновление статуса устройств, уведомления.  
* **Nginx** — реверс-прокси, принимает запросы от всех внешних компонентов и передаёт их в Django.

## **Компоненты, специфичные для ПринтМенеджера**

| Компонент | Роль |
| ----- | ----- |
| Сервер печати CUPS | Обрабатывает очереди печати, работает с драйверами принтеров, отправляет задания на физическое устройство. |
| Файловый сервер CUPS | Позволяет эффективно скачивать задания из CUPS.  |
| Локальное хранилище образов документов | Директория на диске сервера ПринтМенеджера. Хранит образы документов (PDF/PostScript). В базе данных не рекомендуется хранить документы, поэтому для них выделено отдельное хранилище, а в PostgreSQL хранятся только метаданные (ссылка на задание, атрибуты задания: дуплекс, цветность и т.д.), а образ лежит в хранилище. |
| Временное объектное хранилище | Транзитная зона для МФУ, которые не умеют отправлять данные напрямую в систему и работают только через FTP/SMB/сетевые папки. Celery забирает образ оттуда и передаёт дальше по цепочке в постоянное хранилище. |
| Конвертер- сервер | Нужен для МФУ, которые не поддерживают встроенное приложение и используют внешнее устройство авторизации (например, кардридер). Конвертер формирует авторизационные данные и приводит их к формату, понятному Django. |

## **Сценарий 1: печать через Клиент ПМ**

На АРМ пользователя установлен Клиент ПМ — компонент, работающий с очередью печати рабочей станции, управляющий принтерами на АРМ и отвечающий за применение экономии тонера. Путь задания при печати через клиента ПМ:

1. Пользователь отправляет документ на печать. Задание попадает в **локальную очередь печати** рабочей станции.  
2. Клиент ПМ забирает задание из локальной очереди, **конвертирует его в PDF** — основной формат для дальнейшей обработки в Printum — и извлекает атрибуты (формат, дуплекс, количество страниц, цветность, ориентация, разбор по копиям).  
3. Клиент ПМ добавляет задание в серверную очередь печати ПринтМенеджера. На сервере Django создаёт внутреннее задание и кладёт метаданные в PostgreSQL; ПринтМенеджер проверяет и применяет к заданию правила печати.  
4. Клиент ПМ запрашивает у ПринтМенеджера настройки оптимизации печати (например, параметры экономии тонера), применяет их и отправляет обработанный образ документа на сервер в локальное хранилище образов.  
5. Дальнейший путь зависит от типа печати:  
   * **Прямая печать** — задание уходит в сервер печати CUPS, CUPS отправляет его на МФУ.  
   * **Отложенная печать** — задание остаётся в очереди ПринтМенеджера. Пользователь авторизуется во встроенном приложении на МФУ (PIN-код или карта), приложение запрашивает список заданий; после выбора пользователем и нажатия «Печать» задание уходит в CUPS, CUPS — на МФУ.  
6. После отправки на печать  ПринтМенеджер переводит задание в архив, обновляет статистику, которая потом подгружается мониторингом.

## **Сценарий 2: бесклиентская печать**

Настраивается через виртуальный принтер со ссылкой напрямую на CUPS ПринтМенеджера, без установки Клиента ПМ на АРМ. К виртуальному принтеру подключается один из универсальных PostScript-драйверов: Xerox Global Print Driver PostScript, Konica Minolta Universal PS, HP Universal Printing PS.

Путь задания при печати без клиента ПМ: 

1. Универсальный драйвер формирует PostScript-задание и отправляет его напрямую в CUPS ПринтМенеджера, минуя Django на этом шаге.  
2. Django периодически опрашивает CUPS; обнаружив новое задание, создаёт собственное внутреннее задание и заполняет его атрибутами, разобрав пришедший PostScript-файл.  
3. Дальнейшая обработка зависит от настройки **USE\_PS\_PRINTING**: если она выключена — задание конвертируется в PDF; если включена, но для задания действуют правила по количеству страниц, цветности или автоудалению после печати — задание всё равно конвертируется в PDF; если таких правил нет — конвертация не выполняется, и задание остаётся в PostScript.  
4. ПринтМенеджер применяет правила печати к заданию; метаданные сохраняются в PostgreSQL, образ — в хранилище образов (локальное или внешнее).  
5. Исходное PostScript-задание удаляется из CUPS — дальше система работает только со своей внутренней копией задания.  
6. Дальнейший путь зависит от типа печати:  
   * **Прямая печать** — сформированное задание отправляется в CUPS, CUPS передаёт его на МФУ.  
   * **Отложенная печать** — задание остаётся в очереди ПринтМенеджера до авторизации пользователя во встроенном приложении на МФУ, дальше — как в сценарии с Клиентом ПМ.  
7. После печати — архивирование задания, обновление статистики и синхронизация с мониторингом как обычно.

## **Печать через почту (IMAP)**

Помимо клиентской/бесклиентской печати с АРМ, есть сценарий отправки задания на специальный почтовый ящик. Периодическая задача Celery проверяет этот ящик по протоколу IMAP; обнаружив новое письмо с вложением, система забирает его и обрабатывает как обычное задание печати — метаданные в PostgreSQL, образ в локальное хранилище, дальнейшая авторизация и печать не отличаются от прочих сценариев.

## **Прочие внешние компоненты базовой конфигурации**

* **SMTP-сервер** — уведомления, в том числе о том, что задание заблокировано правилами печати.  
* **IMAP-сервер** — печать через почту и гостевая печать (см. выше).  
* **FTP/SMB-папка для выгрузки архива** — периодическая выгрузка образов документов из локального хранилища для освобождения места на сервере; метаданные при этом остаются доступны через мониторинг (после синхронизации), а сами образы — в архивной папке.  
* **Сетевая папка для отсканированных документов** — используется при сценарии «сканирование в папку»: образ идёт во временное объектное хранилище, Celery обрабатывает и через Django/nginx также кладёт копию в сетевую папку.  
* **NFS-хранилище** — в базовой конфигурации **не используется**. Оно появляется только в схеме "Кластер", где хранилище должно быть общим для нескольких ПринтМенеджеров.

## **Важно: ПринтМенеджеров может быть несколько**

Базовая конфигурация (Сингл) — это один сервер. Если в инфраструктуре несколько ПринтМенеджеров, это происходит по одной из двух причин: нужна отказоустойчивость/производительность или несколько географически разнесённых филиалов. 

## **Связанные статьи**

* [Поддерживаемые сценарии печати](https://docs.printum.io/books/1-arxitektura-i-koncepcii/page/podderzivaemye-scenarii-pecati)
* [Отказоустойчивость и горизонтальное масштабирование ПринтМенеджера](https://docs.printum.io/books/1-arxitektura-i-koncepcii/page/otkazoustoicivost-i-gorizontalnoe-masstabirovanie-printmenedzera)