DocuSeal - 开源电子签名平台
·
简介
DocuSeal 是一个开源的数字文档签署和处理平台,提供安全、高效的电子签名解决方案。它允许用户创建可填写和签署的 PDF 表单,可在任何设备上使用,具有易于使用的、移动优化的 Web 工具。DocuSeal 是 DocuSign 的开源替代方案,可自托管部署。
- 官方网站: https://www.docuseal.com
- GitHub 仓库: https://github.com/docusealco/docuseal
- 在线演示: https://demo.docuseal.tech
- 许可证: AGPLv3 with Section 7(b) Additional Terms
- GitHub Stars: ~14,000+
核心功能
文档签署流程
| 功能 | 说明 |
|---|---|
| PDF 表单字段构建器 (WYSIWYG) | 可视化编辑器,用于创建可填写的 PDF 表单 |
| 12 种字段类型 | 包括签名、日期、文件、复选框等字段类型 |
| 多签署人支持 | 允许多人签署同一份文档 |
| 自动 PDF 电子签名 | 数字签名自动应用到文档 |
| PDF 签名验证 | 内置签名验证功能 |
| 移动端优化 | 响应式设计,支持任何设备 |
模板与表单
- 通过 HTML API 创建模板: 可编程创建可填写表单
- 通过 PDF/DOCX 字段标签创建模板: 使用嵌入式文本字段标签
- 嵌入式签署表单: 支持 React、Vue、Angular 和 JavaScript
- 嵌入式文档表单构建器: 主要框架的集成 SDK
通信与存储
- SMTP 自动邮件: 签署流程的邮件通知
- 文件存储选项: 本地磁盘、AWS S3、Google Storage、Azure Cloud
- 用户管理: 用户管理功能
- 多语言支持: 7 种 UI 语言,签署支持 14 种语言
Pro 企业版功能
| 功能 | 说明 |
|---|---|
| 公司 Logo 与白标定制 | 品牌自定义 |
| 用户角色管理 | 权限管理 |
| 自动提醒 | 跟进通知 |
| SMS 邀请与验证 | 通过短信进行身份验证 |
| 条件字段与公式 | 动态表单行为 |
| 批量发送 | CSV/XLSX 导入批量签署 |
| SSO / SAML | 企业级身份认证 |
| 模板创建 API | HTML API、PDF/DOCX 字段标签 |
技术架构
语言分布
| 语言 | 占比 |
|---|---|
| Ruby | ~43.9% |
| Vue | ~32.1% |
| HTML | ~24.3% |
| JavaScript | ~13.8% |
| SCSS | ~0.2% |
后端架构
核心框架: Ruby on Rails (Ruby 4.0.1)
主要后端技术:
| 技术 | 用途 |
|---|---|
| Rails | Web 核心框架 |
| Devise | 身份认证(支持双因素) |
| Cancancan | 授权/权限管理 |
| Sidekiq | 后台任务处理 |
| Puma | Web 服务器 |
| Turbo-Rails | Hotwired 实时更新 |
| Pagy | 分页 |
数据库支持:
| 数据库 | 说明 |
|---|---|
| SQLite3 | 默认(零配置) |
| PostgreSQL | 生产环境推荐 |
| MySQL | 支持(trilogy gem) |
PDF 处理:
| 技术 | 用途 |
|---|---|
| HexaPDF | PDF 操作与签名 |
| RubyXL | Excel/XLSX 处理 |
| Ruby-Vips | 图像处理 |
云存储:
| 服务 | Gem |
|---|---|
| AWS S3 | aws-sdk-s3 |
| Google Cloud Storage | google-cloud-storage |
| Azure Blob | azure-blob |
安全与认证:
| 技术 | 用途 |
|---|---|
| JWT | API 认证 |
| ROTP | TOTP 时间令牌 |
| RQRCode | QR 码生成 |
| Devise-Two-Factor | 双因素认证 |
前端架构
核心框架: Vue.js 3.3.2 + Shakapacker
主要前端技术:
| 技术 | 版本 | 用途 |
|---|---|---|
| Vue 3 | 3.3.2 | 组件框架 |
| Hotwired Turbo | - | 实时页面更新 |
| TailwindCSS | 3.4 | CSS 框架 |
| DaisyUI | 3.9 | Tailwind 组件库 |
| Shakapacker | 9.5 | Rails Webpack 集成 |
| Webpack | 5.104 | 模块打包 |
富文本与表单:
| 技术 | 版本 | 用途 |
|---|---|---|
| TipTap | 3.19 | 富文本编辑器 |
| CodeMirror | 6 | 代码编辑 |
| Signature Pad | 4.1 | 数字签名捕获 |
架构模式
混合单体架构: Rails 单体后端 + Vue.js 嵌入组件(通过 Shakapacker)。使用 Hotwired Turbo 进行服务器驱动的导航,Vue 用于交互式组件(签名板、表单构建器、富文本编辑器)。
安装与部署
Docker 快速启动
# 使用 SQLite(最简单)
docker run --name docuseal -p 3000:3000 -v .:/data docuseal/docuseal
Docker Compose 生产部署
# 下载配置文件
curl https://raw.githubusercontent.com/docusealco/docuseal/master/docker-compose.yml > docker-compose.yml
# 启动(自动 SSL)
sudo HOST=your-domain-name.com docker compose up
Docker Compose 包含:
- app: DocuSeal 应用(端口 3000)
- postgres: PostgreSQL 18 数据库
- caddy: 反向代理(自动 SSL)
云平台一键部署
| 平台 | 部署链接 |
|---|---|
| Heroku | 一键部署 |
| Railway | 一键部署 |
| DigitalOcean | 一键部署 |
| Render | 一键部署 |
环境变量配置
数据库配置
| 变量 | 说明 |
|---|---|
DATABASE_URL |
PostgreSQL/MySQL 连接 URL,空则使用 SQLite |
DATABASE_HOST |
数据库主机 |
DATABASE_PORT |
数据库端口(默认 5432) |
DATABASE_USER |
数据库用户名 |
DATABASE_PASSWORD |
数据库密码 |
DATABASE_NAME |
数据库名称 |
存储配置
本地存储:
| 变量 | 说明 |
|---|---|
WORKDIR |
数据存储目录(默认 .) |
ACTIVE_STORAGE_PUBLIC |
设为 true 公开文件访问 |
AWS S3:
| 变量 | 说明 |
|---|---|
AWS_ACCESS_KEY_ID |
AWS 访问密钥 |
AWS_SECRET_ACCESS_KEY |
AWS 密钥 |
AWS_REGION |
AWS 区域(默认 us-east-1) |
S3_ATTACHMENTS_BUCKET |
S3 存储桶名称 |
S3_ENDPOINT |
自定义 S3 端点 |
Google Cloud Storage:
| 变量 | 说明 |
|---|---|
GCS_CREDENTIALS |
GCS 凭证 JSON |
GCS_PROJECT |
GCS 项目名称 |
GCS_BUCKET |
GCS 存储桶名称 |
Azure Blob Storage:
| 变量 | 说明 |
|---|---|
AZURE_STORAGE_ACCOUNT_NAME |
Azure 存储账户 |
AZURE_STORAGE_ACCESS_KEY |
Azure 访问密钥 |
AZURE_CONTAINER |
Azure 容器名称 |
SMTP 邮件配置
| 变量 | 说明 |
|---|---|
SMTP_ADDRESS |
SMTP 服务器地址 |
SMTP_PORT |
SMTP 端口(默认 587) |
SMTP_DOMAIN |
SMTP 域名 |
SMTP_USERNAME |
SMTP 用户名 |
SMTP_PASSWORD |
SMTP 密码 |
SMTP_AUTHENTICATION |
认证方式(默认 plain) |
SMTP_ENABLE_STARTTLS |
启用 STARTTLS(默认 true) |
安全配置
| 变量 | 说明 |
|---|---|
SECRET_KEY_BASE |
Rails 密钥(未设置时自动生成) |
FORCE_SSL |
强制 SSL 的域名 |
RAILS_ENV |
环境模式(production) |
Redis 配置
| 变量 | 说明 |
|---|---|
REDIS_URL |
Redis 连接 URL(未设置时自动创建本地实例) |
API 文档
API 端点
| 资源 | 端点 | 方法 | 说明 |
|---|---|---|---|
| Submissions | /submissions |
GET, POST | 列出/创建提交 |
/submissions/{id} |
GET, DELETE | 获取/删除提交 | |
/submissions/{id}/documents |
GET | 获取提交文档 | |
/submissions/pdf |
POST | 从 PDF 创建提交 | |
/submissions/docx |
POST | 从 DOCX 创建提交 | |
/submissions/html |
POST | 从 HTML 创建提交 | |
| Templates | /templates |
GET | 列出所有模板 |
/templates/{id} |
GET | 获取模板 | |
/templates/pdf |
POST | 从 PDF 创建模板 | |
/templates/docx |
POST | 从 DOCX 创建模板 | |
/templates/html |
POST | 从 HTML 创建模板 | |
/templates/merge |
POST | 合并模板 | |
| Submitters | /submitters |
GET | 列出所有签署人 |
/submitters/{id} |
GET, PATCH | 获取/更新签署人 |
API 服务器:
| 区域 | URL |
|---|---|
| 美国 | https://api.docuseal.com |
| 欧洲 | https://api.docuseal.eu |
认证
使用 X-Auth-Token 头进行 API Key 认证:
curl https://api.docuseal.com/templates -H 'X-Auth-Token: API_KEY'
获取 API Key:
Webhooks
| Webhook 类型 | 说明 |
|---|---|
| Form Webhook | 表单提交时触发 |
| Submission Webhook | 提交状态变更时触发 |
| Template Webhook | 模板事件触发 |
SDK 支持
API SDK
| 语言/平台 | 包名 | 安装命令 |
|---|---|---|
| JavaScript/TypeScript | @docuseal/api |
npm install @docuseal/api |
| Python | docuseal |
pip install docuseal |
| Ruby | docuseal |
gem install docuseal |
| PHP | docusealco/docuseal-php |
composer require docusealco/docuseal-php |
| CLI | docuseal |
npm install -g docuseal |
嵌入式组件 SDK
| 框架 | 包名 | 文档 |
|---|---|---|
| React | @docuseal/react |
React 文档签署 |
| Vue | @docuseal/vue |
Vue 嵌入表单 |
| Angular | @docuseal/angular |
Angular 嵌入表单 |
集成示例
React 嵌入签署表单
import React from "react"
import { DocusealForm } from '@docuseal/react'
function App() {
return (
<DocusealForm
src="https://docuseal.com/d/LEVGR9rhZYf86M"
email="submitter@example.com"
onComplete={(data) => console.log('签署完成!', data)}
/>
)
}
JavaScript/HTML 嵌入
<script src="https://docuseal.com/js/embed.js"></script>
<docuseal-form src="https://docuseal.com/d/LEVGR9rhZYf86M"></docuseal-form>
API 创建提交
const resp = await fetch("https://api.docuseal.com/submissions", {
method: "POST",
headers: {
"X-Auth-Token": "API_KEY",
"Content-Type": "application/json"
},
body: JSON.stringify({
template_id: 123,
send_to: ["signer@example.com"],
submitters_order: "random",
submitters: [
{
email: "submitter@example.com",
name: "John Doe",
fields: [
{ name: "signature_field", value: "" }
]
}
]
})
});
const data = await resp.json();
console.log(data);
Python SDK 使用
from docuseal import Docuseal
docuseal = Docuseal(api_key="API_KEY")
submissions = docuseal.list_submissions(limit=10)
Ruby SDK 使用
require 'docuseal'
Docuseal.key = "API_KEY"
submissions = Docuseal.list_submissions(limit: 10)
生产部署示例
# docker-compose.yml 生产配置
services:
app:
image: docuseal/docuseal:latest
ports:
- "3000:3000"
volumes:
- ./docuseal:/data/docuseal
environment:
- DATABASE_URL=postgresql://user:password@postgres:5432/docuseal
- SMTP_ADDRESS=smtp.example.com
- SMTP_USERNAME=user@example.com
- SMTP_PASSWORD=yourpassword
- FORCE_SSL=your-domain.com
postgres:
image: postgres:18
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: docuseal
自托管最低要求
最小配置(SQLite 模式):
- Docker 容器
- 端口 3000
- 数据持久化卷
/data
生产配置:
- PostgreSQL 或 MySQL 数据库
- Redis(自动配置或通过
REDIS_URL) - SMTP 服务器(邮件通知)
- 可选:S3/GCS/Azure 文件存储
- SSL 终止(使用
FORCE_SSL或反向代理)
应用场景
| 行业 | 应用 |
|---|---|
| 金融银行 | 贷款合同、开户协议 |
| 医疗健康 | 患者同意书、医疗记录 |
| 交通物流 | 运输合同、货物签收 |
| 房地产 | 租赁合同、买卖协议 |
| 电子商务 | 用户协议、订单确认 |
| KYC 认证 | 身份验证文档 |
| CRM 系统 | 客户合同管理 |
资源链接
| 资源 | 链接 |
|---|---|
| 官方网站 | https://www.docuseal.com |
| GitHub 仓库 | https://github.com/docusealco/docuseal |
| API 文档 | https://www.docuseal.com/docs/api |
| OpenAPI 规范 | https://editor.swagger.io/?url=https://console.docuseal.com/openapi.yml |
| Postman 集合 | https://www.postman.com/docuseal/docuseal/collection/baauu23/docuseal-api |
| 嵌入式签署文档 | https://www.docuseal.com/docs/embedded |
| React SDK | https://github.com/docusealco/docuseal-react |
| Vue SDK | https://github.com/docusealco/docuseal-vue |
| Angular SDK | https://github.com/docusealco/docuseal-angular |
| JS SDK | https://github.com/docusealco/docuseal-js |
| Python SDK | https://github.com/docusealco/docuseal-python |
| Ruby SDK | https://github.com/docusealco/docuseal-ruby |
| PHP SDK | https://github.com/docusealco/docuseal-php |
| Discord 社区 | https://discord.gg/qygYCDGck9 |
| Docker Hub | https://hub.docker.com/r/docuseal/docuseal |
快速开始指南
评估功能
- 使用 Docker 快速启动:
docker run --name docuseal -p 3000:3000 -v .:/data docuseal/docuseal - 访问 http://localhost:3000 测试功能
- 创建模板并测试签署流程
生产部署
- 使用 docker-compose.yml 配置 PostgreSQL
- 配置 SMTP 邮件发送
- 设置
FORCE_SSL启用 HTTPS - 可选配置云存储(S3/GCS/Azure)
API 集成
- 注册获取 API Key
- 选择合适的 SDK(React/Vue/Angular/JS/Python/Ruby)
- 嵌入签署表单或使用 REST API
总结
DocuSeal 是一个功能完整的开源电子签名平台,具备:
- 开源免费: AGPLv3 许可证,可自托管
- 技术栈现代: Ruby on Rails + Vue.js 3 + TailwindCSS
- 部署灵活: Docker、云平台一键部署
- API 完善: REST API + 多语言 SDK
- 嵌入集成: React/Vue/Angular 嵌入组件
- 企业功能: SSO、批量发送、白标定制
适合需要自托管电子签名解决方案的企业和开发者,是 DocuSign 等商业产品的优质开源替代方案。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)