Sehlani
Sehlani
发布于 2025-05-18 / 3,058 阅读
19
0

新手搭建paperless-ngx过程

起因

最近更换了服务器的底层,从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,免费的,注意不要被骗了。


评论