Skip to content

Instantly share code, notes, and snippets.

@109021017
Created August 24, 2024 12:10
Show Gist options
  • Save 109021017/48c49dc2c49a2f01ec00018f5e8b8e81 to your computer and use it in GitHub Desktop.
Save 109021017/48c49dc2c49a2f01ec00018f5e8b8e81 to your computer and use it in GitHub Desktop.

Paperless + KKFileView 说明文档

1. Nginx 反向代理配置

KKFileView 服务访问 Paperless-NGX 的文件会遇到跨域和需要鉴权的问题。为了使 Paperless-NGX 和 KKFileView 能够通过同一个域名提供服务,我们需要配置 Nginx 反向代理。

server {
    listen 1234;
    server_name pl.taro.com;

    location /kk/ {
        proxy_pass http://192.168.50.10:8012/kk/;
        proxy_set_header Host $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;
    }

    location / {
        proxy_pass http://192.168.50.10:8000/;
        # Adjust host and port as required.

        # These configuration options are required for WebSockets to work.
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_redirect off;
        proxy_set_header Host $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-Host $server_name;
        add_header Referrer-Policy "strict-origin-when-cross-origin";
    }
}

将 Paperless 提供的页面映射到 http://pl.taro.com:1234/ 下,将 KKFileView 提供的映射到 http://pl.taro.com:1234/kk/ 下。

2. 对 Paperless-NGX 的修改、配置和部署

paperless-ngx/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html 中增加一个按钮,设置链接为 KKFileView 预览链接为: http://pl.taro.com:1234/kk/onlinePreview?url={文件链接}

参考文档 https://docs.paperless-ngx.com/setup/#docker_build

docker-compose.env 中配置:

PAPERLESS_URL=http://pl.taro.com:1234

运行 docker compose build 构建镜像。

运行 docker compose up 创建和运行容器。

3. 对 KKFileView 的修改、配置和部署

3.1 修改

由于图片外的其他文件不在浏览器中直接加载,而是需要 KKFileView 服务端下载处理后才返回给浏览器,为了使 KKFileView 服务器能访问 Paperless 的文件,下面是使用 cookies 获得访问权限的解决方案:

kkFileView/server/src/main/java/cn/keking/model/FileAttribute.java 文件中,增加一个 cookies 参数。

kkFileView/src/main/java/cn/keking/service/FileHandlerService.java 中,在解析请求时,将请求中的 cookies 保存。

kkFileView/src/main/java/cn/keking/utils/DownloadUtils.java 中下载请求中添加保存的 cookies。

3.2 配置

在 KKFileView 文件夹下增加 docker-compose.yml 文件,配置 KKFileView 的 URL 和路径:

services:
  kkviewer:
    image: kkfileview:4.4.0
    container_name: kkviewer
    ports:
      - "8012:8012"
    environment:
      - KK_BASE_URL=http://pl.taro.com:1234/kk/
      - KK_CONTEXT_PATH=/kk/

3.3 部署

运行 mvn clean package -DskipTests 编译 KKFileView 的 Java 代码并打包。

运行 docker build --tag kkfileview:4.4.0 . 构建 Docker 镜像。

运行 docker compose up 创建和运行容器。

4. 可能存在的问题和解决方案

由于 Paperless-NGX 和 KKFileView 是分别独立部署的,所以在 KKFileView 预览文件时,仍然需要通过网络请求访问文件,下载拷贝,然后做相应处理。因此,预览打开的速度相较于 Paperless 内部的预览会更慢。

未来可以修改 KKFileView,使之通过 URL 传入 Paperless 文档 ID,后通过调用 Paperless API 读取 Paperless 中的原文件。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment