针狗技术网

针狗技术网、电脑技术资源网

如何在Debian上安装Nginx无纸化

avatar LLL769394 2024-07-11 10:37 280次浏览 0 条评论 技术

Paperless是一个Python应用程序,它可以接收扫描的文档,对它们进行索引,并在用户友好的web界面中显示它们。在本教程中,我们将在Debian 10上安装带有Nginx HTTPS反向代理的Paperless。

要求:

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

您可以使用以下方法列出所有可用的tesseract软件包:

apt list tesseract-ocr-*

如果您不确定哪种3位字母的代码对应于所需的语言,请参阅此ISO 639-2代码列表。

步骤2:创建系统用户

虽然可以以root用户身份运行无纸化,但强烈建议使用权限较低且已禁用登录的用户。创建名为无纸化的用户和组:

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

步骤3:安装无纸化

将无纸化Github存储库克隆到/opt/papered

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

让无纸用户拥有该目录的所有权:

chown -R paperless:paperless /opt/paperless

复制包含的配置示例作为起点:

cp/opt/paperless.conf示例/etc/paperless-conf

并在文本编辑器中打开它:

$VISUAL /etc/paperless.conf

选择Paperless将接收扫描文档的目录,并相应地设置Paperless_CONSUMPTION_DIR参数:

PAPERLESS_CONSUMPTION_DIR=”/opt/paperless/paper_in”

查找、取消注释(通过删除#字符)并将以下行的值更改为安全的值:

#PAPERLESS_PASSPHRASE=”secret”
#PAPERLESS_SECRET_KEY=”change-me”

如果您的扫描仪支持通过电子邮件发送扫描的文档,您可以无纸化地自动从接收收件箱中接收这些文档。要启用此功能,请设置PAPERLESS_CONSUME_MAIL_*选项。出于安全考虑,建议创建一个专用于无纸化的邮件帐户。例如

PAPERLESS_CONSUME_MAIL_HOST=”imap.example.com”
PAPERLESS_CONSUME_MAIL_PORT=”993″
PAPERLESS_CONSUME_MAIL_USER=”paperless@example.com”
PAPERLESS_CONSUME_MAIL_PASS=”imap_password”

保存您的更改并退出,然后将此文件的所有者更改为无纸文件并收紧其权限:

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

切换到无纸用户:

su – paperless

创建消费目录:

mkdir /opt/paperless/paper_in

创建一个python虚拟环境。这将提供一个稳定和隔离的环境,我们可以在其中安装Paperless所需的特定python模块和版本。

python3 -m virtualenv –python=/usr/bin/python3 venv

激活它:

. venv/bin/activate

安装无纸化所需的python模块:

pip3 install -r requirements.txt

此命令可能需要一段时间。完成后,运行以下命令初始化数据库并为web服务创建静态文件:

cd src/
./manage.py migrate
./manage.py collectstatic

通过运行以下命令并回答提示,为web界面管理员帐户创建登录凭据:

./manage.py createsuperuser

步骤4:初始测试

在设置合适的web服务器和系统服务之前,我们将尝试手动运行无纸化。在这一点上,您仍然应该在虚拟python环境中以无纸化身份登录。

在后台启动web服务器和文档使用者:

./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:系统化服务

我们将创建systemd单元文件,以便正确管理web和消费者服务。退出回到根shell:

exit

为web服务创建单元文件:

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

并输入以下内容:

[Unit]
Description=Paperless Gunicorn Web Server
Requires=network.target
[Service]
User=paperless
Group=paperless
ExecStart=/opt/paperless/venv/bin/gunicorn –pythonpath=/opt/paperless/src paperless.wsgi -w 3 -b 127.0.0.1:8000
Restart=on-failure
[Install]
WantedBy=multi-user.target

注意:您可能需要在ExecStart命令中修改辅助进程的数量。这里显示的服务启动Gunicorn有3名工人(-w 3)。

接下来,为文档使用者流程创建另一个单元文件:

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

并输入以下内容:

[Unit]
Description=Paperless Document Consumer
Requires=network.target
[Service]
User=paperless
Group=paperless
ExecStart=/opt/paperless/venv/bin/python3 /opt/paperless/src/manage.py document_consumer
Restart=on-failure
[Install]
WantedBy=multi-user.target

启动这些服务:

systemctl daemon-reload
systemctl start paperless-webserver.service paperless-consumer.service

确保它们都在运行:

systemctl status paperless-webserver.service paperless-consumer.service

如果您希望无纸化在系统启动时自动启动,请执行以下命令:

systemctl enable paperless-webserver.service paperless-consumer.service

步骤6:Nginx反向代理和HTTPS

安装Nginx和certbot:

apt update
apt install -y nginx certbot

确保Nginx已启用并正在运行:

systemctl enable –now nginx.service

使用certbot为您的域获取Let’s Encrypt证书:

certbot certonly –webroot –webroot-path /var/www/html -d your_domain

禁用默认的Nginx配置文件并打开一个新文件:

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

输入以下内容,将您的_domain替换为您的域名:

server {
listen 80;
server_name your_domain;
return 301 https://$server_name$request_uri;
access_log /var/log/nginx/paperless_access.log;
error_log /var/log/nginx/paperless_error.log;
}
server {
listen 443 ssl;
server_name your_domain;
index index.html index.htm index.php;
access_log /var/log/nginx/paperless_access.log;
error_log /var/log/nginx/paperless_error.log;
ssl on;
ssl_certificate /etc/letsencrypt/live/your_domain/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your_domain/privkey.pem;
location /static {
autoindex on;
alias /opt/paperless/static;
}
location / {
proxy_set_header Host $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;
}
}

通过链接到站点启用的Nginx目录中的配置来启用此配置,并检查是否有任何错误:

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

然后加载更改:

systemctl reload nginx.service

您的无纸实例现在应该可以访问https://your_domain.

步骤7:增强功能

如果Gunicorn Web服务器无法启动,并显示错误消息[error]Connection in use,请检查是否有任何已绑定到端口8000/tcp的进程:

ss -lntp

如有必要,请杀死/禁用有问题的进程,或修改/etc/systemd/system/paperless-webserver.service和/etc/nginx/sites-enabled/whitered以使用Gunicorn的另一个网络端口。

发表评论