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的另一个网络端口。
暂无评论内容