Cypht 2.13 配置参数详解
Cypht 2.13 配置体系全解:.env 生效链路实测、9 大功能域 200+ 参数逐项释义、生产配置模板与高频排障。
Cypht 2.13 配置参数详解
> 目标:讲透 Cypht 2.13 的配置体系(.env → config/*.php → config_gen.php 重建),按功能域逐项解释 200+ 参数的语义、默认值与改动影响,并给出生产配置模板。参数清单以 v2.13.0 源码 /.env.example、config/app.php 为准,关键行为已在 Ubuntu 22.04 + Cypht 2.13.0 环境实测。
一、环境信息
- 软件版本:Cypht v2.13.0(2026-10-16 发布)
- 运行栈:Ubuntu 22.04.5 LTS + PHP 8.1.2 + Nginx + MariaDB 10.6(源码安装形态;配置体系与部署形态无关)
- 配置载体:应用根目录
.env(由.env.example复制而来,2.13.0 共 266 行) - 生效链路:
.env→config/app.php等用env('KEY', 默认值)读取 →scripts/config_gen.php生成config/dynamic.php与site/生产资源 → Web 请求按新配置执行
二、前置条件
- 已完成安装(任一种形态均可:源码见本站《Ubuntu 22.04 安装 Cypht 2.13 指南》,编排部署见本站《Cypht 2.13 Docker Compose 部署指南》)
- 对应用目录有读写权限(源码形态默认
/var/www/cypht)
三、参数查看与修改方式
3.1 查看现有配置
cd /var/www/cypht
grep -vE '^\s*#|^\s*$' .env | head -20 # 查看当前生效的非注释项
3.2 修改并生效(实测流程)
改完 .env 必须重跑配置生成器,否则界面仍是旧配置。实测把 APP_NAME 改为 QuzuoMail、DEFAULT_LANGUAGE 改为 zh-Hans 后:
cd /var/www/cypht
sed -i -e 's/^APP_NAME=.*/APP_NAME=QuzuoMail/' -e 's/^DEFAULT_LANGUAGE=.*/DEFAULT_LANGUAGE=zh-Hans/' .env
php ./scripts/config_gen.php
curl -s http://127.0.0.1/ | grep -oE '<title>[^<]*</title>'
KindEditor assets copied successfully
copying assets directory...
<title>QuzuoMail</title>
页面标题立即变为 QuzuoMail,无需重启 PHP-FPM。改回 Cypht 重跑一次即恢复(实测 <title>Cypht</title>)。
⚠️ 注意:浏览器可能缓存旧的
site.js/site.css,验证界面类改动时请强刷(Ctrl+F5)。若采用编排化部署(见本站《Cypht 2.13 Docker Compose 部署指南》),环境变量在服务启动时才写入.env,改变量需按该篇第七节重建服务实例。
四、参数总览
.env 参数按功能域分为 9 组,下表给出组内要点,逐项详解见第五章:
| 组 | 代表参数 | 作用域 |
|---|---|---|
| 基础与调试 | APP_NAME、ENABLE_DEBUG、LOG_LEVEL | 品牌、调试、日志 |
| 数据库 | DB_DRIVER、DB_HOST、DB_SSL_* | 账号/会话/设置的持久化 |
| 认证与会话 | AUTH_TYPE、SESSION_TYPE、IMAP_AUTH_、LDAP_AUTH_ | 登录体系 |
| 用户数据 | USER_CONFIG_TYPE、USER_SETTINGS_DIR、ATTACHMENT_DIR | 用户设置与附件落点 |
| 缓存 | ENABLE_REDIS、ENABLE_MEMCACHED、ALLOW_SESSION_CACHE | 提速与会话加速 |
| 安全加固 | APP_2FA_、DISABLE_、ALLOW_EXTERNAL_IMAGE_SOURCES | 2FA、隐私、攻击面收敛 |
| 第三方集成 | GMAIL_、OUTLOOK_、OFFICE365_、GITHUB_、WORDPRESS_、CARD_DAV_、RECAPTCHA_* | OAuth 与外部服务 |
| 界面与默认设置 | DEFAULT_LANGUAGE、DEFAULT_SETTING_*(40+ 项) | 用户默认偏好 |
| 模块开关 | CYPHT_MODULES | 功能模块装载 |
五、核心参数分类详解
5.1 基础与调试
| 参数 | 默认值 | 说明 |
|---|---|---|
APP_NAME | Cypht | 站点品牌名,出现在页面 <title> 与登录页 |
ENABLE_DEBUG | false | 调试模式:为 true 时前端逐模块加载未压缩 JS/CSS(便于排障,性能差,生产必须 false) |
LOG_LEVEL | WARNING | 日志级别,可选 DEBUG / INFO / NOTICE / WARNING / ERROR / CRITICAL |
LOG_FILE | 空 | 应用日志文件路径;留空走 PHP 错误通道 |
5.2 数据库
| 参数 | 默认值(env.example) | 说明 |
|---|---|---|
DB_CONNECTION_TYPE | host | 连接方式:host(TCP)或 socket(DB_SOCKET 生效) |
DB_DRIVER | mysql | PDO 驱动:mysql(MySQL/MariaDB)、pgsql(PostgreSQL)、sqlite |
DB_HOST / DB_PORT | 127.0.0.1 / 空 | 地址;端口留空走驱动默认(MySQL 3306 / PG 5432) |
DB_NAME / DB_USER / DB_PASS | cypht_db / cypht_test / cypht_test | 库名与账号,生产务必改强口令 |
DB_SOCKET | /var/lib/mysqld/mysqld.sock | socket 模式路径 |
DB_SSL_CA / DB_SSL_CERT / DB_SSL_KEY | 空 | 2.13.0 新增:MySQL/MariaDB TLS 连接所需的 CA/客户端证书/私钥;设 DB_SSL_CA 即启用加密 |
DB_SSL_VERIFY_SERVER_CERT | true | 是否校验服务端证书;自签名证书场景设 false |
💡 技术拓展:
DB_DRIVER支持三种数据库——
驱动 特点 适用场景 mysql 生态最熟、官方 compose 默认搭配 MariaDB 生产首选 pgsql 事务与一致性更强 已有 PostgreSQL 基础设施 sqlite 零服务、单文件 个人试用/边缘小部署 本文及官方 compose 均采用
mysql(MariaDB 10),生态与运维资料最全。
5.3 认证与会话
| 参数 | 默认值 | 说明 |
|---|---|---|
AUTH_TYPE | DB | 认证后端:DB(本地账号表 hm_user)、IMAP(用邮箱账号直接认证)、LDAP(LDAP 目录) |
IMAP_AUTH_NAME / IMAP_AUTH_SERVER / IMAP_AUTH_PORT / IMAP_AUTH_TLS | localhost / localhost / 143 / 空 | AUTH_TYPE=IMAP 时认证用的 IMAP 服务器;生产建议 993 + TLS |
IMAP_AUTH_SIEVE_CONF_HOST / IMAP_AUTH_SIEVE_TLS_MODE | 空 / true | 认证服务器同时提供 Sieve 过滤配置时的主机与 TLS |
LDAP_AUTH_SERVER / LDAP_AUTH_PORT / LDAP_AUTH_TLS / LDAP_AUTH_BASE_DN / LDAP_AUTH_UID_ATTR | localhost / 389 / 空 / example,dc=com / uid | AUTH_TYPE=LDAP 时的目录服务参数 |
SESSION_TYPE | PHP | 会话后端:PHP(文件)、DB、Redis、Memcached |
ALLOW_LONG_SESSION / LONG_SESSION_LIFETIME | false / 30 | 「保持登录」开关与时长(小时) |
DISABLE_IP_CHECK | false | 会话不校验来源 IP(移动网络频繁换 IP 时可开,安全性下降) |
DISABLE_ORIGIN_CHECK | false | 关闭表单 Origin 校验(反向代理链路异常时才考虑) |
BRUTE_FORCE_MAX_ATTEMPTS / BRUTE_FORCE_LOCKOUT_DURATION | 5 / 900 | 登录防爆破:连续失败 5 次锁定 900 秒(源码 config/app.php 默认) |
💡 技术拓展:
AUTH_TYPE三种认证后端对比——
后端 账号管理 适用场景 DB Cypht 自建账号表,CLI 建号 通用默认 IMAP 直接用现有邮箱账号,免开户 给已有邮件系统加 Web 入口 LDAP 对接企业目录(AD/OpenLDAP) 组织统一认证 本文示例与官方 compose 默认均为
DB;企业已有目录服务时优先LDAP。
5.4 用户数据与目录
| 参数 | 默认值 | 说明 |
|---|---|---|
USER_CONFIG_TYPE | file | 用户设置存储:file(落盘 JSON)或 DB(hm_user_settings 表) |
USER_SETTINGS_DIR | /var/lib/hm3/users | file 模式的用户设置目录(需 Web 用户可写) |
ATTACHMENT_DIR | /var/lib/hm3/attachments | 写信附件暂存目录 |
ADMIN_USERS | 空 | 逗号分隔的管理员用户名;列入者可见站点管理菜单(如账号管理页) |
DEFAULT_EMAIL_DOMAIN | 空 | 登录用户名不含 @ 时自动补全的域名 |
AUTO_CREATE_PROFILE | 空 | 首次登录自动创建发件身份资料 |
5.5 缓存
| 参数 | 默认值 | 说明 |
|---|---|---|
ENABLE_REDIS | true(env.example) | 启用 Redis 做缓存;未装 Redis 时建议显式 false 避免连接报错刷屏 |
REDIS_SERVER / REDIS_PORT / REDIS_INDEX / REDIS_PASS / REDIS_SOCKET | 127.0.0.1 / 6379 / 1 / 空 / 路径 | Redis 连接参数;REDIS_SOCKET 走 unix socket |
ENABLE_MEMCACHED / MEMCACHED_SERVER / MEMCACHED_PORT / MEMCACHED_AUTH / MEMCACHED_USER / MEMCACHED_PASS | true / 127.0.0.1 / 11211 / false / 空 / 空 | Memcached 同理 |
ALLOW_SESSION_CACHE / CACHE_CLASS | false / 空 | 会话内页缓存与自定义缓存类(高级,保持默认) |
5.6 安全加固
| 参数 | 默认值 | 说明 |
|---|---|---|
APP_2FA_SECRET / APP_2FA_SIMPLE | 空 / false | 两步验证(TOTP)总开关:设置随机长字符串为 APP_2FA_SECRET 后用户可在设置里开启 2FA;二维码展示需 PHP gd 或 imagick 扩展 |
ALLOW_EXTERNAL_IMAGE_SOURCES | false | 是否默认加载邮件内外部图片;false 阻断追踪像素,隐私优先 |
ENCRYPT_AJAX_REQUESTS / ENCRYPT_LOCAL_STORAGE | 空 | Ajax 请求与浏览器本地存储加密(增强隐私,牺牲性能) |
SINGLE_SERVER_MODE | false | 锁定单服务器模式,隐藏「添加邮箱账户」入口(配合固定 IMAP 服务器做单一邮局 Web 界面) |
DISABLE_EMPTY_SUPERGLOBALS / DISABLE_OPEN_BASE_DIR / DISABLE_INI_SETTINGS / DISABLE_FINGERPRINT | false | 反制安全措施项:默认开启对应防护;设为 true 表示禁用该防护(排查兼容问题时才动) |
API_LOGIN_KEY | 空 | API 登录密钥(内部接口用,留空即关闭) |
DEFAULT_SETTING_NO_PASSWORD_SAVE | false | 禁止用户保存邮箱密码到会话/设置(高合规场景设 true) |
5.7 第三方集成
| 参数组 | 关键项 | 说明 |
|---|---|---|
| Gmail | GMAIL_CLIENT_ID / GMAIL_CLIENT_SECRET / GMAIL_CLIENT_URI | Google OAuth 应用凭据,启用 Gmail OAuth 登录与收件 |
| Outlook / Office 365 | OUTLOOK_* / OFFICE365_*(各含 CLIENT_ID/SECRET/URI/AUTH_URI/TOKEN_URI/REFRESH_URI) | 微软系 OAuth |
| GitHub | GITHUB_CLIENT_ID / GITHUB_CLIENT_SECRET / GITHUB_REDIRECT_URI | GitHub 通知源 |
| WordPress | WORDPRESS_CLIENT_ID / WORDPRESS_CLIENT_SECRET / WORDPRESS_CLIENT_URI | WordPress 内容源 |
| LDAP 通讯录 | LDAP_SERVER / LDAP_PORT / LDAP_BASE_DN / LDAP_OBJECT_CLASS / LDAP_READ_WRITE / LDAP_UID_ATTR 等 | LDAP 联系人(区别于登录认证 LDAP_AUTH_*) |
| CardDAV | CARD_DAV_SERVER(默认 http://localhost:5232) | CardDAV 联系人服务(如 Radicale) |
| 登录页人机校验 | RECAPTCHA_SECRET / RECAPTCHA_SITE_KEY | Google reCAPTCHA |
5.8 界面与默认设置
| 参数 | 默认值 | 说明 |
|---|---|---|
DEFAULT_LANGUAGE | en | 默认界面语言;简体中文 zh-Hans、繁体 zh-TW(2.13.0 有中文翻译更新) |
ALWAYS_MOBILE_UI | 空 | 强制移动端界面 |
FANCY_LOGIN | false | 启用美化登录页 |
JS_COMPRESS / CSS_COMPRESS | false | 进一步压缩静态资源(生产可开) |
DEFAULT_SETTING_IMAP_PER_PAGE | 20 | 邮件列表每页条数 |
DEFAULT_SETTING_*_PER_SOURCE / DEFAULT_SETTING_*_SINCE | 20 / -1 week | 「已发送/垃圾/稍后读/标签/回收站/草稿/已标记/未读/全部」各组合视图的每源条数与时间窗(PHP strtotime 表达式,如 -1 week、-1 month) |
DEFAULT_SETTING_TIMEZONE | UTC | 默认时区(国内可设 Asia/Shanghai) |
DEFAULT_SETTING_LIST_STYLE | email_style | 列表样式(另一选项 news_style 偏资讯流) |
DEFAULT_SETTING_THEME | default | 默认主题(Bootswatch 体系) |
DEFAULT_SETTING_START_PAGE | none | 登录后落地页 |
DEFAULT_SETTING_ENABLE_KEYBOARD_SHORTCUTS / DEFAULT_SETTING_ENABLE_SIEVE_FILTER / DEFAULT_SETTING_ENABLE_COLLECT_ADDRESS_ON_SEND 等 | false | 快捷键 / Sieve 过滤 / 发信收集联系人等功能开关的用户默认值 |
💡 说明:
DEFAULT_SETTING_*只决定新用户初始值,用户在自己的「Settings」页可覆盖;管理员改这些值不影响存量用户已保存的偏好。
5.9 模块开关与其他
| 参数 | 默认值 | 说明 |
|---|---|---|
CYPHT_MODULES | core,contacts,local_contacts,ldap_contacts,gmail_contacts,feeds,jmap,imap,smtp,account,idle_timer,desktop_notifications,calendar,themes,nux,developer,profiles,imap_folders,sievefilters,tags,history,scheduled_sends | 逗号分隔的装载模块清单;裁剪不需要的模块(如 developer、github)可减小攻击面与资源占用 |
PAGE_PARAM_NAME | page | 路由参数名;与外层系统集成冲突时改名 |
ENABLE_MSTNEF_VIEWER | false | 解析微软 TNEF 附件(winmail.dat),需系统安装 tnef、unrtf |
APPEND_URL_QUERY / CUSTOM_AJAX_REQUEST_ENDPOINT / EXTRA_AJAX_REQUEST_DATA | 空 | 深度集成场景的 URL/Ajax 定制 |
GLITCHTIP_DSN / GLITCHTIP_TRACES_SAMPLE_RATE | 空 / 0.01 | Glitchtip 错误采集 |
COOKIE_DOMAIN / COOKIE_PATH | 空 | 会话 Cookie 作用域(多子域共享时设) |
REDIRECT_AFTER_LOGIN | 空 | 登录成功后跳转地址 |
六、生产配置模板
适用场景:8GB 内存单机、MariaDB 同机、Redis 会话缓存、面向国内用户的生产部署(在 .env.example 基础上的差异项):
APP_NAME=MyWebmail
ENABLE_DEBUG=false
LOG_LEVEL=WARNING
DB_CONNECTION_TYPE=host
DB_DRIVER=mysql
DB_HOST=127.0.0.1
DB_NAME=cypht_db
DB_USER=cypht
DB_PASS=q1w2e3r4 # 生产替换为强口令
DB_SSL_VERIFY_SERVER_CERT=true
AUTH_TYPE=DB
SESSION_TYPE=Redis # 装了 Redis 后用 Redis 会话
USER_CONFIG_TYPE=DB
ADMIN_USERS=admin
ENABLE_REDIS=true
REDIS_SERVER='127.0.0.1'
REDIS_PORT=6379
ENABLE_MEMCACHED=false # 只保留一种缓存,避免双写困惑
APP_2FA_SECRET=<随机 64 位字符串>
ALLOW_EXTERNAL_IMAGE_SOURCES=false
DEFAULT_LANGUAGE=zh-Hans
DEFAULT_SETTING_TIMEZONE='Asia/Shanghai'
DEFAULT_SETTING_IMAP_PER_PAGE=50
CYPHT_MODULES="core,contacts,local_contacts,feeds,imap,smtp,account,idle_timer,desktop_notifications,calendar,themes,profiles,imap_folders,sievefilters,tags,history,scheduled_sends"
模板取舍说明:会话走 Redis 减库压;模块清单剔除了 developer/nux/gmail_contacts/ldap_contacts/idle_timer 等非必需项;默认中文界面 + 上海时区;改完执行 php ./scripts/config_gen.php 生效。
七、常见问题
Q1:改完 .env 为什么不生效?
九成是漏跑 php ./scripts/config_gen.php(实测重跑后 <title> 立即变化,见 3.2);剩下一成是浏览器缓存了旧 site.js/site.css,强刷即可。
Q2:日志里一直刷 Redis/Memcached 连接失败?
ENABLE_REDIS/ENABLE_MEMCACHED 在 .env.example 里默认 true,没装对应服务就会反复报错。显式设为 false 或安装对应服务。
Q3:用户开了 2FA 但二维码显示不出?
缺 gd 或 imagick 扩展(composer suggest 段明确标注)。装 php-gd 后重跑 config_gen.php。
Q4:AUTH_TYPE=IMAP 后登录报认证失败?
确认 IMAP_AUTH_SERVER/PORT/TLS 指向真实邮局(如 993 + IMAP_AUTH_TLS=true);env.example 里的 localhost:143 只是占位值。同时 DB_* 仍需配置——会话与用户设置仍依赖数据库。
Q5:如何确认某参数的最终默认值?
.env 未设置的项以 config/app.php 中 env('KEY', 默认值) 的第二参数为准(如 imap_auth_server 兜底 mail.gandi.net、暴力破解 5 次/900 秒),可直接查源码对应行。