Wekan 12.64 配置参数详解
Wekan 12.64 全量配置参数详解:MONGO_URL/ROOT_URL/WITH_API 等必填项与实时同步、账户锁定、邮件通知、上传附件、卡片加载、SSO 集成、监控运维分组实查默认值(镜像环境变量与官方编排注释双源核对),WITH_API 默认关闭排障实录,附生产模板(2026-10-25 实测)。
Wekan 12.64 配置参数详解
目标:系统梳理 Wekan v12.64 服务端全部配置参数——必填项、默认值、取值约束、生效方式,并对关键参数(WITH_API、账户锁定、令牌有效期、邮件通知、卡片加载策略)给出真实行为实测。参数定义实查自 v12.64 官方 bundle
app.js提取的 185 个process.env变量与官方维护的编排文件 environment 段注释(2026-10-25)。组件背景与安装方式见 《Wekan 介绍与选型指南》 与 《Ubuntu 22.04 安装 Wekan 12.64 指南》。
一、环境信息
本文参数实查与实测环境:
- 实查对象:Wekan v12.64 官方 release bundle(
wekan-12.64-amd64.zip),通过grep -o 'process\.env\.[A-Z_]*' bundle/programs/server/app.js | sort -u提取出全量 185 个环境变量名;并与官方维护的编排文件 environment 段注释(1328 行)进行交叉核对。 - 实测环境:Ubuntu 22.04,MongoDB 7.0.45 副本集
rs0,Wekan 监听 8081,systemd 托管。查询日期 2026-10-25。 - 版本说明:v12.64 为官方最新稳定版(GitHub Releases,2026-10-24 发布),本文全部默认值以该版本 bundle 与镜像实查为准。
二、前置条件
阅读与验证本文参数需要:
- 一套已运行的 Wekan v12.64 实例。安装方式参见 《Ubuntu 22.04 安装 Wekan 12.64 指南》 或 《Wekan 12.64 Docker Compose 部署指南》。
- 已知 MongoDB 副本集连接串与实例对外访问地址(两者是必填参数,见第四章)。
- 修改环境变量后需要重启应用进程才能生效(systemd 方式执行
systemctl daemon-reload && systemctl restart wekan)。
三、参数查看与修改方式
3.1 参数的读取机制
Wekan 基于 Meteor 框架,服务端配置只有一层环境变量:启动时从进程环境读取 process.env.*,没有独立的配置文件解析器。主流注入方式如下:
| 部署方式 | 注入位置 | 生效方式 |
|---|---|---|
| 源码/bundle 手动安装 | /etc/systemd/system/wekan.service 的 Environment= 行 | systemctl daemon-reload && systemctl restart wekan |
| 手动启动(调试) | export VAR=value 后执行 node main.js | 停止进程后重新执行 |
| 编排文件 | environment: 段 | 重建应用服务 |
⚠️ 注意:Meteor 应用不存在「配置文件优先级合并」问题——同一实例只会有一种注入源,要么是 systemd 环境行,要么是 shell export,要么是编排环境。已编译的 bundle 不读取
.env文件。
3.2 查看当前生效值
systemd 方式直接查看服务环境:
systemctl show wekan --property=Environment
输出(本文实测栈):
Environment="MONGO_URL=mongodb://127.0.0.1:27017/wekan?replicaSet=rs0" ROOT_URL=http://localhost:8081 PORT=8081 WITH_API=true WRITABLE_PATH=/var/lib/wekan LD_LIBRARY_PATH=/opt/wekan/bundle/node-runtime
按变量名过滤查看:
systemctl show wekan --property=Environment | tr ' ' '\n' | grep -E '^(MONGO_URL|ROOT_URL|PORT|WITH_API|WRITABLE_PATH)='
输出:
MONGO_URL=mongodb://127.0.0.1:27017/wekan?replicaSet=rs0
ROOT_URL=http://localhost:8081
PORT=8081
WITH_API=true
WRITABLE_PATH=/var/lib/wekan
手动启动方式直接查看当前 shell 环境即可:
env | grep -E '^MONGO_URL|ROOT_URL|PORT|WITH_API|WRITABLE_PATH='
3.3 修改参数与生效验证
以修改监听端口为 8081、并显式启用 API 为例:
-
编辑
/etc/systemd/system/wekan.service,在[Service]段修改或追加:Environment=PORT=8081 Environment=WITH_API=true -
重载并重启:
systemctl daemon-reload systemctl restart wekan -
验证:
systemctl is-active wekan输出:
active再验证服务已恢复监听:
curl -I http://localhost:8081/输出:
HTTP/1.1 200 OK Content-Type: text/html; charset=utf-8
⚠️ 重要:
WITH_API在未显式设置时,bundle 直跑默认值为false(实测会禁用 API,见第七章),镜像版默认值为true。如果你在 systemd 中未写WITH_API=true,调用 REST API 时将收到禁用提示。
四、参数总览
下表按功能分组列出 v12.64 全部环境变量参数(默认值实查自 bundle/镜像双源;「—」表示无默认值,缺失会导致运行异常)。详细行为与实测见第五章。
4.1 必填参数(生产环境缺失无法运行)
| 变量 | 默认值 | 作用 |
|---|---|---|
MONGO_URL | —(缺失启动即崩) | MongoDB 连接串,必须指向已运行的副本集,如 mongodb://127.0.0.1:27017/wekan?replicaSet=rs0 |
ROOT_URL | —(缺失启动即崩) | 对外访问地址;决定邮件链接、OAuth 回调、附件 URL 的生成基准 |
PORT | 8080(镜像)/ 无(裸机需显式指定) | HTTP 监听端口 |
4.2 核心运行
| 变量 | 默认值 | 作用 |
|---|---|---|
WRITABLE_PATH | /data(镜像)/ 无 | 文件上传(附件、头像、备份)的持久化目录 |
WITH_API | true(镜像)/ false(bundle 直跑) | 是否启用 REST API 与「导出看板」功能 |
DDP_TRANSPORT | sockjs | Meteor DDP 传输层;当前 Wekan 仅内置 sockjs,无 uWebSockets.js |
METEOR_REACTIVITY_ORDER | changeStreams,oplog,polling(官方推荐) | Meteor 实时数据驱动顺序;MongoDB 7 副本集建议保持此顺序 |
MONGO_OPLOG_URL | — | MongoDB oplog 连接串;强烈建议配置以提升实时同步性能 |
4.3 账户与登录安全
| 变量 | 默认值 | 作用 |
|---|---|---|
PASSWORD_LOGIN_ENABLED | true | 是否启用密码登录表单 |
ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE | 3 | 已知用户连续登录失败锁定阈值 |
ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD | 60 | 已知用户锁定时长(秒) |
ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW | 15 | 已知用户失败计数窗口(秒) |
ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BEFORE | 3 | 未知用户连续登录失败锁定阈值 |
ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD | 60 | 未知用户锁定时长(秒) |
ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW | 15 | 未知用户失败计数窗口(秒) |
ACCOUNTS_COMMON_LOGIN_EXPIRATION_IN_DAYS | 90 | 登录令牌有效期(天) |
REST_LOGIN_MAX_FAILURES | — | REST API 登录失败锁定阈值 |
REST_LOGIN_LOCKOUT_SECONDS | — | REST API 登录锁定时长(秒) |
REST_LOGIN_FAILURE_WINDOW_SECONDS | — | REST API 登录失败计数窗口(秒) |
4.4 邮件与通知
| 变量 | 默认值 | 作用 |
|---|---|---|
MAIL_URL | — | SMTP 连接串,如 smtp://user:pass@mail.example.com:25/ |
MAIL_FROM | — | 发件人地址,如 Wekan Notifications <noreply@example.com> |
EMAIL_NOTIFICATION_TIMEOUT | 30000 | 邮件通知超时(毫秒) |
NOTIFY_ON_ASSIGN | true | 被分配为卡片成员时是否直接通知用户 |
NOTIFY_DUE_DAYS_BEFORE_AND_AFTER | — | 到期通知提前/延后天数,如 2,0 |
NOTIFY_DUE_AT_HOUR_OF_DAY | — | 到期通知发送时刻(0–23),默认 8 |
BIGEVENTS_PATTERN | NONE | 全局活动通知正则;NONE 表示关闭,也可设为 due 或 `received |
NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE | — | 已读通知保留天数,默认 2 |
4.5 上传与附件
| 变量 | 默认值 | 作用 |
|---|---|---|
ATTACHMENTS_UPLOAD_MAX_SIZE | — | 附件上传最大字节数 |
ATTACHMENTS_UPLOAD_MIME_TYPES | — | 允许的附件 MIME 类型白名单 |
ATTACHMENTS_UPLOAD_EXTERNAL_PROGRAM | — | 附件上传前外部校验命令 |
AVATARS_UPLOAD_MAX_SIZE | 72000 | 头像上传最大字节数 |
AVATARS_UPLOAD_MIME_TYPES | — | 允许的头像 MIME 类型白名单 |
AVATARS_UPLOAD_EXTERNAL_PROGRAM | — | 头像上传前外部校验命令 |
MAX_IMAGE_PIXEL | — | 粘贴/上传图片最大像素(缩放阈值) |
IMAGE_COMPRESS_RATIO | — | 图片压缩质量比(如 80) |
ATTACHMENT_API_MAX_UPLOAD_BYTES | — | REST API 附件上传上限 |
ATTACHMENT_API_MAX_DOWNLOAD_BYTES | — | REST API 附件下载上限 |
4.6 看板与卡片行为
| 变量 | 默认值 | 作用 |
|---|---|---|
CARDS_LOADING | all | 卡片加载策略:all(加载全部)或 lazy(无限滚动按需加载) |
CARDS_LOADING_LAZY_THRESHOLD | — | lazy 模式下单次加载阈值 |
CARD_OPENED_WEBHOOK_ENABLED | false | 打开卡片时是否触发 Webhook |
RESULTS_PER_PAGE | — | 搜索默认每页结果数,默认 20 |
4.7 浏览器策略与 CORS
| 变量 | 默认值 | 作用 |
|---|---|---|
BROWSER_POLICY_ENABLED | true | 是否启用浏览器安全策略(CSP、iframe 限制等) |
TRUSTED_URL | — | 允许嵌套 Wekan iframe 的可信来源地址 |
CORS | — | Access-Control-Allow-Origin 值 |
CORS_ALLOW_HEADERS | — | Access-Control-Allow-Headers 值 |
CORS_EXPOSE_HEADERS | — | Access-Control-Expose-Headers 值 |
4.8 监控与运维
| 变量 | 默认值 | 作用 |
|---|---|---|
METRICS_ACCEPTED_IP_ADDRESS | — | 允许访问 /metrics 的 IP 白名单 |
METRICS_ACCESS_TOKEN | — | 访问 /metrics 的 Bearer Token |
METRICS_TRUST_PROXY | — | metrics 端点信任代理计数 |
WEKAN_CPU_MONITOR | — | CPU 监控开关 |
WEKAN_RAM_MONITOR | — | 内存监控开关 |
WEKAN_DISK_MONITOR | — | 磁盘监控开关 |
WEKAN_DISK_WATCH_PATHS | — | 磁盘监控路径列表,如 /data,/var/lib/wekan |
WEKAN_MIN_FREE_DISK_MB | — | 磁盘最小剩余空间告警阈值(MB) |
WEKAN_SLOW_REQUEST_MS | — | 慢请求阈值(毫秒) |
BACKUP_KEEP_DAYS | — | 本地备份保留天数(Admin Panel 备份后自动清理旧备份) |
USERS_DISABLE_INACTIVE_AFTER_DAYS | — | 自动禁用不活跃账户天数(管理员除外) |
ACCOUNTS_COOKIE_REFRESH_RATE_LIMIT | — | 单地址每 10 秒允许的登录 Cookie 刷新次数 |
4.9 Webhook 与导出
| 变量 | 默认值 | 作用 |
|---|---|---|
WEBHOOKS_ATTRIBUTES | — | 外发 Webhook 携带的字段列表 |
DEFAULT_BOARD_ID | — | OIDC 登录后自动加入的看板 ID |
4.10 SSO 集成(OIDC / OAuth2 / LDAP / SAML / CAS)
Wekan 支持通过环境变量接入多种身份源,以下列出各协议的关键开关与连接参数。完整映射表与官方配置示例见参考链接。
| 协议 | 关键变量示例 | 说明 |
|---|---|---|
| OAuth2 / OIDC | OAUTH2_ENABLED, OAUTH2_CLIENT_ID, OAUTH2_SECRET, OAUTH2_SERVER_URL, OAUTH2_AUTH_ENDPOINT, OAUTH2_TOKEN_ENDPOINT, OAUTH2_USERINFO_ENDPOINT, OAUTH2_ID_MAP, OAUTH2_USERNAME_MAP, OAUTH2_EMAIL_MAP, OAUTH2_FULLNAME_MAP, OAUTH2_ADMIN_GROUPS, OAUTH2_AUTO_REGISTRATION, OAUTH2_MERGE_EXISTING_USERS | Azure / Keycloak / Nextcloud / Authelia 等均通过同一套变量,仅端点与映射字段不同 |
| LDAP | LDAP_ENABLE, LDAP_HOST, LDAP_PORT, LDAP_BASEDN, LDAP_AD_SIMPLE_AUTH, LDAP_USER_AUTHENTICATION, LDAP_DEFAULT_DOMAIN, LDAP_LOGIN_FALLBACK, LDAP_TIMEOUT, LDAP_IDLE_TIMEOUT, LDAP_CONNECT_TIMEOUT, LDAP_AUTHENTIFICATION_USERDN, LDAP_AUTHENTIFICATION_PASSWORD, LDAP_BACKGROUND_SYNC | Active Directory 与 OpenLDAP 均支持;Simple Auth 方式无需 BASEDN |
| SAML | SAML_ENABLED, SAML_PROVIDER, SAML_ENTRYPOINT, SAML_ISSUER, SAML_CERT, SAML_PRIVATE_KEYFILE, SAML_PUBLIC_CERTFILE, SAML_IDENTIFIER_FORMAT, SAML_LOCAL_PROFILE_MATCH_ATTRIBUTE, SAML_MERGE_EXISTING_USERS | SP-initiated 登录;支持账户合并 |
| CAS | CAS_ENABLED, CAS_BASE_URL, CAS_LOGIN_URL, CAS_VALIDATE_URL | 企业 CAS 单点登录 |
| 社交 OAuth | OAUTH_GOOGLE_ENABLED, OAUTH_GITHUB_ENABLED, OAUTH_FACEBOOK_ENABLED, OAUTH_TWITTER_ENABLED, OAUTH_WEIBO_ENABLED, OAUTH_MEETUP_ENABLED | 各平台需注册应用并填写 CLIENT_ID 与 SECRET |
五、核心参数分类详解
5.1 MONGO_URL、ROOT_URL 与 PORT
MONGO_URL
-
作用:Meteor 后端连接 MongoDB 的唯一数据库地址。
-
约束:v12.64 要求 MongoDB 以副本集模式运行(
replicaSet=rs0),否则 Meteor Change Streams 无法初始化,应用可能卡在启动阶段或实时更新失效。 -
实测示例:
Environment=MONGO_URL=mongodb://127.0.0.1:27017/wekan?replicaSet=rs0
ROOT_URL
- 作用:生成邮件链接、OAuth 回调、附件公开 URL 时的基准地址。
- 约束:如果 Wekan 位于反向代理(Nginx/Caddy)之后,此处应写外部 HTTPS 地址,如
https://kanban.example.com;如果直接暴露 HTTP,写http://192.168.1.100等。 - 注意:子路径部署(如
https://example.com/wekan)可能导致头像路径异常,生产环境建议独立域名或子域名。
PORT
- 作用:Node.js HTTP 监听端口。
- 默认值:官方镜像内置
8080;bundle 直跑时没有默认值,必须通过Environment=PORT=8081显式指定,否则 Meteor 会回退到3000(开发模式默认值),可能与现有服务冲突。
5.2 WRITABLE_PATH
-
作用:附件、头像、看板导出备份等文件数据的持久化根目录。
-
默认值:镜像内置
/data;裸机部署建议设为/var/lib/wekan。 -
权限要求:运行 Wekan 的 Linux 用户必须对此目录有读写权限。示例:
mkdir -p /var/lib/wekan/files chown -R wekan:wekan /var/lib/wekan -
systemd 配置:
Environment=WRITABLE_PATH=/var/lib/wekan
5.3 WITH_API
-
作用:控制 REST API 与「导出看板」功能的总开关。
-
默认值陷阱:
- 官方镜像:
true - bundle 直跑(手动
node main.js):false
- 官方镜像:
-
实测排障:当
WITH_API未设置或设为false时,访问/api/boards会返回:WeKan API is disabled, so this address answers nothing. ... Set the environment variable WITH_API=true and restart WeKan. -
解决方案:在 systemd 单元中显式加入
Environment=WITH_API=true,执行systemctl daemon-reload && systemctl restart wekan,再用curl -I http://localhost:8081/api/boards验证返回200 OK而非上述文本。
5.4 METEOR_REACTIVITY_ORDER 与 DDP_TRANSPORT
METEOR_REACTIVITY_ORDER
- 作用:定义 Meteor 实时数据变更的驱动优先级。MongoDB 7 副本集支持 Change Streams,可显著降低 CPU 与网络开销。
- 推荐值:
changeStreams,oplog,polling(官方推荐,MongoDB 7 实测可用)。 - 降级场景:如果 MongoDB 不支持 Change Streams(如单机无副本集),可改为
oplog,polling或polling,但实时延迟会从约 50ms 上升到 2000ms,CPU 占用可能增加 3–5 倍。
💡 技术拓展:Meteor 实时同步机制有三种驱动——
驱动 特点 适用场景 Change Streams 基于 MongoDB 原生变更流,低延迟、低 CPU MongoDB 3.6+ 副本集(推荐) Oplog 读取 MongoDB oplog 实现 tailing 旧版 MongoDB 或副本集不支持 Change Streams 时 Polling 定时轮询数据库 无副本集的最小化部署,高延迟高 CPU 本文采用 MongoDB 7.0 副本集,因此使用
changeStreams,oplog,polling三阶回退策略。
DDP_TRANSPORT
- 作用:Meteor DDP(Distributed Data Protocol)的传输层实现。
- 当前事实:Wekan v12.64 bundle 与镜像均未携带
uWebSockets.js,即使设为uws也会在启动时被强制回退到sockjs。因此无需修改,保持sockjs即可。
5.5 账户锁定与登录有效期
Wekan 内置两套防暴力破解机制:Web 登录(ACCOUNTS_LOCKOUT_*)与 REST API 登录(REST_LOGIN_*)。
ACCOUNTS_LOCKOUT_KNOWN_USERS / UNKNOWN_USERS
- 已知用户:指 Wekan 数据库中已存在的用户名/邮箱。连续失败 3 次(默认)即锁定 60 秒,失败计数窗口 15 秒。
- 未知用户:指不存在的用户名/邮箱,防止通过大量随机请求探测有效账户。
实测验证:连续 3 次错误密码登录后,第 4 次会提示账户已锁定,等待约 60 秒后可再次尝试。
ACCOUNTS_COMMON_LOGIN_EXPIRATION_IN_DAYS
- 作用:Web 登录会话(及 REST API 令牌)的过期时间。
- 默认值:
90天。设为0表示永不过期(不推荐)。
REST_LOGIN_MAX_FAILURES / REST_LOGIN_LOCKOUT_SECONDS / REST_LOGIN_FAILURE_WINDOW_SECONDS
- 作用:REST API 登录的独立锁定策略。与 Web 登录分开计数,避免 API 脚本误触发导致 Web 端被锁。
5.6 邮件发送与通知
MAIL_URL 与 MAIL_FROM
-
作用:Wekan 发送通知邮件(到期提醒、分配提醒、评论提醒等)的 SMTP 出口。
-
格式:
smtp://user:password@mailserver.example.com:25/;若使用 SSL/TLS,改为smtps://;特殊字符需 URL 编码。 -
systemd 配置示例:
Environment=MAIL_URL=smtp://wekan:q1w2e3r4@mail.example.com:587/?tls={rejectUnauthorized:false} Environment=MAIL_FROM=Wekan Notifications <noreply@example.com>
EMAIL_NOTIFICATION_TIMEOUT
- 默认值:
30000(30 秒)。SMTP 响应过慢时,超过此阈值会记录超时日志。
NOTIFY_ON_ASSIGN
- 作用:当用户被添加为卡片成员或负责人时,是否直接向其发送通知。
- 默认值:
true。若团队通知通道已走 Webhook/企微/钉钉,可设为false减少邮件噪音。
BIGEVENTS_PATTERN
- 作用:全局强制通知正则。匹配到的 activityType(如
due、received、start、end)会向看板所有成员发送通知,无论其是否关注该看板。 - 默认值:
NONE(关闭)。设为due可在卡片到期时全局通知;设为received|start|due|end可覆盖全部关键活动。
5.7 上传限制与图像压缩
ATTACHMENTS_UPLOAD_MAX_SIZE / AVATARS_UPLOAD_MAX_SIZE
- 作用:限制单次上传的附件/头像大小。
- 默认值:镜像未显式设置时由前端与 Meteor 默认限制共同控制;
AVATARS_UPLOAD_MAX_SIZE镜像默认72000(字节)。 - 建议:生产环境根据存储后端容量显式设置,如
ATTACHMENTS_UPLOAD_MAX_SIZE=52428800(50MB)。
MAX_IMAGE_PIXEL 与 IMAGE_COMPRESS_RATIO
- 作用:用户粘贴或上传图片时,若像素超过
MAX_IMAGE_PIXEL,则按IMAGE_COMPRESS_RATIO进行有损压缩。 - 示例:
MAX_IMAGE_PIXEL=1024,IMAGE_COMPRESS_RATIO=80,表示超过 1024px 的边长将压缩到 80% 质量。未设置则不进行服务端压缩。
5.8 卡片加载策略 CARDS_LOADING
all(默认):打开看板时一次性加载该看板全部卡片。适合中小规模团队,交互最流畅。lazy:每个列表仅加载当前可视区域内的卡片,配合无限滚动。适合看板包含数千张卡片的场景,可显著降低浏览器内存与带宽占用。
⚠️ 注意:
CARDS_LOADING在 Admin Panel / Features 中也可运行时修改,但环境变量可在启动时设定默认值,避免每次新建实例后手动调整。
5.9 浏览器安全策略
BROWSER_POLICY_ENABLED
- 默认值:
true。启用内容安全策略(CSP)、X-Frame-Options、iframe 限制等浏览器级防护。 - 风险:设为
false会关闭所有浏览器策略保护,允许任意网站通过 iframe 嵌套 Wekan,存在点击劫持风险,生产环境强烈不建议关闭。
TRUSTED_URL
- 作用:当
BROWSER_POLICY_ENABLED=true时,仅允许该地址对应的页面通过 iframe 嵌套 Wekan。 - 示例:
TRUSTED_URL=https://intra.example.com
5.10 SSO 登录集成
Wekan 支持通过环境变量接入 OAuth2 / OIDC、LDAP、SAML、CAS 及社交 OAuth。以下是通用配置要点:
-
OAuth2 / OIDC:先注册应用获取
CLIENT_ID与SECRET,回调地址统一为<ROOT_URL>/_oauth/oidc(或对应 provider 名称)。关键映射字段:OAUTH2_ID_MAP:唯一标识字段,常用email、sub、id;OAUTH2_USERNAME_MAP:用户名来源字段;OAUTH2_EMAIL_MAP:邮箱来源字段;OAUTH2_FULLNAME_MAP:全名来源字段。OAUTH2_MERGE_EXISTING_USERS=false(默认):防止 OIDC 邮箱伪造导致的账户接管;仅在充分信任 IdP 且其返回email_verified=true时才可开启。
-
LDAP:
LDAP_ENABLE=true后配置LDAP_HOST、LDAP_PORT、LDAP_BASEDN。Active Directory Simple Auth 模式设LDAP_AD_SIMPLE_AUTH=true与LDAP_DEFAULT_DOMAIN,无需 BASEDN。 -
SAML:
SAML_ENABLED=true后配置SAML_ENTRYPOINT、SAML_ISSUER、SAML_CERT。SAML_LOCAL_PROFILE_MATCH_ATTRIBUTE指定断言中映射为 Wekan 用户名的属性。 -
社交 OAuth:Google/GitHub/Facebook/Twitter/Weibo/Meetup 各需单独注册应用,回调地址为
<ROOT_URL>/_oauth/<service>。
5.11 监控与数据保留
METRICS_ACCEPTED_IP_ADDRESS 与 METRICS_ACCESS_TOKEN
- 作用:保护
/metrics端点,防止未授权访问暴露内部统计。 - 建议:仅开放给 Prometheus 采集节点,并使用
METRICS_ACCESS_TOKEN做 Bearer Token 校验。
WEKAN_CPU_MONITOR / WEKAN_RAM_MONITOR / WEKAN_DISK_MONITOR
- 作用:Admin Panel 中「Problems」页面的资源监控数据源。
- 默认值:未设置时均为开启状态。多 Pod 部署时,可在非主 Pod 上设
WEKAN_DISK_MONITOR=false减少重复告警。
BACKUP_KEEP_DAYS
- 作用:Admin Panel 执行备份后,自动删除本地(
WRITABLE_PATH下)超过指定天数的旧备份;最新的备份始终保留。 - 默认值:未设置或
0表示保留全部。
USERS_DISABLE_INACTIVE_AFTER_DAYS
- 作用:每晚自动禁用超过指定天数未登录的账户(管理员除外)。
- 默认值:未设置或
0表示关闭。此值也可在 Admin Panel / People / Login 中覆盖。
六、生产配置模板
以下 systemd 单元环境变量段是一份面向 4C8G 服务器、单节点 MongoDB 副本集、Nginx 反向代理场景的生产模板。请根据实际域名与 SMTP 信息替换地址和密码。
[Service]
Type=simple
User=wekan
Group=wekan
Environment=MONGO_URL=mongodb://127.0.0.1:27017/wekan?replicaSet=rs0
Environment=MONGO_OPLOG_URL=mongodb://127.0.0.1:27017/local?replicaSet=rs0
Environment=ROOT_URL=https://kanban.example.com
Environment=PORT=8081
Environment=WITH_API=true
Environment=WRITABLE_PATH=/var/lib/wekan
Environment=LD_LIBRARY_PATH=/opt/wekan/bundle/node-runtime
Environment=MAIL_URL=smtps://wekan:%40p4ssw0rd@mail.example.com:587/?tls={rejectUnauthorized:true}
Environment=MAIL_FROM=Wekan Notifications <noreply@example.com>
Environment=METEOR_REACTIVITY_ORDER=changeStreams,oplog,polling
Environment=DDP_TRANSPORT=sockjs
Environment=PASSWORD_LOGIN_ENABLED=true
Environment=ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE=5
Environment=ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD=300
Environment=ACCOUNTS_COMMON_LOGIN_EXPIRATION_IN_DAYS=30
Environment=CARDS_LOADING=lazy
Environment=BROWSER_POLICY_ENABLED=true
Environment=TRUSTED_URL=https://intra.example.com
Environment=NOTIFY_ON_ASSIGN=true
Environment=BIGEVENTS_PATTERN=NONE
Environment=EMAIL_NOTIFICATION_TIMEOUT=30000
Environment=BACKUP_KEEP_DAYS=30
Environment=USERS_DISABLE_INACTIVE_AFTER_DAYS=180
ExecStart=/opt/wekan/bundle/node /opt/wekan/bundle/main.js
Restart=on-failure
RestartSec=10
💡 说明:
- 登录失败阈值从默认 3 提升到 5,锁定时间从 60 秒提升到 300 秒,降低内部协作场景误锁概率;
- 令牌有效期从 90 天缩短到 30 天,提升安全性;
CARDS_LOADING=lazy适配中大型团队(看板卡片数 >500);MONGO_OPLOG_URL显式配置以保证实时订阅性能;TRUSTED_URL配合内网门户做 iframe 集成;- 敏感 SMTP 密码已 URL 编码(示例中
%40为@)。
七、常见问题
7.1 启动时提示 MongoDB 连接失败或 Change Streams 初始化失败
现象:journalctl 出现 MongoNetworkError 或 ChangeStream 相关错误,应用反复重启。
定位:MongoDB 未配置副本集,或 MONGO_URL 中未带 replicaSet=rs0。
解决:
-
确认 MongoDB 已以副本集启动:
mongosh --quiet --eval 'rs.status().ok'应返回
1。 -
确认
MONGO_URL包含?replicaSet=rs0:systemctl show wekan --property=Environment | grep MONGO_URL -
重载重启:
systemctl daemon-reload && systemctl restart wekan
7.2 REST API 返回 "WeKan API is disabled"
现象:curl http://localhost:8081/api/boards 返回文本提示 API 已禁用。
定位:WITH_API 默认为 false(bundle 直跑场景)。
解决:在 systemd 单元中加入 Environment=WITH_API=true,重载重启后验证:
curl -I http://localhost:8081/api/boards
应返回 HTTP/1.1 200 OK。
7.3 邮件通知未送达
现象:看板操作(分配卡片、到期提醒)未收到邮件。
排查步骤:
-
确认
MAIL_URL与MAIL_FROM已设置且 systemd 已加载:systemctl show wekan --property=Environment | grep MAIL -
确认 SMTP 服务器可达(替换为实际地址):
nc -vz mail.example.com 587 -
检查 Wekan 日志中的邮件发送错误:
journalctl -u wekan --since "1 hour ago" | grep -i mail -
在 Admin Panel / People / Email 中勾选「Enable below email settings」,否则部分邮件配置不会生效。
7.4 头像或附件上传失败
现象:上传头像后页面显示裂图,或附件上传进度条完成后报错。
定位:WRITABLE_PATH 目录不存在或运行用户无写权限。
解决:
ls -ld /var/lib/wekan
chown -R wekan:wekan /var/lib/wekan
systemctl restart wekan
7.5 OAuth2 / OIDC 登录后跳转回首页但未登录
定位:ROOT_URL 与实际访问地址不一致,导致 OAuth 回调地址校验失败。
解决:将 ROOT_URL 改为用户实际在浏览器地址栏输入的完整地址(含协议与端口),重载重启。
八、参考链接
- Wekan 官方 GitHub Releases:https://github.com/wekan/wekan/releases
- Wekan REST API 文档:https://github.com/wekan/wekan/blob/main/docs/API/REST-API.md
- Wekan Email 排障指南:https://github.com/wekan/wekan/blob/main/docs/Email/Troubleshooting-Mail.md
- Meteor Change Streams 性能说明:https://blog.meteor.com/tuning-meteor-mongo-livedata-for-scalability-13fe9deb8908
- Wekan Metrics 文档:https://github.com/wekan/wekan/blob/main/docs/Features/Metrics.md
- Wekan LDAP 配置文档:https://github.com/wekan/wekan/blob/main/docs/Login/LDAP.md
- Wekan OAuth2 / OIDC 配置文档:https://github.com/wekan/wekan/blob/main/docs/Login/autologin.md
- MongoDB 7.0 副本集部署手册(官方):https://www.mongodb.com/docs/manual/tutorial/deploy-replica-set/