PDF管理器和查看器PdfDing

什么是 PdfDing ?

PdfDing 是一款自托管 PDF 管理器和查看器,可在多种设备上提供无缝用户体验。它设计精简、速度快,并且易于通过 Docker 设置。

功能特点

  • 在多种设备上无缝基于浏览器的 PDF 查看
  • 使用标签整理 PDF
  • 干净且响应迅速的用户界面
  • 暗黑模式
  • 记住当前位置 - 从停止的地方继续阅读
  • 通过 OIDC 支持 SSO
  • 每个用户都可以上传自己的 PDF,无需管理员管理内容。

软件的使用很简单,看官方的动图一目了然

安装

在群晖上以 Docker 方式安装。

在注册表中搜索 pdfding ,选择第一个 mrmn/pdfding,版本选择 latest。

本文写作时, latest 版本对应为 0.1.2;

卷

在 docker 文件夹中,创建一个新文件夹 pdfding,并在其中建两个子文件夹 data 和 media

默认情况下,这两个子文件夹,Everyone 都只有读权限

需要赋予 Everyone 读写权限

最后要成这样才行

data 和 media 两个目录都需要修改权限,如果 data 没修改的话,容器会启动失败,因为无法写入数据库,而 media 没修改的话,在上传 pdf 时会报错

PdfDing 默认使用 SQLite 数据库。另外,PdfDing 也支持 PostgreSQL

文件夹 装载路径 说明
docker/pdfding/data /home/nonroot/pdfding/db 存放数据库
docker/pdfding/media /home/nonroot/pdfding/media 存放数据库

端口

本地端口不冲突就行,不确定的话可以用命令查一下

1
2
# 查看端口占用
netstat -tunlp | grep 端口号
本地端口 容器端口
8340 8000

默认没有对外暴露端口

需要点 + 号自己添加

环境

可变 值
HOST_NAME 设为 192.168.0.197,这是老苏群晖主机的 IP
SECRET_KEY 密码,可以改的复杂一点
CSRF_COOKIE_SECURE 通过 HTTP 传输 CSRF cookie
SESSION_COOKIE_SECURE 通过 HTTP 传输 session cookie

更多的环境变量,请参考官方文档:https://codeberg.org/mrmn/PdfDing#configuration

命令行安装

如果你熟悉命令行,可能用 docker cli 更快捷

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 新建文件夹 pdfding 和 子目录
mkdir -p /volume1/docker/pdfding/{data,media}

# 进入 pdfding 目录
cd /volume1/docker/pdfding

# 修改目录权限
chmod a+w {data,media}

# 运行容器
docker run -d \
--restart unless-stopped \
--name pdfding \
-p 8340:8000 \
-v $(pwd)/data:/home/nonroot/pdfding/db \
-v $(pwd)/media:/home/nonroot/pdfding/media \
-e HOST_NAME=192.168.0.197 \
-e SECRET_KEY=some_secret \
-e CSRF_COOKIE_SECURE=FALSE \
-e SESSION_COOKIE_SECURE=FALSE \
mrmn/pdfding:latest

也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
version: '3'

services:
pdfding:
image: mrmn/pdfding:latest
container_name: pdfding
restart: unless-stopped
ports:
- 8340:8000
volumes:
- ./data:/home/nonroot/pdfding/db
- ./media:/home/nonroot/pdfding/media
environment:
- HOST_NAME=192.168.0.197
- SECRET_KEY=some_secret
- CSRF_COOKIE_SECURE=FALSE
- SESSION_COOKIE_SECURE=FALSE

然后执行下面的命令

1
2
3
4
5
6
7
8
9
10
11
12
13
# 新建文件夹 pdfding 和 子目录
mkdir -p /volume1/docker/pdfding/{data,media}

# 进入 pdfding 目录
cd /volume1/docker/pdfding

# 修改目录权限
chmod a+w {data,media}

# 将 docker-compose.yml 放入当前目录

# 一键启动
docker-compose up -d

运行

在浏览器中输入 http://群晖IP:8340 就能看到登录界面

普通用户

第一次需要点 Sign up 注册账号

密码不能少于 8 位,不能太常见,不能全是数字等等

注册成功后的主界面

因为没有设置 smtp 参数,所以是不会收到邮件的

点 Add PDF 添加文件,填写标题、描述和标签,然后点击 Sunmit 提交

上传成功

点标题可以查看 pdf 的内容

文件保存在 /media 目录中

移动端

在手机浏览器上登录

找到上传的 pdf

打开阅读 pdf 的速度挺快的,支持缩放操作

管理员

如果要创建管理员,需要进入容器操作

严格来说,是将已有的用户转为管理员,如果你输入的用户邮箱不存在,是会报错的 django.contrib.auth.models.User.DoesNotExist: User matching query does not exist.

1
2
3
4
5
# 以 root 身份进入容器
docker exec -it --user root pdfding /bin/bash

# 创建管理员用户
python pdfding/manage.py make_admin -e [email protected]

现在可以访问 http://群晖IP:8340/admin,对用户,pdf 做一些增、删、改、查的操作

参考文档

mrmn/PdfDing: PdfDing is a selfhosted PDF manager and viewer offering a seamless user experience on multiple devices. It’s designed be to be minimal, fast, and easy to set up using Docker. - Codeberg.org
地址:https://codeberg.org/mrmn/PdfDing