.env.example 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. # 数据库连接:达梦 DM(当前启用;主机不变,端口 5236,用户/库名 DMS)
  2. # 兼容两种格式:Python 版 dm+dmPython:// 连接串会被自动转换为 jdbc:dm://
  3. DMS_DATABASE_URL=dm+dmPython://DMS:change-me@127.0.0.1:5236
  4. # 原 MySQL 8 连接(保留备查,回切时取消注释并注释上方 DM 链接):
  5. # DMS_DATABASE_URL=mysql+pymysql://dms_app:change-me@127.0.0.1:3306/dms?charset=utf8mb4
  6. # 存储根目录:留空时使用工作目录下 dms-storage/。
  7. # 与 Python 版并行验证共用存储时,显式指向 backend/dms-storage
  8. # DMS_STORAGE_ROOT=
  9. # 留空时使用内置中文UI字典;部署时可指向外部UTF-8 JSON,修改后需重启
  10. DMS_UI_DICTIONARY_CONFIG_PATH=
  11. # 单文件、请求总大小与批量文件数
  12. DMS_MAX_FILE_SIZE=52428800
  13. DMS_MAX_UPLOAD_SIZE=104857600
  14. DMS_BATCH_MAX_FILES=50
  15. # LibreOffice 离线转换配置(DOC/DOCX 转 PDF 预览)
  16. DMS_OFFICE_PREVIEW_ENABLED=true
  17. DMS_LIBREOFFICE_EXECUTABLE=C:\\Program Files\\LibreOffice\\program\\soffice.exe
  18. DMS_LIBREOFFICE_TIMEOUT_SECONDS=60
  19. DMS_LIBREOFFICE_MAX_CONCURRENCY=2
  20. # JWT 密钥(与 Python 版一致时两套后端令牌互通)
  21. DMS_JWT_SECRET=replace-with-a-random-secret
  22. # 访问令牌有效期(秒),缺省 3600(1 小时);保持登录(7 天)不受此项影响
  23. DMS_JWT_EXPIRES_SECONDS=3600
  24. # 页面空闲自动登出(分钟),缺省 5:用户在页面上无鼠标/滚动/键盘等操作持续
  25. # 达到该时长后前端自动退出登录;设为 0 表示关闭该功能
  26. DMS_IDLE_LOGOUT_MINUTES=5
  27. # 高级检索·提供单位机构级别,缺省 2:提供单位下拉展示机构树第 N 级机构
  28. # (1=一级机构,2=二级机构,依此类推),选中后按该机构及其下级过滤
  29. DMS_SEARCH_ORG_FILTER_LEVEL=2
  30. # 登录图片验证码(缺省 false 关闭,键与 Python 版一致):开启时登录页显示图片
  31. # 验证码输入,登录请求需携带 captchaId/captchaCode;关闭后回归三键请求体
  32. DMS_CAPTCHA_ENABLED=false
  33. # 超级管理员登录开关(缺省 true 允许,键与 Python 版一致):设为 false 后内置
  34. # admin 禁止登录(报错与用户名或密码错误完全一致)、用户列表隐藏 admin、创建
  35. # 同名用户报"不能创建该名称的用户",外部无法感知系统中存在该账号
  36. DMS_ALLOW_ADMIN_LOGIN=true
  37. # ─────────────────────────────────────────────────────────────
  38. # 禁用用户名密码登录(安全管控)
  39. # ─────────────────────────────────────────────────────────────
  40. # 缺省 false。设为 true 后仅允许单点登录(门户跳转验签、本地 SSO 代理)进入系统:
  41. # POST /auth/login 一律 403「用户名密码登录已被禁用」(先于验证码校验与用户查询,
  42. # 不消耗验证码、不泄露账号是否存在),登录页隐藏账号密码表单仅显示单点登录提示。
  43. # 注意:开启前请确认门户(DMS_PORTAL_*)或本地 SSO(DMS_SSO_PROXY_ENABLED=true)
  44. # 至少一项可用,否则将无人能登录系统(需改回 .env 后重启方可恢复)
  45. DMS_PASSWORD_LOGIN_DISABLED=false
  46. # 登录界面重置密码审批流(契约1.49)
  47. # ─────────────────────────────────────────────────────────────
  48. # 登录页(含单点登录的独立密码界面)可自助提交重置密码申请,按用户类型路由
  49. # 审批角色;审批人在通知页待办处理(先到先得),通过后该用户密码清空、
  50. # 回首次登录态(经单点登录进入时重新设置独立密码)。
  51. # 两个键的值均为「角色名」:该角色须存在且启用、且至少有一名活跃挂载用户,
  52. # 否则提交申请时报错;首长密码不可再由系统管理员在用户管理中直接重置。
  53. # DMS_RESET_PASSWORD_APPROVER_ROLE_COMMANDER=安全管理员
  54. # DMS_RESET_PASSWORD_APPROVER_ROLE_NORMAL=系统管理员
  55. # 一次一码轮换(安全需求:写操作防重放,缺省 true 开启,当前仅 Java 版实现):
  56. # 开启后 POST/PUT/DELETE 写操作成功响应经 X-DMS-Access-Token 头返回轮换出的新
  57. # 授权码,旧码对写操作立即失效(401 SESSION_ROTATED);GET 读请求沿用原码不轮换。
  58. # 设为 false 时登录不落会话代、写操作不比对不轮换,存量会话自然过渡
  59. DMS_TOKEN_ROTATION_ENABLED=true
  60. # 系统管理页监控信息展示(缺省 false):false 时系统管理页仅显示维护操作与备份管理,
  61. # 隐藏系统信息/资源监控/存储用量/运行参数等区块;true 时完整显示
  62. DMS_SYSTEM_MONITOR_ENABLED=false
  63. # rsync 可执行文件路径(可选,RSYNC 备份模式用):留空自动探测——先 PATH 上的
  64. # rsync,再发行目录 tools/rsync/ 内置版(Windows 发行包已随包携带 cwRsync)
  65. # DMS_RSYNC_EXECUTABLE=
  66. # 应用层信封加密 KEK(契约1.21):base64 编码的 32 字节密钥。
  67. # 配置后 original/ 新落盘文件以 AES-256-GCM(KEK/DEK)加密存储,读路径自动解密;
  68. # 留空=明文落盘(存量文件始终可读,不回迁加密)。
  69. # 生成示例:python -c "import secrets,base64;print(base64.b64encode(secrets.token_bytes(32)).decode())"
  70. # 注意:密钥丢失将导致已加密文件无法读取,请妥善备份;变更密钥前需先用旧密钥回迁解密。
  71. DMS_STORAGE_KEK=
  72. # CORS 跨域白名单(逗号分隔 Origin);默认留空=仅同源访问(推荐,前端由本服务托管)。
  73. # 仅开发分域联调时配置,例如 DMS_CORS_ORIGINS=http://localhost:5173
  74. DMS_CORS_ORIGINS=
  75. # ─────────────────────────────────────────────────────────────
  76. # 门户跳转按需登录(键与 Python 版完全一致,详见 docs/门户对接指南.md)
  77. # ─────────────────────────────────────────────────────────────
  78. DMS_PORTAL_PROVIDER=
  79. DMS_PORTAL_TOKEN_PARAM=token
  80. DMS_PORTAL_VERIFY_URL=
  81. DMS_PORTAL_VERIFY_METHOD=POST
  82. DMS_PORTAL_VERIFY_TOKEN_IN=header
  83. DMS_PORTAL_VERIFY_HEADER=Authorization
  84. DMS_PORTAL_VERIFY_HEADER_TEMPLATE=Bearer {token}
  85. DMS_PORTAL_VERIFY_SUCCESS_FIELD=code
  86. DMS_PORTAL_VERIFY_SUCCESS_VALUE=0
  87. DMS_PORTAL_VERIFY_USER_FIELD=data
  88. DMS_PORTAL_USERINFO_URL=
  89. DMS_PORTAL_USERINFO_UID_PARAM=userId
  90. DMS_PORTAL_FIELD_MAP=externalId:userId,username:loginName,realName:realName,orgName:orgName
  91. DMS_PORTAL_DEFAULT_ORG_ID=
  92. DMS_PORTAL_HTTP_TIMEOUT_SECONDS=10
  93. # ─────────────────────────────────────────────────────────────
  94. # 本地单点登录代理(需求2,仅Java版,契约1.25;详见 docs/门户对接指南.md 场景D)
  95. # 开关缺省 false;开启后前端未登录时自动探测 proxy-verify,成功进入门户双阶段流程
  96. # ─────────────────────────────────────────────────────────────
  97. DMS_SSO_PROXY_ENABLED=false
  98. DMS_SSO_PROXY_HOST=127.0.0.1
  99. DMS_SSO_PROXY_PORT=8080
  100. DMS_SSO_USER_SERVICE_HOST=127.0.0.1
  101. DMS_SSO_USER_SERVICE_PORT=8800
  102. DMS_SSO_TIMEOUT_SECONDS=10