Cypht 2.13 配置参数详解

Cypht 2.13 配置体系全解:.env 生效链路实测、9 大功能域 200+ 参数逐项释义、生产配置模板与高频排障。

CyphtCyphtWebmailPHP2026/10/25

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 请求按新配置执行

二、前置条件

三、参数查看与修改方式

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_SOURCES2FA、隐私、攻击面收敛
第三方集成GMAIL_、OUTLOOK_、OFFICE365_、GITHUB_、WORDPRESS_、CARD_DAV_、RECAPTCHA_*OAuth 与外部服务
界面与默认设置DEFAULT_LANGUAGE、DEFAULT_SETTING_*(40+ 项)用户默认偏好
模块开关CYPHT_MODULES功能模块装载

五、核心参数分类详解

5.1 基础与调试

参数默认值说明
APP_NAMECypht站点品牌名,出现在页面 <title> 与登录页
ENABLE_DEBUGfalse调试模式:为 true 时前端逐模块加载未压缩 JS/CSS(便于排障,性能差,生产必须 false)
LOG_LEVELWARNING日志级别,可选 DEBUG / INFO / NOTICE / WARNING / ERROR / CRITICAL
LOG_FILE空应用日志文件路径;留空走 PHP 错误通道

5.2 数据库

参数默认值(env.example)说明
DB_CONNECTION_TYPEhost连接方式:host(TCP)或 socket(DB_SOCKET 生效)
DB_DRIVERmysqlPDO 驱动:mysql(MySQL/MariaDB)、pgsql(PostgreSQL)、sqlite
DB_HOST / DB_PORT127.0.0.1 / 空地址;端口留空走驱动默认(MySQL 3306 / PG 5432)
DB_NAME / DB_USER / DB_PASScypht_db / cypht_test / cypht_test库名与账号,生产务必改强口令
DB_SOCKET/var/lib/mysqld/mysqld.socksocket 模式路径
DB_SSL_CA / DB_SSL_CERT / DB_SSL_KEY空2.13.0 新增:MySQL/MariaDB TLS 连接所需的 CA/客户端证书/私钥;设 DB_SSL_CA 即启用加密
DB_SSL_VERIFY_SERVER_CERTtrue是否校验服务端证书;自签名证书场景设 false

💡 技术拓展:DB_DRIVER 支持三种数据库——

驱动特点适用场景
mysql生态最熟、官方 compose 默认搭配 MariaDB生产首选
pgsql事务与一致性更强已有 PostgreSQL 基础设施
sqlite零服务、单文件个人试用/边缘小部署

本文及官方 compose 均采用 mysql(MariaDB 10),生态与运维资料最全。

5.3 认证与会话

参数默认值说明
AUTH_TYPEDB认证后端:DB(本地账号表 hm_user)、IMAP(用邮箱账号直接认证)、LDAP(LDAP 目录)
IMAP_AUTH_NAME / IMAP_AUTH_SERVER / IMAP_AUTH_PORT / IMAP_AUTH_TLSlocalhost / 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_ATTRlocalhost / 389 / 空 / example,dc=com / uidAUTH_TYPE=LDAP 时的目录服务参数
SESSION_TYPEPHP会话后端:PHP(文件)、DB、Redis、Memcached
ALLOW_LONG_SESSION / LONG_SESSION_LIFETIMEfalse / 30「保持登录」开关与时长(小时)
DISABLE_IP_CHECKfalse会话不校验来源 IP(移动网络频繁换 IP 时可开,安全性下降)
DISABLE_ORIGIN_CHECKfalse关闭表单 Origin 校验(反向代理链路异常时才考虑)
BRUTE_FORCE_MAX_ATTEMPTS / BRUTE_FORCE_LOCKOUT_DURATION5 / 900登录防爆破:连续失败 5 次锁定 900 秒(源码 config/app.php 默认)

💡 技术拓展:AUTH_TYPE 三种认证后端对比——

后端账号管理适用场景
DBCypht 自建账号表,CLI 建号通用默认
IMAP直接用现有邮箱账号,免开户给已有邮件系统加 Web 入口
LDAP对接企业目录(AD/OpenLDAP)组织统一认证

本文示例与官方 compose 默认均为 DB;企业已有目录服务时优先 LDAP。

5.4 用户数据与目录

参数默认值说明
USER_CONFIG_TYPEfile用户设置存储:file(落盘 JSON)或 DB(hm_user_settings 表)
USER_SETTINGS_DIR/var/lib/hm3/usersfile 模式的用户设置目录(需 Web 用户可写)
ATTACHMENT_DIR/var/lib/hm3/attachments写信附件暂存目录
ADMIN_USERS空逗号分隔的管理员用户名;列入者可见站点管理菜单(如账号管理页)
DEFAULT_EMAIL_DOMAIN空登录用户名不含 @ 时自动补全的域名
AUTO_CREATE_PROFILE空首次登录自动创建发件身份资料

5.5 缓存

