Mayan EDMS 配置参数详解
Mayan EDMS 4.12.2 配置参数详解:MAYAN_* 环境变量映射规则、官方 .env 全变量表、数据库/Redis/邮件/Gunicorn/Celery 队列参数、smart_settings 三层配置体系与验证排障,基于 4.12.2 实测取证。
Mayan EDMS 配置参数详解
目标:讲清 Mayan EDMS 4.12.2 的配置体系——环境变量层(
MAYAN_*前缀)、smart_settings 层(config.yml)、服务进程参数(Gunicorn/Celery)三层的映射关系与全部常用参数,并给出实测验证方法。所有变量取值均来自实测环境(官方 Docker Compose 部署,见 《Mayan EDMS Docker Compose 部署实战》),查询日期 2026-10-28。
一、环境信息
- Mayan EDMS:4.12.2(官方
s4.12镜像,2026-10-28 实测运行中) - 部署形态:官方 Docker Compose 默认 profile(应用一体 + PostgreSQL 15.17 + Redis 7.4.8 + RabbitMQ 4.1.8-management)
- 取证命令:应用内
env | grep MAYAN(进程环境实值)、settings_show(生效设置)、编排文件与官方.env模板(2026-10-28 自 GitLab master 下载) - 本文变量名均在 4.12.2 实测存在且生效;
config.yml头部版本戳实测为# Version: 4.12.2 v4.12.2-39-g16850d008cb_Wed Sep 16 10:01:41 2026
二、配置体系总览
Mayan EDMS 的配置分三层,读取优先级从高到低:
| 层 | 载体 | 作用域 | 典型用途 |
|---|---|---|---|
| 环境变量层 | MAYAN_<设置名> 环境变量 | 应用进程启动时注入 | 部署期定制:数据库/队列/端口/初始化账号 |
| smart_settings 层 | 数据库 + 持久卷上的 config.yml | 运行期全局生效 | Web 界面或命令行调整业务设置(OCR、认证、外观等) |
| Django 默认值 | 代码内置 settings 模块 | 兜底 | 未覆盖时生效 |
三条实测验证:
- 前缀映射规则:环境变量名去掉
MAYAN_前缀即 Django 设置名。实测应用进程内MAYAN_CELERY_BROKER_URL=amqp://mayan:mayanrabbitpass@rabbitmq:5672/mayan,settings_show输出CELERY_BROKER_URL: amqp://mayan:mayanrabbitpass@rabbitmq:5672/mayan,一一对应。 - 复杂值用 Python 字面量:
MAYAN_DATABASES的实值是一个字典字符串{'default':{'ENGINE':'django.db.backends.postgresql','NAME':'mayan','PASSWORD':'mayandbpass','USER':'mayan','HOST':'postgresql','PORT':,'CONN_MAX_AGE':0,}},官方编排用它把 Compose 变量拼成 Django 的DATABASES。 - 配置文件落盘:应用启动后把当前设置快照写到持久卷
config.yml(实测路径/var/lib/mayan/config.yml,头部带版本戳与时间戳),升级时另存config_backup.yml。
Compose 部署时,
.env里的变量经编排文件的env_file注入全部 Mayan 服务;还支持可选的.env-local覆盖层(编排中required: false),适合在不改动.env的机器本地化差异。
三、官方 .env 模板变量全表
以下变量在官方 .env 模板中定义(生效项 + 注释可选项,2026-10-28 版),按功能分组:
3.1 Compose 行为层(作用于编排解析)
| 变量 | 默认值 | 说明 |
|---|---|---|
COMPOSE_PROJECT_NAME | mayan | 项目名,决定网络/卷名前缀;不允许点号 |
COMPOSE_PROFILES | all_in_one,postgresql,rabbitmq,redis | 启用的服务 profile |
MAYAN_DOCKER_ENV_FILE | .env | 注入服务的环境文件路径 |
MAYAN_APP_VOLUME | app | 应用数据卷名(挂到 /var/lib/mayan) |
MAYAN_POSTGRESQL_VOLUME / MAYAN_POSTGRESQL_VOLUME_INITDB / MAYAN_RABBITMQ_VOLUME / MAYAN_REDIS_VOLUME / MAYAN_ELASTICSEARCH_VOLUME / MAYAN_POSTGRESQL_BACKUPS_VOLUME / MAYAN_TRAEFIK_LETSENCRYPT_VOLUME | 对应组件名 | 各数据卷名 |
3.2 镜像与端口
| 变量 | 默认值 | 说明 |
|---|---|---|
MAYAN_DOCKER_IMAGE_NAME / MAYAN_DOCKER_IMAGE_TAG | mayanedms/mayanedms / s4.12 | 应用镜像与标签 |
MAYAN_FRONTEND_HTTP_PORT | 80 | 宿主 Web 端口(映射应用 8000),实测设为 8140 |
MAYAN_DOCKER_POSTGRESQL_IMAGE / _TAG | postgres / 15.17 | 数据库镜像 |
MAYAN_DOCKER_REDIS_IMAGE / _TAG | redis / 7.4.8 | Redis 镜像 |
MAYAN_DOCKER_RABBITMQ_IMAGE / _TAG | rabbitmq / 4.1.8-management | 队列镜像 |
MAYAN_DOCKER_ELASTICSEARCH_IMAGE / _TAG | elasticsearch / 9.1.10 | 可选检索后端镜像 |
MAYAN_DOCKER_TRAEFIK_IMAGE / _TAG | traefik / v3.7.9 | 可选代理镜像 |
MAYAN_RABBITMQ_ADMIN_HTTP_PORT | 15672 | 队列管理界面宿主端口(需解开注释) |
MAYAN_TRAEFIK_HTTP_PORT / _HTTPS_PORT / _DASHBOARD_HTTP_PORT | 80 / 443 / 8080 | Traefik 宿主端口(未启用则无效) |
3.3 数据库与伴生服务连接
| 变量 | 默认值 | 说明 |
|---|---|---|
MAYAN_DATABASE_NAME / _USER / _PASSWORD | mayan / mayan / mayandbpass | 数据库三元组(官方注释:仅首启前修改安全) |
MAYAN_DATABASE_HOST / _PORT | postgresql / 空(5432) | 外接数据库时改 HOST |
MAYAN_DATABASE_CONN_MAX_AGE | 0 | 连接复用秒数 |
MAYAN_DATABASE_EXTRA_OPTIONS | 空 | 追加进 DATABASES 的额外键值 |
MAYAN_DOCKER_POSTGRESQL_MAX_CONNECTIONS | 150 | PostgreSQL max_connections |
MAYAN_RABBITMQ_USER / _PASSWORD / _VHOST | mayan / mayanrabbitpass / mayan | 队列连接三元组 |
MAYAN_RABBITMQ_CONSUMER_TIMEOUT | 1800000 | 消费超时毫秒数 |
MAYAN_REDIS_PASSWORD | mayanredispassword | Redis 密码 |
MAYAN_REDIS_RESULT_DATABASE / _LOCK_MANAGER_DATABASE / _SERVER_SIDE_EVENTS_DATABASE | 1 / 2 / 3 | 结果/锁/事件流分库号 |
MAYAN_DOCKER_RABBITMQ_HOSTNAME / _PORT、MAYAN_DOCKER_REDIS_HOSTNAME / _PORT | rabbitmq/5672、redis/6379 | 内部服务寻址 |
MAYAN_ELASTICSEARCH_PASSWORD | mayanespassword | 可选检索后端密码 |
3.4 应用行为与初始化
| 变量 | 默认值 | 说明 |
|---|---|---|
MAYAN_AUTOADMIN_USERNAME / _PASSWORD | 未设(随机密码) | 首启自动管理员的凭据(实测 admin/q1w2e3r4 生效) |
MAYAN_FRONTEND_HTTP_PORT | 80 | 见上 |
MAYAN_ALLOWED_HOSTS | 空(接受任意主机头) | Django 主机头校验白名单,YAML 列表写法 ['host.example.com'] |
MAYAN_GUNICORN_BIND_CONTAINER_IP_ONLY | 未启用 | 加固:仅监听容器自身 IP |
MAYAN_DOCKER_WAIT | postgresql:5432 rabbitmq:5672 redis:6379 | 启动前依赖探活清单(实测日志 "All services connected.") |
MAYAN_WORKER_CUSTOM_QUEUE_LIST | 空 | 自定义队列 worker 的队列清单 |
MAYAN_APT_INSTALLS | 空 | 启动时 apt 安装的系统包(实测装 tesseract-ocr-chi-sim 成功) |
MAYAN_PIP_INSTALLS | 空 | 启动时 pip 安装的 Python 包 |
MAYAN_MIRROR_CABINET_NAME / MAYAN_MIRROR_INDEX_NAME | 空 | 抽屉/索引镜像服务的目标名 |
3.5 Traefik(默认关闭)
MAYAN_TRAEFIK_FRONTEND_ENABLE、MAYAN_TRAEFIK_DASHBOARD_ENABLE、MAYAN_TRAEFIK_DASHBOARD_AUTHENTICATION、MAYAN_TRAEFIK_EXTERNAL_DOMAIN、MAYAN_TRAEFIK_LETS_ENCRYPT_EMAIL/_SERVER/_TLS_CHALLENGE/_DNS_CHALLENGE/_DNS_CHALLENGE_PROVIDER、MAYAN_TRAEFIK_RABBITMQ_ENABLE、MAYAN_TRAEFIK_API_INSECURE。注意默认证书指向 Let's Encrypt staging 环境(acme-staging-v02),生产要显式改 MAYAN_TRAEFIK_LETS_ENCRYPT_SERVER 为正式地址。
邮件(SMTP)不在
.env模板中,属于 Django 设置层:需以MAYAN_EMAIL_HOST等MAYAN_前缀环境变量注入(映射EMAIL_HOST),或用 smart_settings 持久化;发信能力可用sendtestemail命令验证(见运维实战篇)。
四、应用内 MAYAN_* 变量实测值
应用进程内 env | grep MAYAN 实测(排序后全量摘录,即 4.12.2 真实生效集):
MAYAN_AUTOADMIN_PASSWORD=q1w2e3r4
MAYAN_AUTOADMIN_USERNAME=admin
MAYAN_CELERY_BROKER_URL=amqp://mayan:mayanrabbitpass@rabbitmq:5672/mayan
MAYAN_CELERY_RESULT_BACKEND=redis://:mayanredispassword@redis:6379/1
MAYAN_DATABASES={'default':{'ENGINE':'django.db.backends.postgresql','NAME':'mayan','PASSWORD':'mayandbpass','USER':'mayan','HOST':'postgresql','PORT':,'CONN_MAX_AGE':0,}}
MAYAN_DOCKER_WAIT=postgresql:5432 rabbitmq:5672 redis:6379
MAYAN_FRONTEND_HTTP_PORT=8140
MAYAN_LOCK_MANAGER_BACKEND=mayan.apps.lock_manager.backends.redis_lock.RedisLock
MAYAN_LOCK_MANAGER_BACKEND_ARGUMENTS={'redis_url':'redis://:mayanredispassword@redis:6379/2'}
MAYAN_MEDIA_ROOT=/var/lib/mayan
MAYAN_MIRROR_CABINET_NAME=
MAYAN_MIRROR_INDEX_NAME=
MAYAN_SERVER_SIDE_EVENTS_BACKEND=mayan.apps.server_side_events.sse_backends.redis.RedisServerEventStreamBackend
MAYAN_SERVER_SIDE_EVENTS_BACKEND_ARGUMENTS={'url':'redis://:mayanredispassword@redis:6379/3'}
MAYAN_STATIC_ROOT=/opt/mayan-edms/static
MAYAN_WORKER_CUSTOM_QUEUE_LIST=
几个关键语义:
- Redis 四分库:db0 通用缓存、db1 Celery 结果、db2 分布式锁(
RedisLock后端)、db3 服务端事件流。编排文件注释明确指出锁与结果是语义键而非缓存,故 Redis 以--maxmemory-policy noeviction运行——键被淘汰意味着互斥静默失效或任务账本丢失,宁可写失败也要失败得响亮;每个键自带过期时间,内存上限由--maxmemory 100mb控制。 - 路径变量:
MAYAN_MEDIA_ROOT=/var/lib/mayan(文档文件与配置落盘点,对应应用数据卷)、MAYAN_STATIC_ROOT=/opt/mayan-edms/static(静态资源,构建于镜像内)。 MAYAN_FRONTEND_HTTP_PORT:该值由 Compose 端口映射消费(宿主 8140→应用 8000),并非 Django 设置,settings_show里找不到它属正常。PORT为空:MAYAN_DATABASES里'PORT':,是官方编排模板的空参写法,Django 视为空串走 PostgreSQL 默认 5432,非错误。
五、服务进程参数(Gunicorn 与 Celery)
5.1 Gunicorn 实际启动参数
Web 前端由 supervisor 托管,进程命令行实测:
gunicorn --bind 0.0.0.0:8000 --chdir /opt/mayan-edms
--env DJANGO_SETTINGS_MODULE=mayan.settings.production
--limit-request-line 4094 --log-level error
--max-requests 500 --max-requests-jitter 50
--no-control-socket --worker-tmp-dir=/dev/shm
--timeout 120 --worker-class gevent --workers 3 mayan.wsgi
调优要点:worker 类是 gevent(协程型,适合长连接轮询的文档管理界面);--timeout 120 对应大文件上传/下载场景;--max-requests 500 定期回收防内存泄漏;请求行上限放宽到 4094 以容纳长检索串。
5.2 Celery worker 六队列分工
一体内 six 个 worker 的队列映射实测(进程 cmdline 摘录):
| Worker | 队列 | 并发 | 内存/子进程上限 | 任务上限 |
|---|---|---|---|---|
| worker_a | converter, default | 4 | 500 MB | 4000 |
| worker_b | documents_fast, documents_file, documents_file_slow, documents_slow, documents_version, events_fast, file_caching, indexing, metadata, ocr, sources, storage, workflows | 8 | 1.2 GB | 10000 |
| worker_c | documents_downloads, documents_exports, documents_periodic, documents_trash, duplicates(+_slow), events_slow, file_caching_slow, indexing_slow, mailing, parsing, signatures, sources_periodic, statistics, storage_periodic, task_manager_periodic, workflows_slow | 4 | 1.0 GB | 4000 |
| worker_d | ocr_slow | 2 | 1.5 GB | 2000 |
| worker_e | authentication_attempts, checkouts_periodic, search, search_slow, server_side_events_periodic | 4 | 500 MB | 20000 |
| worker_f | file_metadata, signatures_slow | 1 | 1.0 GB | 2000 |
实测要点:OCR 分双队列——常规识别走 worker_b 的 ocr,大页慢任务走 worker_d 的 ocr_slow(独享 1.5 GB 内存上限);全部 worker 带 --prefetch-multiplier=1(防任务饿死)。队列深度可用队列管理命令观察(见运维实战篇)。
六、smart_settings 层(config.yml)
6.1 读写命令
smart_settings 提供三条管理命令(经管理命令入口执行):
settings_show:输出当前生效设置(运行值)settings_save:把修改持久化到config.ymlsettings_revert:回退到默认/上一版本
config.yml 头部实测(含版本戳,升级时自动写 config_backup.yml):
# Version: 4.12.2 v4.12.2-39-g16850d008cb_Wed Sep 16 10:01:41 2026
# Date and time: 2026-10-28 06:29:22.064195
ALLOWED_HOSTS:
- '*'
APPEARANCE_APP_TEMPLATE_CACHE_VERIFY: false
...
6.2 常用设置项实测摘录
OCR_AUTO_OCR: true
OCR_BACKEND: mayan.apps.ocr.backends.tesseract.Tesseract
OCR_BACKEND_ARGUMENTS:
AUTHENTICATION_LOCKOUT_ENABLED: false
AUTHENTICATION_LOCKOUT_FAILURE_LIMIT: 5
AUTHENTICATION_LOCKOUT_COOLOFF_TIME: 0.25
AUTHENTICATION_LOCKOUT_RESET_ON_SUCCESS: true
AUTHENTICATION_DISABLE_PASSWORD_RESET: false
AUTOADMIN_EMAIL: autoadmin@example.com
AUTOADMIN_PASSWORD: q1w2e3r4
AUTOADMIN_USERNAME: admin
⚠️ 安全提醒:
settings_show会明文显示AUTOADMIN_PASSWORD等敏感值。排查配置时不要把输出直接贴到公开渠道;演示环境的弱密码仅限隔离网络。
6.3 与环境变量的优先级
实测结论:环境变量在进程启动时注入,smart_settings 存于数据库/配置文件;同一设置两者都配置时,环境变量优先(settings_show 显示的 AUTOADMIN_PASSWORD 正是 .env 注入值)。日常运维建议:部署期参数进 .env,运行期业务参数用界面/settings_save,避免同一参数两处维护。
七、伴生服务参数(编排内置调优)
官方编排对三个伴生服务已做面向文档管理场景的预调优(编排文件实测):
| 服务 | 参数 | 值 | 用意 |
|---|---|---|---|
| PostgreSQL | shared_buffers | 512MB | 元数据热点页缓存 |
| PostgreSQL | work_mem | 32MB | 检索/索引排序内存 |
| PostgreSQL | maintenance_work_mem | 128MB | 迁移/重建索引加速 |
| PostgreSQL | default_statistics_target | 200 | 复杂过滤查询的执行计划质量 |
| PostgreSQL | max_connections | 150(可调) | 与应用连接数匹配 |
| Redis | maxmemory-policy | noeviction | 见 §四,锁/结果语义保护 |
| Redis | maxmemory / maxclients | 100mb / 500 | 小内存高并发定位 |
| RabbitMQ | consumer_timeout | 1800000ms | 允许大文档 OCR 长消费 |
八、运行时扩展机制(MAYAN_APT_INSTALLS / MAYAN_PIP_INSTALLS)
官方入口脚本在每次启动时执行两个安装阶段(实测日志):
Executing `os_package_installs`. # 读 MAYAN_APT_INSTALLS,apt 安装
Executing `pip_installs`. # 读 MAYAN_PIP_INSTALLS,pip 安装
实测案例:.env 设 MAYAN_APT_INSTALLS=tesseract-ocr-chi-sim 重建后,tesseract --list-langs 从 2 个语言包(eng/osd)变为 3 个(新增 chi_sim)。注意事项:
- 这两个变量是每次启动都执行:已装的包会秒过,未联网时会因 apt 失败阻塞启动,离线环境应改用自定义镜像预装。
- 安装层易失:镜像重建/升级后包会丢,依赖此机制的配置必须保留在
.env(或做持久化自定义镜像)。
九、配置验证与排障
9.1 三条验证路径
- 看进程实值:应用内
env | grep MAYAN——验证.env是否真的注入。 - 看生效设置:
settings_show——验证映射后的 Django 设置值(含 smart_settings 覆盖)。 - 看解析编排:
docker compose config——验证 Compose 层变量替换结果(端口、卷、环境)。
9.2 典型坑
- 改了
.env不生效:.env是启动时注入,改完必须重建服务(up -d会滚动重建受影响服务)。 - 改密码不同步:
MAYAN_DATABASE_PASSWORD等官方注释明示「仅首启前修改」;组件已初始化后再改只会导致连接失败,应按组件自身的改密流程走。 MAYAN_FRONTEND_HTTP_PORT在设置里搜不到:它是 Compose 层端口变量不是 Django 设置,验证走docker compose config。ALLOWED_HOSTS校验失败:设了MAYAN_ALLOWED_HOSTS后用未列域名访问会 400;YAML 列表写法,逗号分隔无效。- 配置项名对不上:老文档里的部分设置名在 4.x 已变(如旧版
showsettings命令在 4.12.2 已不存在,相应能力由settings_show/diffsettings承担),以settings_show实际输出为准。
十、参考链接
- Docker 定制章节(.env 优先原则与
compose config验证法):https://docs.mayan-edms.com/chapters/docker/docker_compose_customize.html - 官方 .env 模板(2026-10-28 版):https://gitlab.com/mayan-edms/mayan-edms/-/blob/master/docker/.env
- 官方编排文件:https://gitlab.com/mayan-edms/mayan-edms/-/blob/master/docker/docker-compose.yml
- First steps(自动管理员变量):https://docs.mayan-edms.com/chapters/getting_started.html
- 站内互链:《Mayan EDMS Docker Compose 部署实战》、《Mayan EDMS 常用命令与运维实战》、《Mayan EDMS 介绍与选型指南》