在 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 自托管安装说明。