Zammad 7.2.2 配置参数详解
Zammad 7.2.2 核心配置参数逐项实测:Setting 体系与三种读写方式,product_name、fqdn、notification_sender、ticket_hook、工单编号策略等 7 组参数的改→生效→验证闭环与参数速查表。
Zammad 7.2.2 配置参数详解
目标:讲清楚 Zammad 7.2.2 的配置体系怎么运作,并把运维最常用的 7 组核心参数逐项跑通「读取默认值 → 修改 → 验证生效」的完整闭环。本文全部命令与回显均在 Zammad 7.2.2 实测环境(Ubuntu 22.04 包安装,见《Ubuntu 22.04 安装 Zammad 指南》)执行通过(2026-10-21)。
一、环境信息
- 操作系统:Ubuntu 22.04 (jammy),x86_64
- Zammad 版本:7.2.2-1792508402.43c767a.ubuntu22(
/opt/zammad/VERSION,包安装) - 服务组件:PostgreSQL 14.24 / Redis 6.0.16 / Nginx 1.18.0 / Elasticsearch 9.5.5(已按官方三步连接并重建索引)
- 管理员账号:
admin(Admin + Agent 角色,Basic 认证与 Web 登录均可用) - 配置读取方式:
zammad run rails r "..."(Rails runner,无需进入交互控制台)
💡 说明:本文参数名与默认值直接取自本机
Setting表实测,与官方 Web 管理界面(Settings → System)中的配置项一一对应;改值同时会影响 Web 界面,反之亦然。
二、配置体系总览
Zammad 的配置分三层,定位不同,运维时先分清该改哪一层:
| 层 | 载体 | 典型内容 | 生效方式 |
|---|---|---|---|
| Setting 参数层 | PostgreSQL settings 表 | 界面名称、FQDN、发件人、工单编号策略、搜索集成等业务参数 | Setting.set 即时生效,无需重启 |
| 配置文件层 | /opt/zammad/config/database.yml 等 | 数据库连接、Redis 连接等启动期配置 | 改后 systemctl restart zammad |
| Web 服务器层 | /etc/nginx/sites-available/zammad.conf | 监听端口、TLS、反代 upstream | 改后 systemctl restart nginx |
日常运维 90% 的参数调整发生在 Setting 层,读写都通过 Rails 控制台(也可在管理界面可视化操作,二者同源):
# 读:查看当前值
zammad run rails r "puts Setting.get('product_name')"
# 写:设置新值
zammad run rails r "Setting.set('product_name', 'Quzuo Lab Helpdesk')"
# 列:按前缀检索参数名(参数多时先列名再取值)
zammad run rails r "puts Setting.where('name LIKE ?', 'ticket_%').pluck(:name).sort.join(\"\n\")"
实测回显(列名命令,输出节选):
ticket_agent_default_notifications
ticket_allow_expert_conditions
ticket_auto_assignment
ticket_auto_assignment_selector
...
ticket_subject_fwd
ticket_subject_re
ticket_subject_size
ticket_trigger_loop_protection_articles_per_ticket
ticket_trigger_loop_protection_articles_total
ticket_trigger_recursive
ticket_trigger_recursive_max_loop
⚠️ 注意:
Setting.set的值即时生效且持久化到数据库,升级 Zammad 不会丢失;但 Zammad 版本迭代会调整参数名(例如本文实测确认notification.sender.email这类旧文档参数名在 7.2.2 中已演化为notification_sender),改参数前先在本机列名确认,不要照抄旧教程。
三、核心参数详解(实测闭环)
以下 7 组参数每项均按「默认值 → 修改 → 回读验证」实测,验证回显均为真实执行结果。
3.1 product_name(系统名称,界面与邮件文案的根)
- 默认值:
"Zammad Helpdesk" - 作用:Web 界面标题、邮件通知文案中引用的系统名称;
notification_sender等参数以模板变量config.product_name引用它(见 3.3)。 - 读写方式:
Setting.get / Setting.set
zammad run rails r "Setting.set('product_name', 'Quzuo Lab Helpdesk')"
zammad run rails r "puts Setting.get('product_name')"
实测回显:
"Zammad Helpdesk"
"Quzuo Lab Helpdesk"
交叉验证(界面生效):改值后浏览器页面 <title> 立即变化——
curl -s http://localhost/ | grep -oE "<title>[^<]+" | head -1
实测回显:
<title>Quzuo Lab Helpdesk
3.2 fqdn 与 http_type(系统对外地址)
- 默认值:
fqdn = "zammad.example.com",http_type = "http" - 作用:
fqdn是 Zammad 对外宣称的主机名,邮件通知里的工单链接、Webhook 回调地址、API 文档示例 URL 都由http_type://fqdn拼出;http_type取http或https。生产环境启用 TLS 后必须把http_type改为https并把fqdn改为真实域名,否则通知邮件里的链接全部指错。 - 读写方式:
Setting.get / Setting.set
zammad run rails r "Setting.set('fqdn', 'zammad.lab.local')"
zammad run rails r "puts Setting.get('fqdn'), Setting.get('http_type')"
实测回显:
"zammad.example.com"
"http"
"zammad.lab.local"
⚠️ 注意:
fqdn改完立即生效于新生成的链接;notification_sender这类引用config.fqdn的参数会在下次求值时用新值(见 3.3 实测)。
3.3 notification_sender(邮件发件人,动态模板参数)
- 默认值:模板字符串
"#{config.product_name} <noreply@#{config.fqdn}>"(数据库中保存的是模板;读取时按当前product_name与fqdn求值) - 作用:所有系统通知邮件的发件人地址。
- 读写方式:
Setting.get / Setting.set
实测发现(重要):该参数是动态求值的——在完成 3.1 与 3.2 的修改后读取它,返回值不再是模板原文,而是用新 product_name、fqdn 渲染后的结果:
zammad run rails r "puts Setting.get('notification_sender')"
实测回显(3.1/3.2 改值后):
"Quzuo Lab Helpdesk" <noreply@zammad.lab.local>
显式固定发件人(不再跟随模板求值):
zammad run rails r "Setting.set('notification_sender', 'Quzuo Service Desk <support@lab.local>')"
实测回显:
"Quzuo Service Desk <support@lab.local>"
3.4 ticket_hook 系(工单编号引用格式)
- 默认值:
ticket_hook = "Ticket#",ticket_hook_divider = "",ticket_hook_position = "right" - 作用:
ticket_hook是工单编号的引用前缀(默认邮件里出现Ticket#12345)。客户回复邮件时,Zammad 靠在主题中扫描这个前缀 + 编号来把回复挂回原工单;ticket_hook_position决定前缀出现在编号左侧(right指编号在 hook 右侧)。改它必须同步通知客户侧的存量邮件模板,否则旧邮件引用失效。 - 读写方式:
Setting.get / Setting.set
zammad run rails r "Setting.set('ticket_hook', 'SR#')"
zammad run rails r "puts Setting.get('ticket_hook')"
实测回显:
"Ticket#"
"SR#"
3.5 ticket_number 与编号生成策略
- 默认值:
ticket_number = "Ticket::Number::Increment"(自增策略),ticket_number_increment = {"checksum" => false, "min_size" => 5} - 作用:工单编号生成器。自增策略下
min_size控制编号最小位数(不足左补零)、checksum控制是否附加校验位。官方另提供日期策略Ticket::Number::Date(ticket_number_date参数组,按日期+序号编码)。自增策略可读性好,日期策略按天重置适合高吞吐场景。 - 读写方式:
Setting.get / Setting.set(值是结构体)
zammad run rails r "Setting.set('ticket_number_increment', { 'checksum' => false, 'min_size' => 8 })"
zammad run rails r "puts Setting.get('ticket_number_increment').inspect"
实测回显:
{"checksum" => false, "min_size" => 5}
{"checksum" => false, "min_size" => 8}
3.6 ticket_subject_size 与 ticket_subject_re(回复主题规范)
- 默认值:
ticket_subject_size = "110",ticket_subject_re = "RE" - 作用:
ticket_subject_size限制系统生成的邮件主题长度(字符数,超长截断),防止客户邮箱端主题溢出;ticket_subject_re定义回复主题的RE:前缀关键字,与ticket_hook一样参与「回复邮件归并到原工单」的判定。 - 读写方式:
Setting.get / Setting.set
zammad run rails r "Setting.set('ticket_subject_size', '60')"
zammad run rails r "puts Setting.get('ticket_subject_size')"
实测回显:
"110"
"60"
3.7 ui_ticket_create_default_type(工单创建默认渠道类型)
- 默认值:
"phone-in" - 作用:坐席在 Web 界面手动新建工单时,默认选中的工单类型(
phone-in来电 /email邮件 /web网页表单等)。按支持中心实际主渠道调整可减少坐席误选。 - 读写方式:
Setting.get / Setting.set
zammad run rails r "Setting.set('ui_ticket_create_default_type', 'email')"
zammad run rails r "puts Setting.get('ui_ticket_create_default_type')"
实测回显:
"phone-in"
"email"
3.8 es_url / es_user / es_password(Elasticsearch 集成)
- 默认值:新装系统
es_url为空(未启用搜索);连接后如本文环境es_url = "https://localhost:9200"、es_user = "elastic"、es_index = "zammad" - 作用:全文搜索与报表的搜索引擎集成。三参数与 CA 证书共同决定 Zammad ⇄ ES 的连接;改完必须重建索引(
zammad run rake zammad:searchindex:rebuild)才生效。 - 读写方式:
Setting.get / Setting.set+ rake 重建 - 完整闭环:见《Ubuntu 22.04 安装 Zammad 指南》4.7 节实测(三条
Setting.set+ 证书导入 + 索引重建回显),此处不重复。
四、参数速查表
| 参数名 | 默认值(7.2.2 实测) | 作用 | 生效方式 |
|---|---|---|---|
product_name | "Zammad Helpdesk" | 界面名称、邮件文案根变量 | 即时生效,无需重启 |
fqdn | "zammad.example.com" | 对外主机名,链接拼接 | 即时生效 |
http_type | "http" | 对外协议(http/https) | 即时生效 |
notification_sender | 模板 #{config.product_name} <noreply@#{config.fqdn}> | 通知邮件发件人(动态求值) | 即时生效 |
ticket_hook | "Ticket#" | 工单编号引用前缀 | 即时生效 |
ticket_hook_divider | "" | 前缀与编号分隔符 | 即时生效 |
ticket_hook_position | "right" | 编号相对前缀位置 | 即时生效 |
ticket_number | "Ticket::Number::Increment" | 编号生成策略 | 新工单起生效 |
ticket_number_increment | {"checksum"=>false, "min_size"=>5} | 自增策略参数 | 新工单起生效 |
ticket_subject_size | "110" | 邮件主题长度上限 | 即时生效 |
ticket_subject_re | "RE" | 回复主题前缀关键字 | 即时生效 |
ui_ticket_create_default_type | "phone-in" | 新建工单默认类型 | 即时生效 |
es_url / es_user / es_password | 未启用(连接后见 3.8) | Elasticsearch 集成 | 需重建搜索索引 |
五、常见问题(FAQ)
Q1:Setting.set 改完要重启服务吗?
不需要。Setting 参数存储在 PostgreSQL settings 表中,应用每次读取都取实时值——本文 3.1 的页面标题交叉验证(改完直接 curl 看到新 title)即为实证。需要重启的只有配置文件层(database.yml 等)与 Nginx 层的改动。
Q2:zammad run rails r "load '/tmp/xxx.rb'" 报 cannot load such file?
zammad run 包装器切换到 zammad 用户的隔离环境,/tmp 不可见(实测确认:脚本复制到 /tmp 后 runner 找不到文件,报 cannot load such file -- /tmp/xxx.rb)。把脚本放到 /opt/zammad/ 下再 load 绝对路径即可(实测可用),执行完记得删除。
Q3:改了参数,但 Web 界面里看到的是旧值?
三种可能:① 浏览器缓存了旧界面数据,强刷(Ctrl+Shift+R);② 改的不是同一个参数名(参数名在版本间有演化,先 Setting.where('name LIKE ?').pluck(:name) 确认存在);③ 该参数属于「新工单起生效」类(如编号策略),对存量工单不追溯。
Q4:怎么把参数改回默认?
Setting.set 写回默认值即可(速查表已列出本文涉及参数的默认值)。例如:zammad run rails r "Setting.set('product_name', 'Zammad Helpdesk')"。
六、参考链接
- Zammad 设置的 Web 管理操作(与本文参数同源):https://admin-docs.zammad.org/
- Environment Variables(环境变量层):https://docs.zammad.org/appendix/environment-variables.html
- Elasticsearch 连接与配置:https://docs.zammad.org/en/latest/install/elasticsearch/connect-configure-elasticsearch.html
- Rails 控制台使用:https://docs.zammad.org/en/latest/admin/console.html
- 本专栏相关篇目:
- 《Zammad 7.2.2 介绍与选型指南》——认知与选型第一站
- 《Ubuntu 22.04 安装 Zammad 指南》——从零安装与初始化实测
- 《Zammad 常用 CLI 命令详解》——命令面与运维实操(含 rails r 读写 Setting 脚本集)