Papra 26.7.1 配置参数详解

Papra 26.7.1 配置参数详解:179 个环境变量分类总览、13 组核心参数逐项默认值与实测验证、生产配置模板与常见问题

PapraPapra配置2026/10/31

Papra 26.7.1 配置参数详解

目标:把 Papra 26.7.1 的全部配置参数讲清楚——参数从哪里看、在哪里改、怎么改才生效,并给出一套按场景分组的核心参数默认值速查与可直接套用的生产配置模板。参数清单源自官方 Configuration 文档(2026-10-31 抓取,登记 179 个变量),关键参数的生效行为已在真实环境逐项实测验证。

一、环境信息

项说明(实测环境)
操作系统Ubuntu 22.04
Papra26.7.1(构建标识实测:PAPRA_VERSION=26.7.1、GIT_COMMIT=3078ac59e953ee9a96e8f5ad7a967ae39e594037、BUILD_DATE=2026-10-22T21:42:32+02:00)
主实验实例监听 8134,按部署篇第四章编排部署,参数默认值体系
注册关闭实验实例监听 8135,额外注入 AUTH_IS_REGISTRATION_ENABLED=false,用于验证注册开关行为
数据目录/opt/papra/data
参数清单来源https://docs.papra.app/self-hosting/configuration (2026-10-31 抓取,179 个变量)

💡 说明:Papra 没有配置文件,全部配置通过环境变量注入。官方 Configuration 页是唯一的参数权威清单;本文默认值均对照该页逐项核对(标注"实测"的取值来自真实实例)。

