如何在Debian上使用Nginx安装Paperless

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

必要条件:

一个Debian 10系统,有root访问权限。
一个注册域名指向您的服务器。
除非另有说明,否则本文档中显示的所有命令都应以root身份执行。

将$VISUAL环境变量设置为您选择的文本编辑器。例如,要使用nano:

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

步骤1:安装依赖项

Paperless(无纸化)需要几个软件组件来安装和操作。请按照以下步骤进行安装:

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:安装无纸化

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

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

赋予该目录的Paperless(无纸化)用户所有权:

chown -R paperless:paperless /opt/paperless

复制附带的配置示例作为起点:

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

然后在文本编辑器中打开它:

$VISUAL /etc/paperless.conf

选择一个目录,Paperless(无纸化)将从中摄取扫描的文档,并相应地设置Paperless_CONSUMTION_DIR参数:

PAPERLESS_CONSUMPTION_DIR="/opt/paperless/paper_in"

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

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

如果您的扫描仪支持通过电子邮件发送扫描的文档,您可以从接收收件箱自动进行Paperless(无纸化)摄取。要启用此功能,请设置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"

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

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

切换到Paperless(无纸化)用户:

su - paperless

创建消费目录:

mkdir /opt/paperless/paper_in

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

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

激活它:

. venv/bin/activate

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

pip3 install -r requirements.txt

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

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

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

./manage.py createsuperuser

步骤4:初步测试

在设置适当的web服务器和systemd服务之前,我们将尝试手动运行Paperless(无纸化)。此时,您仍然应该在虚拟python环境中以Paperless(无纸化)身份登录。

在后台启动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中选择的凭据登录。在“文档”菜单中,单击“文档”查看文档列表。几分钟内,扫描的文件应该会被处理并可用。

在继续下一步之前停止Paperless(无纸化):

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命令中修改工作进程的数量。此处所示的服务使用 3 个工作进程(-w 3)启动 Gunicorn。

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

$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

输入以下内容,将your_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;
    }
}

通过在sites-enabled Nginx目录中链接到此配置来启用它,并检查是否有任何错误:

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

然后加载更改:

systemctl reload nginx.service

您的Paperless实例现在应该可以在以下网址访问https://your_domain.

步骤7:增强功能

由于无纸化系统用户在初始设置后不需要访问工作shell,我们可以将其更改为/usr/sbin/nologin:

usermod -s /usr/sbin/nologin paperless

故障排除

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

ss -lntp

如有必要,杀死/禁用违规进程,或修改/etc/systemd/system/papaperless-wbserver.service和/etc/nginx/sites-enabled/nonpaper以使用Gunicorn的另一个网络端口。

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容