关于 AI、软件、系统与持续思考的个人笔记

知乎姨姨

在 VPS 上搭建 DocuSeal,让 PDF 可以在线填写

把需要反复下载、填写和回传的 PDF 做成网页表单。用 DocuSeal 配好字段,先拿测试确认单走完填写与文件交接。

文章目录

一份 PDF 如果每次都要下载、打印、扫描,来回传递很容易漏掉姓名、日期或附件。DocuSeal 可以把 PDF 做成网页填写流程,将字段放到文档对应位置,让对方在浏览器里完成。

先拿一份不含真实个人资料的确认单练习。本文关注部署与文件交接;合同是否可以采用这种签署方式,需要按实际业务要求另外确认,不能用“安装成功”判断。

先在本机端口建立管理员账号

PDF 文件和填写记录需要长期保存,磁盘与备份安排要一起考虑。准备新购 VPS 的话,可以从 雨云云服务器 查看实例配置,把文件存储和后续备份空间算进去。 优惠码 KuZhuJi。如有消费返利,以购买页所选规格显示的金额为准。

以下命令在 Linux VPS 上执行,需要有 Docker 操作权限。先运行 docker version 和 docker compose version,确认引擎与 Compose v2 都能工作。没有安装 Docker 时,按 Docker 官方安装说明选择对应发行版;不要把其他发行版的仓库配置直接复制过来。

示例工作目录为 /opt/docuseal,所有相对路径都以这个目录为基准。VPS_IP、SSH 用户和示例域名需要换成自己的值。端口 3002 若已被占用,只改映射左侧的宿主机端口,并同步修改访问地址。

sudo install -d -m 0750 -o "$(id -u)" -g "$(id -g)" /opt/docuseal
cd /opt/docuseal
umask 077

创建数据目录:

mkdir -p data

这个单容器方案使用默认 SQLite,模板、填写记录和文件都要随 /data 保留。先通过 SSH 隧道在 http://127.0.0.1:3002 建立自己的管理员账号,再接入公网 HTTPS;不要等到对外开放后才抢先注册管理员。

ssh -N -L 3002:127.0.0.1:3002 your_ssh_user@VPS_IP

上面这条在自己的电脑执行,应用需要先按下文启动。正式发送邀请前,在后台设置外部站点地址和 SMTP,检查发件邮箱是否经过邮件服务商验证。

将下面内容保存为 compose.yaml:

services:
  docuseal:
    image: docuseal/docuseal:latest
    restart: unless-stopped
    ports:
      - "127.0.0.1:3002:3000"
    volumes:
      - ./data:/data

在工作目录启动并检查日志:

docker compose config --quiet
docker compose pull
docker compose up -d
docker compose ps
docker compose logs --tail=80

启动后按下面的步骤试用。遇到目录不可写的报错,先核对 UID 和挂载路径,不要直接改成 chmod 777。

让域名通过 HTTPS 访问

把 sign.example.com 的 DNS 指向 VPS。下面是已经安装在宿主机上的 Caddy可添加的站点配置;已有网站时只添加这一段,不覆盖整个配置文件。若反向代理也在 Docker 中,容器内的 127.0.0.1 不是宿主机,需要改用共享网络中的服务名。

sign.example.com {
    reverse_proxy 127.0.0.1:3002
}

确认服务器允许访问 80、443,检查 Caddy 配置并按现有服务方式重载,再访问 https://sign.example.com。应用端口仍绑定在宿主机回环地址,数据库端口不向公网发布。应用中的外部地址也要设置为这个 HTTPS 地址,否则邀请链接或登录回调可能指向错误位置。

用一份测试确认单走完流程

上传 PDF 后放置姓名、日期、勾选项和签署字段,给必填项明确设置要求。多个参与者要分别分配字段与顺序,避免所有人都能改同一处内容。

先发给自己另一个邮箱,用无痕窗口打开邀请链接。检查四件事:未填必填项时能否提交、字段是否落在正确位置、第二位参与者收到的链接是否正确、完成后的 PDF 能否下载且内容完整。手机上再检查长姓名和换行。

邀请邮件没有到达时,先查看 SMTP 返回、垃圾邮件和发件域名设置,不要连续点发送制造重复邀请。发出的填写链接包含访问能力,不适合直接放在公开文章或群公告里。

模板修改后再创建一笔新测试记录,不要假设旧邀请会自动采用新版模板。正式资料进入系统前,先规定谁能访问后台、记录保留多久、完成文件如何交接。

备份模板、完成记录和 PDF

备份必须包含整个 data 目录。恢复后检查管理员登录、PDF 模板、至少一笔完成记录和对应下载文件;只导出完成 PDF 会丢掉模板及工作流数据。

在工作目录执行下面的停机备份,压缩包保存在应用目录之外。停止全部服务会带来短暂不可用;确认停止成功后再打包。

docker compose stop
sudo install -d -m 0700 /var/backups/docker-apps
backup_file="/var/backups/docker-apps/$(basename "$PWD")-$(date +%Y%m%d-%H%M%S).tar.gz"
sudo tar -czpf "$backup_file" compose.yaml data
sudo chmod 0600 "$backup_file"
sudo tar -tzf "$backup_file" | head
docker compose start

将压缩包复制到 VPS 之外。恢复时,在另一台测试机器的空目录解包,保留文件所有者和相对路径,用原镜像版本启动,检查前面提到的数据。不要直接覆盖正在使用的原数据目录。

升级前先记录镜像 ID 或摘要,并保存这份备份。阅读项目更新说明后再拉取镜像;涉及数据库迁移时,回滚需要恢复旧数据与旧镜像,不能只把标签改回去。

安装参数和数据路径可对照DocuSeal 自托管安装说明。

继续阅读 · 软件工具 返回顶部