二、前置条件

  1. 已按《Papra 26.7.1 Docker Compose 部署指南》完成一套可访问的 Papra 实例(本文实测基址 http://192.168.1.200:8134)。
  2. 具备该实例部署编排文件的修改权限(参数修改的落点就在编排文件或其引用的 .env 中)。
  3. 准备一个可用于验证的服务账号:演示环境使用 admin@papra.local / q1w2e3r4,并在界面"设置 → API 密钥"中创建一个带全量权限的 API Key 供 curl 验证使用。
  4. 阅读本文第五节前建议先通读第四节参数总览,建立分类框架。

三、参数查看与修改方式

3.1 参数的三个来源与优先级

Papra 的一个生效参数值由三层叠加合成,后者覆盖前者:

层级来源举例
① 代码默认官方 Configuration 页标注的 Default valuePORT=1221
② 打包发行内置官方打包发行形态注入的默认环境变量SERVER_SERVE_PUBLIC_DIR=true、PAPRA_CONFIG_DIR=./app-data、EMAILS_DRY_RUN=true、BETTER_AUTH_TELEMETRY=0(这四个均不在官方 179 个变量清单内,实测实例环境中可见)
③ 部署注入部署编排 environment: 与 .env 中显式声明的变量APP_BASE_URL=http://192.168.1.200:8134

⚠️ 注意:有 3 个参数的"打包发行内置值"与官方文档登记的代码默认值不同,直接照抄文档默认值会误判:

变量官方文档默认(代码)打包发行内置(实测生效)
DATABASE_URLfile:./db.sqlitefile:./app-data/db/db.sqlite
DOCUMENT_STORAGE_FILESYSTEM_ROOT./local-documents./app-data/documents
SERVER_SERVE_PUBLIC_DIRfalsetrue

3.2 查看当前生效参数

Papra 不提供运行时读取参数的 API 或命令行工具,当前生效值需要在部署编排层核对:逐一检查编排文件 environment: 列表、同目录 .env,再叠加 3.1 表中②层的四个内置变量。本文实测实例的部署注入实录(密钥值脱敏):

变量实测生效值
APP_BASE_URLhttp://192.168.1.200:8134
AUTH_SECRET96 位十六进制随机串(openssl rand -hex 48 生成)
DATABASE_URLfile:./app-data/db/db.sqlite
DOCUMENT_STORAGE_FILESYSTEM_ROOT./app-data/documents
PAPRA_CONFIG_DIR./app-data
EMAILS_DRY_RUNtrue
SERVER_SERVE_PUBLIC_DIRtrue
CLIENT_BASE_URLhttp://localhost:1221
BETTER_AUTH_TELEMETRY0

其中 PAPRA_VERSION / GIT_COMMIT / BUILD_DATE 三件套由发行流程在构建时注入,界面"关于"页可见(官方注释:used for display in the about page)。

3.3 修改参数与生效验证

修改步骤:

  1. 编辑部署编排文件:少量变量直接写进 environment:;含密钥的变量建议放同目录 .env 并以 AUTH_SECRET=${AUTH_SECRET} 形式引用(见部署篇 4.2)。
  2. 重启实例使新值生效(编排变更后的滚动重建操作见部署篇第十章)。
  3. 按参数类型选择验证手段:注册开关看注册接口返回、上传上限看大文件上传、邮件驱动看服务日志。

实测验证 1:注册开关(AUTH_IS_REGISTRATION_ENABLED)

官方默认 true。在额外注入 AUTH_IS_REGISTRATION_ENABLED=false 的 8135 实例上发起注册:

curl -s -w '\nHTTP=%{http_code}\n' -X POST http://192.168.1.200:8135/api/auth/sign-up/email \
  -H 'Content-Type: application/json' \
  -d '{"name":"newuser","email":"newuser@papra.local","password":"q1w2e3r4"}'

实测回显(HTTP 400):

{"message":"Email and password sign up is not enabled","code":"EMAIL_PASSWORD_SIGN_UP_DISABLED"}
HTTP=400

💡 说明:注意该错误没有外层 error 对象,与业务接口错误形态不同(better-auth 认证端点风格)。生产关闭注册后,新账号由管理员在组织设置中邀请。

实测验证 2:上传大小上限(DOCUMENT_STORAGE_MAX_UPLOAD_SIZE)

保持默认值(26214400 字节 = 25MB)不变,构造 27MB 随机文件上传:

dd if=/dev/urandom of=/tmp/oversize.bin bs=1M count=27
curl -s -w '\nHTTP=%{http_code}\n' -X POST \
  http://192.168.1.200:8134/api/organizations/org_tqq4cqy4g6ui3iwvitpgucgh/documents \
  -H "Authorization: Bearer ${PAPRA_API_KEY}" \
  -F 'file=@/tmp/oversize.bin'

实测回显(HTTP 413):

{"error":{"message":"Document size too large.","code":"document.size_too_large"}}
HTTP=413

实测验证 3:邮件驱动(EMAILS_DRY_RUN)

部署注入 EMAILS_DRY_RUN=true 的实例,启动日志中邮件服务以 driverName":"logger" 初始化(日志实录见部署篇 4.3),即所有待发邮件只落到日志、不真实外发——验证了 5.7 节邮件驱动的兜底形态。

四、参数总览

官方 Configuration 页共登记 179 个配置变量(2026-10-31 抓取统计)。按职责分为 13 组,与第五节子节一一对应:

分类代表变量规模一句话职责
基础与服务PROCESS_MODE、APP_BASE_URL、PORT15监听地址端口、基址与进程形态
数据库DATABASE_URL3数据库连接与静态加密
文档生命周期DOCUMENTS_OCR_LANGUAGES5回收站保留期、OCR 语言、重处理
文档存储DOCUMENT_STORAGE_DRIVER22四种存储驱动、容量上限、存储键、加密
内容提取CONTENT_EXTRACTION_STRATEGY25五种提取策略与外部 OCR 服务接入
认证与账号AUTH_SECRET、AUTH_IS_REGISTRATION_ENABLED17密钥、注册开关、OAuth 提供方
邮件发送EMAILS_DRIVER10logger/SMTP/Resend 三种发送通道
采集通道INTAKE_EMAILS_*、INGESTION_FOLDER_*18邮件采集与文件夹采集两条入口
任务与调度TASKS_PERSISTENCE_DRIVER、各 *_CRON14后台任务持久化与五个定时清理任务
分享链接DOCUMENT_SHARE_LINKS_*6链接数量、访问令牌时效、三条限流
配额与组织MAX_TAGS_PER_ORGANIZATION9组织数、标签数、邀请与配额
AI 与自动打标AI_IS_ENABLED、AUTO_TAGGING_*21九家模型适配器与自动打标
遥测与安全POSTHOG_ENABLED、WEBHOOK_SSRF_PROTECTION_ENABLED5产品遥测与 Webhook SSRF 防护

五、核心参数分类详解

以下 13 小节给出全部高频参数的官方默认值与说明;标 ✅ 的行为在本文实测环境验证过。

5.1 基础与服务参数

变量默认值说明
PROCESS_MODEall进程形态:all 同进程跑 API 与后台任务;web 仅 API;worker 仅后台任务。拆分部署时 web 与 worker 共用同一数据库
APP_BASE_URL空全局基址,设置后覆盖 CLIENT/SERVER_BASE_URL;前端由本服务直接托管时官方推荐只用它。必须与外部访问地址一致,否则分享链接、邮件内链接全部拼错 ✅
CLIENT_BASE_URLhttp://localhost:1221前端基址(APP_BASE_URL 未设时生效)
SERVER_BASE_URLhttp://localhost:1221服务端基址(APP_BASE_URL 未设时生效)
TRUSTED_ORIGINS空信任来源逗号列表;CLIENT_BASE_URL 自动包含,无需重复添加
TRUSTED_APP_SCHEMESpapra://,exp://,papra-dev://移动端 App 回跳 scheme 信任列表;设置即整体覆盖默认,需自带原值
PORT1221监听端口
SERVER_HOSTNAME0.0.0.0绑定地址
SERVER_API_ROUTES_TIMEOUT_MS20000单路由最大执行毫秒数
SERVER_CORS_ORIGINShttp://localhost:3000API 的 CORS 允许来源
SERVER_SERVE_PUBLIC_DIRfalse(打包发行内置 true ✅)是否由本服务直接托管前端静态资源;前置独立 Web 服务器托管前端时才关
PAPRA_VERSION / GIT_COMMIT / BUILD_DATEdev / unknown / unknown构建三件套,由发行流程注入,实测实例为 26.7.1 / 3078ac59… / 2026-10-22T21:42:32+02:00 ✅

5.2 数据库参数

变量默认值说明
DATABASE_URLfile:./db.sqlite(打包发行内置 file:./app-data/db/db.sqlite ✅)内嵌 SQLite 文件库连接串。改为 libsql://… 或 postgres://… 连接串即可切换外部数据库(远程 LibSQL 需配 DATABASE_AUTH_TOKEN)
DATABASE_AUTH_TOKEN空远程 LibSQL 数据库的认证令牌
DATABASE_ENCRYPTION_KEY空数据库整体静态加密密钥。一旦设置后丢失,数据不可恢复(官方原话警告);启用前必须先做好密钥备份

💡 说明:单机 SQLite 是默认形态,实测 5 份文档时整个数据目录仅 860K;文档量大或多人并发写时再评估切换 PostgreSQL。

5.3 文档生命周期参数

变量默认值说明
DOCUMENTS_DELETED_DOCUMENTS_RETENTION_DAYS30回收站(软删除)保留天数,到期由定时任务硬删除(cron 见 5.9)
DOCUMENTS_OCR_LANGUAGESengTesseract OCR 语言码,官方注释注明多语言以逗号分隔;中文扫描件建议 chi_sim,eng
DOCUMENT_REPROCESSING_ENABLEDtrue允许用当前实例配置对已入库文档重新做内容提取
DOCUMENT_REPROCESSING_RATE_LIMIT100/h重处理请求的每组织限流,格式如 10/h、2/5m
DOCUMENTS_CONTENT_EXTRACTION_ENABLEDtrue总开关:上传文档是否执行 OCR/文本提取

💡 说明:重处理关闭时调用接口返回 403 document.reprocessing_disabled,超限返回 429 server.too_many_requests 并附 Retry-After(官方 API 文档口径,接口实测见《Papra 26.7.1 REST API 使用详解》)。

5.4 文档存储参数

存储驱动四选一:

变量默认值说明
DOCUMENT_STORAGE_DRIVERfilesystem可选 filesystem / s3 / in-memory / azure-blob。in-memory 仅测试用
DOCUMENT_STORAGE_FILESYSTEM_ROOT./local-documents(打包发行内置 ./app-data/documents ✅)本地文件存储根目录,必须在持久化数据目录内

S3 驱动参数(DOCUMENT_STORAGE_S3_ 前缀):ACCESS_KEY_ID、SECRET_ACCESS_KEY、BUCKET_NAME、REGION(默认 auto)、ENDPOINT、FORCE_PATH_STYLE(默认 false)。

Azure Blob 驱动参数(DOCUMENT_STORAGE_AZURE_BLOB_ 前缀):CONNECTION_STRING(设置后账号密码被忽略)、ACCOUNT_NAME、ACCOUNT_KEY、CONTAINER_NAME。

容量上限:

变量默认值说明
DOCUMENT_STORAGE_MAX_UPLOAD_SIZE26214400单文件上限字节数(25MB);0 为不限制。27MB 文件默认配置下实测 413 document.size_too_large ✅

存储键体系(决定文件在存储目录中的路径,默认沿用 legacy 规则 ✅——实测数据目录布局为 {组织ID}/originals/{文档ID}.{原始后缀}):

变量默认值说明
DOCUMENT_STORAGE_USE_LEGACY_STORAGE_KEY_DEFINITION_SYSTEMtrue启用 legacy 存储键({{organization.id}}/originals/{{document.id}});此时下方 pattern、递增后缀、随机后缀机制全部不生效
DOCUMENT_STORAGE_KEY_PATTERN{{organization.id}}/{{document.name}}legacy 关闭后生效的存储键模板,支持 {{…}} 表达式(官方 Guides → Storage Key Patterns)
DOCUMENT_STORAGE_PATTERN_MAX_INCREMENTAL_SUFFIX_ATTEMPTS9存储键被占用时递增后缀尝试次数(file_1.txt→file_2.txt…),0 为禁用
DOCUMENT_STORAGE_PATTERN_ENABLE_RANDOM_SUFFIX_FALLBACKtrue递增后缀耗尽后追加 8 位随机字母数字后缀兜底
DOCUMENT_STORAGE_KEY_SYNC_ENABLEDfalse文档更新时按模板重算存储键(日期、随机表达式会重新求值);存量文档不自动迁移

存储加密:

变量默认值说明
DOCUMENT_STORAGE_ENCRYPTION_IS_ENABLEDfalse文档内容静态加密开关
DOCUMENT_STORAGE_DOCUMENT_KEY_ENCRYPTION_KEYS空密钥加密密钥(KEK),32 字节十六进制串(openssl rand -hex 32 生成)。单键自动编为版本 1;多版本格式 1:<key1>,2:<key2>,最高版本加密新 DEK、全部版本可解密旧 DEK,实现密钥轮换

5.5 内容提取策略参数

变量默认值说明
CONTENT_EXTRACTION_STRATEGYinternal提取策略链,逗号分隔按优先级排列(如 mistral-ocr,internal):首个可处理该类型的策略执行,失败自动降级到下一个

五种策略及专属参数:

策略专属参数(默认值)说明
internal无内置 lecture 库 + Tesseract OCR,支持常见全部格式,永远可用,官方推荐作为兜底策略
mistral-ocrMISTRAL_OCR_MODEL_NAME=mistral-ocr-latest、MISTRAL_OCR_REQUEST_TIMEOUT_MS=300000、MISTRAL_OCR_MIME_TYPES_ALLOW_LIST=application/pdf,image/*Mistral OCR API,需 MISTRAL_API_KEY
doclingDOCLING_BASE_URL=http://localhost:5001、DOCLING_API_KEY(请求头 X-API-Key)、DOCLING_REQUEST_TIMEOUT_MS=300000、DOCLING_OPTIONS={}、DOCLING_MIME_TYPES_ALLOW_LIST=*自建 Docling 服务器(docling-serve)
azure-diAZURE_DI_ENDPOINT、AZURE_DI_API_KEY(请求头 Ocp-Apim-Subscription-Key)、AZURE_DI_REQUEST_TIMEOUT_MS=300000、AZURE_DI_MIME_TYPES_ALLOW_LIST=*、AZURE_DI_POLLING_ATTEMPTS=10、AZURE_DI_POLLING_DELAY_MS=2000Azure Document Intelligence
custom-httpCONTENT_EXTRACTION_CUSTOM_HTTP_URL、…HEADERS={}、…UPLOAD_FORMAT=form-data(form-data/json)、…REQUEST_TIMEOUT_MS=30000、…RESPONSE_FORMAT=json(json/text)、…JSON_RESPONSE_TEXT_PATH=text、…MIME_TYPES_ALLOW_LIST=*自定义 HTTP 提取服务,POST 上传文档取回文本

💡 说明:各策略的 MIME_TYPES_ALLOW_LIST 通用语法——* 全部;image/* 类通配;! 前缀排除且排除始终优先(如 *,!image/png 表示除 PNG 外全部)。

5.6 认证与账号参数

变量默认值说明
AUTH_SECRETpapra-default-auth-secret-change-me出厂默认值必须更换:≥32 字符,openssl rand -hex 48 生成 ✅。它是会话签名与加密的基础密钥,更换后全部已有登录会话与 API Key 立即失效 ✅
AUTH_IS_REGISTRATION_ENABLEDtrue公开注册开关。置 false 后注册请求实测返回 400 EMAIL_PASSWORD_SIGN_UP_DISABLED ✅(回显见 3.3)
AUTH_IS_PASSWORD_RESET_ENABLEDtrue忘记密码自助重置开关(需先配好真实邮件通道)
AUTH_IS_EMAIL_VERIFICATION_REQUIREDfalse是否强制邮箱验证
AUTH_SHOW_LEGAL_LINKSfalse认证页是否展示 Papra 官方法务链接(官方注释明言对自托管无意义)
AUTH_FIRST_USER_AS_ADMINtrue首个注册用户自动授予管理员角色
AUTH_IP_ADDRESS_HEADERSx-forwarded-for限流取真实 IP 的请求头;标准反代用默认值,Cloudflare 用 cf-connecting-ip;必须是代理注入的不可伪造头
AUTH_ALLOWED_EMAIL_DOMAINS空注册邮箱域名白名单(逗号分隔,精确匹配、大小写不敏感);空为不限制
AUTH_FORBIDDEN_EMAIL_DOMAINSpapra.app,papra.email,owlrelay.email,callback.email,clb.email注册邮箱域名黑名单(覆盖式,优先于白名单)
AUTH_PROVIDERS_EMAIL_IS_ENABLEDtrue邮箱密码登录开关
AUTH_PROVIDERS_GITHUB_IS_ENABLEDfalseGitHub OAuth 开关;配套 …_CLIENT_ID、…_CLIENT_SECRET(占位 set-me)
AUTH_PROVIDERS_GOOGLE_IS_ENABLEDfalseGoogle OAuth 开关;配套 …_CLIENT_ID、…_CLIENT_SECRET
AUTH_PROVIDERS_CUSTOMS空自定义 OAuth 提供方列表(JSON 字符串,better-auth generic-oauth 规范;官方 Guides → Custom OAuth2 Providers)

5.7 邮件发送参数

变量默认值说明
EMAILS_DRIVERlogger三选一:logger(只写日志不真发)/ smtp / resend。打包发行形态实测以 EMAILS_DRY_RUN=true 注入,日志中邮件服务以 driverName":"logger" 初始化 ✅
EMAILS_FROM_ADDRESSPapra <…>(官方页脱敏展示)发件人地址与显示名,部署时设为自己的地址
LOGGER_EMAIL_DRIVER_LOG_LEVELinfologger 驱动的日志级别
SMTP_HOST / SMTP_PORT空 / 587SMTP 服务器地址与端口
SMTP_USER / SMTP_PASSWORD空SMTP 认证凭据
SMTP_SECUREfalse是否 TLS 直连
SMTP_JSON_CONFIG空nodemailer 原生 JSON 配置,设置后覆盖以上全部 SMTP 项(高级场景用)
RESEND_API_KEY空Resend 服务 API Key(EMAILS_DRIVER=resend 时必填)

5.8 采集通道参数

邮件采集(把文档发进专属邮箱地址即自动归档):

变量默认值说明
INTAKE_EMAILS_IS_ENABLEDfalse邮件采集总开关
INTAKE_EMAILS_DRIVERcatch-allcatch-all(自有域收信)/ owlrelay(第三方收信服务)
INTAKE_EMAILS_CATCH_ALL_DOMAINpapra.localcatch-all 模式下生成采集地址的域名
OWLRELAY_API_KEY / OWLRELAY_WEBHOOK_URL / OWLRELAY_DOMAINchange-me / 空 / 空OwlRelay 接入三件套(webhook 缺省由服务地址推导)
INTAKE_EMAILS_WEBHOOK_SECRET空收信 webhook 校验密钥,16~128 位随机串
INTAKE_EMAILS_USERNAME_CUSTOMIZATION_IS_ENABLEDfalse允许用户自定义采集地址用户名
INTAKE_EMAILS_USERNAME_DRIVERrandom采集地址用户名生成:random / pattern
INTAKE_EMAILS_USERNAME_DRIVER_PATTERN{{user.name}}-{{random.digits}}pattern 模式模板,占位符支持 {{user.name}}、{{user.id}}、{{user.email.username}}、{{organization.id}}、{{organization.name}}、{{random.digits}},结果自动 slug 化

文件夹采集(监控目录,落文件即归档):

变量默认值说明
INGESTION_FOLDER_IS_ENABLEDfalse文件夹采集总开关
INGESTION_FOLDER_ROOT_PATH./ingestion采集根目录,每个组织对应子目录 <root>/<organization id>
INGESTION_FOLDER_WATCHER_USE_POLLINGfalse是否用轮询监视(网络文件系统建议 true)
INGESTION_FOLDER_WATCHER_POLLING_INTERVAL_MS2000轮询间隔
INGESTION_FOLDER_WATCHER_FILE_STABILITY_THRESHOLD_MS2000文件大小持续不变的时长判定(避免处理仍在写入的文件,适配扫描仪/相机/网络共享)
INGESTION_FOLDER_WATCHER_FILE_STABILITY_POLL_INTERVAL_MS100稳定性检查的轮询间隔
INGESTION_FOLDER_PROCESSING_CONCURRENCY1并发处理文件数;调大提速但增加 CPU/内存占用
INGESTION_FOLDER_POST_PROCESSING_STRATEGYdelete采集成功后原文件处置:delete / move
INGESTION_FOLDER_POST_PROCESSING_MOVE_FOLDER_PATH./ingestion-donemove 策略的目标目录(相对组织采集目录)
INGESTION_FOLDER_ERROR_FOLDER_PATH./ingestion-error采集失败时文件移入目录
INGESTION_FOLDER_IGNORED_PATTERNS**/.DS_Store,**/.env,…(13 项默认)忽略的 glob 模式(picomatch 语法);更新即整体覆盖默认,不合并

5.9 后台任务与调度参数

任务持久化:

变量默认值说明
TASKS_PERSISTENCE_DRIVERmemorymemory / libsql。官方注释明确:单实例部署 memory 足够;多实例共享任务队列才需 libsql
TASKS_PERSISTENCE_DRIVERS_LIBSQL_URLfile:./tasks-db.sqlitelibsql 任务库连接串
TASKS_PERSISTENCE_DRIVERS_LIBSQL_AUTH_TOKEN空远程 libsql 认证令牌
TASKS_PERSISTENCE_DRIVERS_LIBSQL_MIGRATE_WITH_PRAGMAtrue建库时附带 PRAGMA 语句
TASKS_PERSISTENCE_DRIVERS_LIBSQL_POLL_INTERVAL_MS1000任务轮询间隔
TASKS_WORKER_ID空多 worker 部署时每实例唯一标识

五个定时清理任务(cron 与启动即执行开关;启动日志实录见部署篇 4.3 ✅):

任务CRON 默认RUN_ON_STARTUP 默认职责
DOCUMENTS_HARD_DELETE_EXPIRED_DOCUMENTS0 0 * * *true硬删除超过保留期的回收站文档
ORGANIZATIONS_EXPIRE_INVITATIONS0 0 * * *true过期组织邀请作废
ORGANIZATIONS_PURGE_EXPIRED_ORGANIZATIONS0 1 * * *true彻底清除软删除到期的组织
KV_STORE_PURGE_EXPIRED_ENTRIES0 2 * * *true清理过期 KV 条目(仅 libsql KV 驱动需要)
PLAN_ENTITLEMENTS_REVERIFY0 3 * * *false云托管套餐权益复核(自托管无感)

5.10 分享链接参数

变量默认值说明
DOCUMENT_SHARE_LINKS_BASE_URL空生成分享链接的基址;空则依次回退 APP_BASE_URL → CLIENT_BASE_URL
DOCUMENT_SHARE_LINKS_MAX_LINKS_PER_DOCUMENT10单文档同时存在的分享链接上限
DOCUMENT_SHARE_LINKS_ACCESS_TOKEN_TTL_MINUTES15密码验证通过后签发的访问令牌(JWT)有效期(分钟)
DOCUMENT_SHARE_LINKS_PASSWORD_VERIFICATION_RATE_LIMIT30/1h密码验证尝试限流(防爆破),全局范围
DOCUMENT_SHARE_LINKS_DOCUMENT_ACCESS_RATE_LIMIT3600/1h分享链接文档访问限流,全局范围
DOCUMENT_SHARE_LINKS_FILE_ACCESS_RATE_LIMIT600/1h分享链接文件下载限流,全局范围

💡 说明:限流值格式统一为 次数/时间窗(如 10/h、10/2h、2/5m,单位 s/m/h)。密码验证失败的实测报错(401 share_link.invalid_password)与令牌用法见《Papra 26.7.1 REST API 使用详解》。

5.11 配额与组织参数

变量默认值说明
MAX_ORGANIZATION_COUNT_PER_USER10标准用户可建组织数上限
ORGANIZATION_INVITATION_EXPIRATION_DELAY_DAYS7组织邀请有效期(天)
MAX_USER_ORGANIZATIONS_INVITATIONS_PER_DAY30每用户每日可发邀请数
ORGANIZATIONS_DELETED_PURGE_DAYS_DELAY30软删除组织彻底清除的延迟天数
MAX_TAGS_PER_ORGANIZATION200每组织标签数上限
MAX_CUSTOM_PROPERTIES_PER_ORGANIZATION100每组织自定义属性定义数上限
IS_FREE_PLAN_UNLIMITEDtrue免费套餐不设文档/标签/组织配额——官方注释:自托管实例基本恒为 true
PLANS_PRICE_ID、STRIPE、GLOBAL_COUPON_IDchange-me/空云托管计费专用(Plus/Pro 套餐价目、Stripe 密钥与 webhook、全局优惠券),自托管无需理会

5.12 AI 与自动打标参数

变量默认值说明
AI_IS_ENABLEDfalseAI 功能总开关(自动打标等均以其为前提)
AI_CREDITS_IS_ENABLEDfalseAI 用量计费开关;官方注释:自托管保持关闭
AI_DEFAULT_MODEL空缺省模型,格式 <adapterId>://<modelName>,如 ollama://llama3.1:8b
AUTO_TAGGING_ENABLEDtrue自动打标可用性(组织设置中还需单独启用,且依赖 AI_IS_ENABLED)
AUTO_TAGGING_MODEL空自动打标专用模型(同上格式)
AUTO_TAGGING_DEFAULT_MAX_TAGS5自动打标默认单文档最大标签数(组织设置可覆盖)

九家模型适配器(*_BASE_URL / *_API_KEY):

适配器BASE_URL 默认值API_KEY 默认值
OPENAIhttps://api.openai.com/v1空
ANTHROPIC空空
MISTRALhttps://api.mistral.ai/v1空
DEEPSEEKhttps://api.deepseek.com/v1空
OPENROUTERhttps://openrouter.ai/api/v1空
OLLAMAhttp://localhost:11434/v1ollama
LMSTUDIOhttp://localhost:1234/v1lm-studio
VLLMhttp://localhost:8000/v1not-needed
COCOREhttps://cocore.dev/api/v1空

本地模型(Ollama/LM Studio/vLLM)默认即指向本机端口,内网部署无需公网出口即可启用自动打标。

5.13 遥测与安全参数

变量默认值说明
POSTHOG_ENABLEDfalse产品分析遥测开关,自托管保持关闭即可
POSTHOG_API_KEY / POSTHOG_HOSTset-me / https://eu.i.posthog.com启用遥测时的接入配置
WEBHOOK_SSRF_PROTECTION_ENABLEDtrueWebhook URL 的 SSRF 防护。官方明确不建议关闭;确有内网回调需求时优先用下一项放行指定主机名
WEBHOOK_URL_ALLOWED_HOSTNAMES空SSRF 防护白名单主机名;为空时所有本地/私有/保留 IP 一律拦截

六、生产配置模板

适用场景:10 人以内团队文档归档;2C4G 起、100GB 数据盘;中文扫描件为主;单实例 SQLite;管理员统一建号、注册关闭。以下 .env 可直接套用(注释掉的是按需打开项):

# ===== 基础 =====
APP_BASE_URL=https://docs.example.com
AUTH_SECRET=<用 openssl rand -hex 48 生成后替换>
# PORT=1221
# PROCESS_MODE=all

# ===== 注册与账号 =====
AUTH_IS_REGISTRATION_ENABLED=false        # 关闭公开注册,管理员邀请建号
AUTH_FIRST_USER_AS_ADMIN=true             # 首个注册者自动成为管理员
# AUTH_ALLOWED_EMAIL_DOMAINS=example.com  # 如需开放注册,限定企业域名
AUTH_IS_PASSWORD_RESET_ENABLED=true       # 依赖下方真实邮件通道

# ===== 数据库 =====
DATABASE_URL=file:./app-data/db/db.sqlite # 单机默认;多实例/高并发再评估 postgres://

# ===== 存储与上传 =====
DOCUMENT_STORAGE_DRIVER=filesystem
DOCUMENT_STORAGE_MAX_UPLOAD_SIZE=104857600 # 100MB,按最大单件需求调整
DOCUMENTS_OCR_LANGUAGES=chi_sim,eng        # 中文扫描件 OCR

# ===== 邮件 =====
EMAILS_DRY_RUN=true                        # 调试期只落日志;密码重置需真发时切 SMTP
# SMTP_HOST=smtp.example.com
# SMTP_PORT=587
# SMTP_USER=docs@example.com
# SMTP_PASSWORD=<SMTP 密钥>
# SMTP_SECURE=false

# ===== 生命周期与分享 =====
DOCUMENTS_DELETED_DOCUMENTS_RETENTION_DAYS=30
DOCUMENT_SHARE_LINKS_MAX_LINKS_PER_DOCUMENT=10
DOCUMENT_SHARE_LINKS_ACCESS_TOKEN_TTL_MINUTES=15

# ===== 采集(按需) =====
# INGESTION_FOLDER_IS_ENABLED=true
# INGESTION_FOLDER_ROOT_PATH=/data/ingestion
# INTAKE_EMAILS_IS_ENABLED=true
# INTAKE_EMAILS_CATCH_ALL_DOMAIN=docs.example.com

⚠️ 注意:

  1. AUTH_SECRET 一旦上线不可随意更换(全部会话与 API Key 失效);务必首次部署就固定为自己的随机值并纳入密钥管理。
  2. 若启用文档加密(DOCUMENT_STORAGE_ENCRYPTION_IS_ENABLED=true),必须同时配置 KEK 并离线备份——密钥丢失即数据不可恢复。
  3. 该模板对应 2C4G 档位;文档量超过 10 万份或多人并发上传时,把 DATABASE_URL 切到外部 PostgreSQL 并将 TASKS_PERSISTENCE_DRIVER 保持 memory(单实例)或 libsql(多实例)。

七、常见问题

Q1:上传文件报 Document size too large? 默认单文件上限 25MB(DOCUMENT_STORAGE_MAX_UPLOAD_SIZE=26214400)。27MB 文件实测返回 413,完整回显见 3.3 实测验证 2。按字节调大该值(0 为不限制)并重启实例。

Q2:注册接口报 EMAIL_PASSWORD_SIGN_UP_DISABLED? AUTH_IS_REGISTRATION_ENABLED=false 的预期行为,实测回显见 3.3 实测验证 1。注意该错误无外层 error 对象,与业务接口错误形态不同;开放注册时建议同步配置 AUTH_ALLOWED_EMAIL_DOMAINS 白名单。

Q3:AUTH_SECRET 事后更换会怎样? 全部已有登录会话与 API Key 立即失效(实测 26.7.1 行为),用户需重新登录、API Key 需重建。例行密钥轮换请安排在维护窗口。

Q4:DATABASE_ENCRYPTION_KEY 设置后丢失怎么办? 官方文档明确警告:密钥丢失则数据不可恢复。启用数据库加密前必须把该密钥纳入离线备份;已加密的库无法用其他密钥打开。

Q5:修改 DOCUMENT_STORAGE_KEY_PATTERN 后老文档会搬家吗? 不会。官方注释明确存量文档不自动迁移;DOCUMENT_STORAGE_KEY_SYNC_ENABLED=true 只影响此后被更新的文档。存量迁移走官方 Guides → Migrate Document Storage 流程。

Q6:单实例需要把 TASKS_PERSISTENCE_DRIVER 换成 libsql 吗? 不需要。官方注释明确单实例 memory 足够;只有多实例部署(多个 worker 共享任务队列)才需要统一指向 libsql 任务库。

Q7:重处理文档被限流或拒绝? 每组织默认限流 DOCUMENT_REPROCESSING_RATE_LIMIT=100/h,超限返回 429 并附 Retry-After;整体关闭时返回 403。调整对应两个开关即可,接口行为实测见《Papra 26.7.1 REST API 使用详解》。

八、参考链接

本专栏姊妹篇:《Papra 26.7.1 介绍与选型指南》、《Papra 26.7.1 Docker Compose 部署指南》、《Papra 26.7.1 REST API 使用详解》。

Papra 26.7.1 配置参数详解 - Quzuo