起因
最近更换了服务器的底层,从Windows换成了Debian系统,所以上面的所有docker都需要迁移一遍。今天轮到了paperless-ngx. paperless-ngx 是一个文档电子化助手,有ocr和自动裁剪,而且最主要的是有多端设备可以无缝访问。
项目
项目地址:https://docs.paperless-ngx.com
还是使用docker-compose进行部署。这个项目有很多官方提供的docker compose:
https://github.com/paperless-ngx/paperless-ngx/blob/dev/docker/compose/docker-compose.postgres.yml
我们选择docker-compose.postgres.yml来部署。
部署分析
软件和数据库
services:
broker:
image: docker.io/library/redis:8
restart: unless-stopped
volumes:
- redisdata:/data
db:
image: docker.io/library/postgres:17
restart: unless-stopped
volumes:
- pgdata:/var/lib/postgresql/data
environment:
POSTGRES_DB: paperless
POSTGRES_USER: paperless
POSTGRES_PASSWORD: paperless #记得换个
webserver:
image: ghcr.io/paperless-ngx/paperless-ngx:latest
restart: unless-stopped
depends_on:
- db
- broker
ports:
- "8000:8000" # 前面是外部访问端口
volumes: #记住位置好备份
- data:/usr/src/paperless/data
- media:/usr/src/paperless/media
- ./export:/usr/src/paperless/export
- ./consume:/usr/src/paperless/consume
env_file: docker-compose.env
environment:
PAPERLESS_REDIS: redis://broker:6379
PAPERLESS_DBHOST: db
volumes:
data:
media:
pgdata:
redisdata:
如上图可见,有两个数据库,Postgres和redis,和服务器。
其中Postgres储存长久信息,redis用来缓存处理多用户访问。
因为我提前部署了总的Postgres,那么我将整个文件变成了如下
networks:
default:
external: true
name: 1panel-network
services:
paperless-redis:
image: redis:7
container_name: paperless-redis
restart: unless-stopped
networks:
- default
command: ["redis-server", "--save", "", "--appendonly", "no"]
paperless-ngx:
image: ghcr.io/paperless-ngx/paperless-ngx:latest
container_name: paperless-ngx
restart: unless-stopped
depends_on:
- paperless-redis
ports:
- "12000:8000" #更换成你的
environment:
PAPERLESS_REDIS: redis://paperless-redis:6379
PAPERLESS_DBHOST: 1Panel-postgresql-aeCm #本地docker中的postgresql名称
PAPERLESS_DBPORT: 5432 # db端口
PAPERLESS_DBNAME: paperless # 可更换or not
PAPERLESS_DBUSER: paperless # 可更换or not
PAPERLESS_DBPASS: #更换成你的
PAPERLESS_TIME_ZONE: Asia/Shanghai
PAPERLESS_OCR_LANGUAGE: chi_sim+eng #默认英语,先识别简体中文
TESSDATA_PREFIX: /usr/share/tessdata
PAPERLESS_ALLOWED_HOSTS: xxx #更换成你的
PAPERLESS_URL: https://x x x:7777 #更换成你的
PAPERLESS_SECURE_PROXY_SSL_HEADER: "HTTP_X_FORWARDED_PROTO,https"
volumes:
- /opt/1panel/apps/paperless-ngx/data:/usr/src/paperless/data
- /opt/1panel/apps/paperless-ngx/media:/usr/src/paperless/media
- /opt/1panel/apps/paperless-ngx/export:/usr/src/paperless/export
- /opt/1panel/apps/paperless-ngx/consume:/usr/src/paperless/consume
- /opt/1panel/apps/paperless-ngx/tessdata:/usr/share/tessdata # 这里挂载额外下载的内容
小坑
默认识别只有英语的识别,想用汉语的话需要自己下载,所以需要额外挂载tessdata,但是这个文件里有一些默认的文件,很难单独的添加新下载的内容,所以从容器内把原有的拷贝出来,再添加新的简体中文ocr文件。
单独的文件
https://github.com/tesseract-ocr/tessdata/blob/main/chi_sim.traineddata
所有的包含简体中文的文件
https://github.com/Sehlani/tessdata
CSRF
然后注意PAPERLESS_URL:<>, 这里填写你的反向代理域名,来确保安全性。否则因为安全原因无法登录和操作内容。
客户端
Windows 可以访问网页客户端,然后ios的美区app store有Paperless,免费的,注意不要被骗了。