Как установить Paperless с Nginx на Debian

Paperless - это приложение Python, которое проглатывает отсканированные документы, индексирует их и представляет их в удобном для пользователя веб-интерфейсе. В этом уроке мы установим Paperless с обратным прокси-сервером Nginx HTTPS на Debian 10.

Требования

  • Система Debian 10, к которой у вас есть root-доступ
  • Зарегистрированное доменное имя указывает на ваш сервер.

Все команды, показанные в этом документе, должны выполняться как root, если не указано иное.

Установите переменную среды $VISUAL в текстовый редактор по вашему выбору. Например, для использования nano:

echo "export VISUAL=nano" >> ~/.bashrc
~/.bashrc

Шаг 1: Установка зависимостей

Для его установки и эксплуатации требуется несколько программных компонентов. Установите их следующим образом:

apt update
apt install -y gnupg2 python3 python3-dev python3-pip python3-virtualenv tesseract-ocr tesseract-ocr-eng unpaper imagemagick libpoppler-cpp-dev optipng git gcc g++
Если вы собираетесь работать с документами на языках, отличных от английского, установите соответствующие языковые файлы Tesseract. Например, для французского и испанского:

apt install -y tesseract-ocr-fra tesseract-ocr-spa

Вы можете перечислить все доступные пакеты тессеракта, используя:

apt list tesseract-ocr-*
Если вы не уверены, какой 3-буквенный код соответствует желаемому языку, обратитесь к этому списку кодов ISO 639-2.

Шаг 2: Создание пользователя системы

Несмотря на то, что можно запускать безбумажный как root, настоятельно рекомендуется использовать пользователя с низкими привилегиями и отключенным входом. Создайте пользователя и группу под названием paperless:

useradd -d/opt/paperless -M -r -s/bin/bash -U -p x paperless

Шаг 3: Установка Paperless

Клонировать репозиторий Paperless Github в /opt/paperless

git clone https://github.com/the-paperless project/paperless.git /opt/paperless

Предоставьте безбумажному пользователю право собственности на этот каталог:

chown -R paperless:paperless /opt/paperless

Копировать включённый образец конфигурации в качестве отправной точки:

cp/opt/paperless/paperless.conf.example/etc/paperless.conf

Откройте его в текстовом редакторе:

 $VISUAL /etc/paperless.conf

Выберите каталог, из которого Paperless проглотит отсканированные документы, и установите параметр PAPERLESS CONSUMPTION DIR соответственно:

PAPERLESS CONSUMPTION DIR="/opt/paperless/paper in"