参数默认值说明
ENABLE_REDIStrue(env.example)启用 Redis 做缓存;未装 Redis 时建议显式 false 避免连接报错刷屏
REDIS_SERVER / REDIS_PORT / REDIS_INDEX / REDIS_PASS / REDIS_SOCKET127.0.0.1 / 6379 / 1 / 空 / 路径Redis 连接参数;REDIS_SOCKET 走 unix socket
ENABLE_MEMCACHED / MEMCACHED_SERVER / MEMCACHED_PORT / MEMCACHED_AUTH / MEMCACHED_USER / MEMCACHED_PASStrue / 127.0.0.1 / 11211 / false / 空 / 空Memcached 同理
ALLOW_SESSION_CACHE / CACHE_CLASSfalse / 空会话内页缓存与自定义缓存类(高级,保持默认)

5.6 安全加固

参数默认值说明
APP_2FA_SECRET / APP_2FA_SIMPLE空 / false两步验证(TOTP)总开关:设置随机长字符串为 APP_2FA_SECRET 后用户可在设置里开启 2FA;二维码展示需 PHP gd 或 imagick 扩展
ALLOW_EXTERNAL_IMAGE_SOURCESfalse是否默认加载邮件内外部图片;false 阻断追踪像素,隐私优先
ENCRYPT_AJAX_REQUESTS / ENCRYPT_LOCAL_STORAGE空Ajax 请求与浏览器本地存储加密(增强隐私,牺牲性能)
SINGLE_SERVER_MODEfalse锁定单服务器模式,隐藏「添加邮箱账户」入口(配合固定 IMAP 服务器做单一邮局 Web 界面)
DISABLE_EMPTY_SUPERGLOBALS / DISABLE_OPEN_BASE_DIR / DISABLE_INI_SETTINGS / DISABLE_FINGERPRINTfalse反制安全措施项:默认开启对应防护;设为 true 表示禁用该防护(排查兼容问题时才动)
API_LOGIN_KEY空API 登录密钥(内部接口用,留空即关闭)
DEFAULT_SETTING_NO_PASSWORD_SAVEfalse禁止用户保存邮箱密码到会话/设置(高合规场景设 true)

5.7 第三方集成

参数组关键项说明
GmailGMAIL_CLIENT_ID / GMAIL_CLIENT_SECRET / GMAIL_CLIENT_URIGoogle OAuth 应用凭据,启用 Gmail OAuth 登录与收件
Outlook / Office 365OUTLOOK_* / OFFICE365_*(各含 CLIENT_ID/SECRET/URI/AUTH_URI/TOKEN_URI/REFRESH_URI)微软系 OAuth
GitHubGITHUB_CLIENT_ID / GITHUB_CLIENT_SECRET / GITHUB_REDIRECT_URIGitHub 通知源
WordPressWORDPRESS_CLIENT_ID / WORDPRESS_CLIENT_SECRET / WORDPRESS_CLIENT_URIWordPress 内容源
LDAP 通讯录LDAP_SERVER / LDAP_PORT / LDAP_BASE_DN / LDAP_OBJECT_CLASS / LDAP_READ_WRITE / LDAP_UID_ATTR 等LDAP 联系人(区别于登录认证 LDAP_AUTH_*)
CardDAVCARD_DAV_SERVER(默认 http://localhost:5232)CardDAV 联系人服务(如 Radicale)
登录页人机校验RECAPTCHA_SECRET / RECAPTCHA_SITE_KEYGoogle reCAPTCHA

5.8 界面与默认设置

参数默认值说明
DEFAULT_LANGUAGEen默认界面语言;简体中文 zh-Hans、繁体 zh-TW(2.13.0 有中文翻译更新)
ALWAYS_MOBILE_UI空强制移动端界面
FANCY_LOGINfalse启用美化登录页
JS_COMPRESS / CSS_COMPRESSfalse进一步压缩静态资源(生产可开)
DEFAULT_SETTING_IMAP_PER_PAGE20邮件列表每页条数
DEFAULT_SETTING_*_PER_SOURCE / DEFAULT_SETTING_*_SINCE20 / -1 week「已发送/垃圾/稍后读/标签/回收站/草稿/已标记/未读/全部」各组合视图的每源条数与时间窗(PHP strtotime 表达式,如 -1 week、-1 month)
DEFAULT_SETTING_TIMEZONEUTC默认时区(国内可设 Asia/Shanghai)
DEFAULT_SETTING_LIST_STYLEemail_style列表样式(另一选项 news_style 偏资讯流)
DEFAULT_SETTING_THEMEdefault默认主题(Bootswatch 体系)
DEFAULT_SETTING_START_PAGEnone登录后落地页
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_MODULEScore,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_NAMEpage路由参数名;与外层系统集成冲突时改名
ENABLE_MSTNEF_VIEWERfalse解析微软 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.01Glitchtip 错误采集
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 秒),可直接查源码对应行。

八、参考链接