Найти, отключить (путем удаления символа #) и изменить значения следующих строк на что-то безопасное:

#PAPERLESS PASSPHRASE="секретно"
#PAPERLESS SECRET KEY="изменить меня"
Если ваш сканер поддерживает отправку отсканированных документов по электронной почте, вы можете автоматически проглотить их из получающего почтового ящика. Чтобы включить эту функцию, установите PAPERLESS CONSUME MAIL * опции. По соображениям безопасности рекомендуется создать почтовый аккаунт, посвященный Paperless. Например:

PAPERLESS CONSUME MAIL HOST="imap.example.com"
PAPERLESS CONSUME MAIL PORT="993"
PAPERLESS CONSUME MAIL USER="[email protected]"
PAPERLESS CONSUME MAIL PASS="imap password"

Сохранить изменения и выйти, затем изменить владельца этого файла на paperless и ужесточить его разрешения:

chown paperless:paperless /etc/paperless.conf
chmod 0400 /etc/paperless.conf

Переключитесь на безбумажный пользователь:

su - безбумажный

Создать каталог потребления:

mkdir/opt/paperless/paper in
Создать виртуальную среду Python. Это обеспечит стабильную и изолированную среду, в которой мы сможем установить конкретные модули и версии Python, требуемые Paperless.
python3 -m virtualenv -python=/usr/bin/python3 venv

Активировать:

. venv/bin/activate

Установите модули Python, требуемые безбумажными:

pip3 install -r requirements. txt

На это может уйти некоторое время. После завершения запустите следующие команды для инициализации базы данных и создания статических файлов для веб-службы:

cd src/
./manage.py скачать
./manage.py collectstatic

Создать учетные данные для учетной записи администратора веб-интерфейса, запустив следующую команду и отвечая на подсказки:

./manage.py createuperuser

Шаг 4: Начальное тестирование

Прежде чем настроить надлежащий веб-сервер и системные службы, мы постараемся работать без бумаги вручную. На этом этапе вы все равно должны войти в систему как paperless в виртуальной среде python.

Начать работу с веб-сервером и клиентом документа в фоновом режиме:

./manage.py runserver 0.0.0.0:8000 &
./manage.py document consumer &

Поместите любой отсканированный документ в каталог потребления, сконфигурированный на шаге 3. Например:

wget https://i.imgur.com/DPr5wWG.jpg -O/opt/paperless/paper in/test1.jpg

Просмотрите http://IP or DOMAIN:8000/ и войдите в систему с учетными данными, выбранными на этапе 3. В меню «Документы» нажмите на «Документы», чтобы просмотреть список документов. В течение нескольких минут отсканированный документ должен быть обработан и доступен.

Прекратите безбумажную работу, прежде чем перейти к следующему шагу:

pkill -f manage.py

Шаг 5: Системные услуги

Мы создадим системные файлы, чтобы мы могли правильно управлять веб-сервисами и потребительскими услугами. Выход обратно в корневую оболочку:

выход

Создать единичный файл для веб-сервиса:

$VISUAL/etc/systemd/system/paperless-webserver.service

И введите следующее:

[править править код]
Безбумажный веб-сервер Gunicorn
Требуется =network.target
[Услуга]
Пользователь = Paperless
Группа = безбумажный
ExecStart=/opt/paperless/venv/bin/gunicorn --pythonpath=/opt/paperless/src paperless.wsgi -w 3 -b 127.0.0.1:8000
Перезагрузка = отказ
[Установить]
WantedBy=multi-user.target

Примечание: Вы можете изменить количество рабочих процессов в команде ExecStart. Сервис, показанный здесь, запускает Gunicorn с 3 рабочими (-w 3).

Далее, создайте еще один файл для пользовательского процесса документа:

$VISUAL/etc/systemd/system/paperless-consumer.service

И введите следующее:

[править править код]
Безбумажный документ Потребитель
Требуется =network.target
[Услуга]
Пользователь = Paperless
Группа = безбумажный
ExecStart=/opt/paperless/venv/bin/python3/opt/paperless/src/manage.py document consumer
Перезагрузка = отказ
[Установить]
WantedBy=multi-user.target

Запуск этих сервисов:

systemctl daemon-reload
systemctl start paperless-webserver.service Безбумажный потребитель.service

Убедитесь, что они оба работают:

systemctl status paperless-webserver.service paperless-consumer. обслуживание

Если вы хотите, чтобы безбумажная система запускалась автоматически при запуске системы, выполните команду:

systemctl позволяет безбумажно-webserver.service безбумажно-потребителю. обслуживание

Шаг 6: Обратный прокси-сервер Nginx и HTTPS

Установить Nginx и certbot:

apt update
Установить -y nginx certbot

Убедитесь, что Nginx включен и работает:

systemctl enable --now nginx. обслуживание

Получить сертификат Let's Encrypt для вашего домена с помощью certbot:

certbot certonly --webroot --webroot-path/var/www/html -d your domain

Отключить файл конфигурации Nginx по умолчанию и открыть новый:

rm/etc/nginx/sites-enabled/default
$VISUAL /etc/nginx/sites-available/paperless

Введите следующее, замените your domain своим доменным именем:

server {
слушать 80;
server name your domain;
возврат 301 https://$server name$request uri;
access log/var/log/nginx/paperless access.log;
error log /var/log/nginx/paperless error.log
?
Сервер {
слушать 443 ssl;
server name your domain;
индекс index.html index.htm index.php;
access log/var/log/nginx/paperless access.log;
error log /var/log/nginx/paperless error.log
ssl на;
ssl certificate /etc/letsencrypt/live/your domain/fullchain.pem;
ssl certificate key/etc/letsencrypt/live/your domain/privkey.pem;
Местоположение/статическое {
автоиндекс;
alias /opt/paperless/static;
?
местоположение / {
proxy set header Хост $http host
proxy set header X-Real-IP $remote addr
proxy set header X-Forwarded For $proxy add x forwarded for
proxy set header X-Forwarded-Proto $scheme
proxy pass http://127.0.0.1:8000;
?
?

Включить эту конфигурацию, связавшись с ней в sites-enabled Каталог Nginx и проверка на наличие ошибок:

ln -s/etc/nginx/sites-available/paperless/etc/nginx/sites-enabled
nginx-t

Загрузить изменения:

systemctl reload nginx. обслуживание

Ваш безбумажный экземпляр теперь должен быть доступен по адресу https://your domain.

Шаг 7: Улучшения

Поскольку пользователю безбумажной системы не нужен доступ к рабочей оболочке после начальной настройки, мы можем изменить ее на /usr/sbin/nologin:

usermod -s/usr/sbin/nologin безбумажный

Устранение неполадок

Если веб-сервер Gunicorn не запускается с сообщением об ошибке [ERROR] Подключение в использовании, проверьте наличие любых процессов, уже связанных с портом 8000/tcp:

ss -lntp

Убить/Отключить процесс нарушения, если это необходимо, или изменить /etc/system/system/paperless-webserver.service и /etc/nginx/sites-enabled/paperless, чтобы использовать другой сетевой порт для Gunicorn.