Stoat 0.15.5 配置参数详解

把 Stoat 0.15.5 服务端的全部配置参数讲清楚——主配置 `Revolt.toml` 的每个配置段、密钥文件 `secrets.env` 的覆盖机制、语音配置 `livekit.yml` 与前端环境变量,并给出一份可直接套用的小型社区生产模板。参数默认值逐条对照后端源码 `crates/core/config/Revolt.toml` 核读,运行时行为在 2C8G 自托管实例实测验证。

StoatStoatChat即时通讯2026/10/30

Stoat 0.15.5 配置参数详解

目标:把 Stoat 0.15.5 服务端的全部配置参数讲清楚——主配置 Revolt.toml 的每个配置段、密钥文件 secrets.env 的覆盖机制、语音配置 livekit.yml 与前端环境变量,并给出一份可直接套用的小型社区生产模板。参数默认值逐条对照后端源码 crates/core/config/Revolt.toml 核读,运行时行为在 2C8G 自托管实例实测验证。

一、环境信息

本篇参数说明基于以下环境(与部署篇同一套实测实例):

项目值
Stoat 版本v0.15.5(ghcr.io/stoatchat 服务端)
配置来源self-hosted 编排生成 + 后端源码 crates/core/config/Revolt.toml 默认值对照
入口地址http://192.168.1.200:8140(IP:PORT 纯 HTTP 适配形态)
配置文件位置编排目录下 Revolt.toml、secrets.env、livekit.yml、.env.web、.env
验证手段GET /api/ 根端点运行时自报 + 注册/登录/发消息实测行为验证

二、前置条件

  1. 已按部署指南完成一套 Stoat 0.15.5 的运行实例(配置文件的结构与生成机制见 《Stoat 0.15.5 Docker Compose 部署指南》第四章)。
  2. 能编辑编排目录下的配置文件并重启对应服务(Revolt.toml 为 8 个服务共用挂载)。
  3. 了解 stoat 的两层配置体系:文件层(Revolt.toml)与环境变量层(secrets.env,运行时同名覆盖)。

三、参数查看与修改方式

Stoat 的配置修改有三种入口,优先级与适用场景不同:

方式一:Revolt.toml 主配置文件(推荐,全部参数)。位于编排目录,挂载进 api、events、autumn、january、gifbox、crond、pushd、voice-ingress 8 个服务。修改后需重启应用服务:

cd /opt/stoat
docker compose restart api events autumn january gifbox crond pushd voice-ingress

实测输出(节选):

 Container stoat-api-1          Restarted
 Container stoat-events-1       Restarted
 Container stoat-autumn-1       Restarted
 ...

⚠️ 注意:generate_config.sh 重新执行会重写 Revolt.toml(旧文件备份为 Revolt.toml.old),自定义配置要据此恢复。文件头部注释也明确提示了这一行为。

方式二:secrets.env 环境变量覆盖(密钥专用)。环境变量名与 TOML 配置路径的映射规则是:REVOLT__ 前缀 + 配置段路径以双下划线 __ 连接。实测示例:

环境变量覆盖目标
REVOLT__PUSHD__VAPID__PRIVATE_KEY[pushd.vapid] private_key
REVOLT__FILES__ENCRYPTION_KEY[files] encryption_key
REVOLT__API__LIVEKIT__NODES__WORLDWIDE__SECRET[api.livekit.nodes.worldwide] secret

改密钥的标准做法是改 secrets.env 后 docker compose up -d(env_file 注入的服务全部重建),而不是直接改 Revolt.toml——这样下次配置脚本重跑时密钥不会丢。

方式三:GET /api/ 根端点只读查看(运行时事实)。该端点无需认证,返回版本号、功能开关状态与当前生效的限额体系,是核对配置是否生效的最快手段:

curl -s http://192.168.1.200:8140/api/ | python3 -m json.tool | head -30

实测输出(节选):

{
    "revolt": "0.15.5",
    "features": {
        "captcha": {
            "enabled": false,
            "key": ""
        },
        "email": false,
        "invite_only": false,
        "autumn": {
            "enabled": true,
            "url": "http://192.168.1.200:8140/autumn"
        },
        ...

email:false 对应 [api.smtp] host 为空、invite_only:false 对应 [api.registration] invite_only=false、captcha.enabled:false 对应 [api.security.captcha] 未配置——三个开关的状态都能在此直接核对。

四、参数总览

Revolt.toml 的配置段全景(段名 → 用途 → 关键参数数):

配置段用途关键参数
顶层运行形态production、environment、disable_events_dont_use
[database]数据库连接mongodb、redis
[hosts]对外服务地址app/api/events/autumn/january 等 7 项 + [hosts.livekit]
[rabbit]消息队列连接 4 项 + 队列名 2 项
[api.registration]注册策略invite_only
[api.smtp]邮件连接 5 项 + 过期策略 3 项
[api.security]安全shield/cloudflare/easypwned/tenor/admin_keys + [api.security.captcha]、[api.security.shield]
[api.workers]代理并发max_concurrent_connections
[api.livekit]语音call_ring_duration + [api.livekit.nodes]
[api.audit_logs]审计expires_after
[api.users]用户名规则min_username_length
[pushd]推送通知运行参数 3 项 + 队列名 7 项 + [pushd.vapid]、[pushd.fcm]、[pushd.apn]
[january]链接预览blocked_domains
[files]文件存储加密/预览/封锁/杀毒 5 项 + [files.limit]、[files.preview]、[files.s3]
[features]功能开关webhooks/提及通知 3 项 + [features.limits](global/new_user/default)+ [features.advanced]、[features.legal_links]
[sentry]错误上报8 个服务各自的 DSN

💡 说明:这份配置文件沿用 Revolt.toml 文件名(项目更名 Stoat 后保留历史名称),TOML 格式,段名 [a.b] 对应环境变量 REVOLT__A__B。[features.limits] 的生效值可通过 GET /api/ 直接核对。

五、核心参数分类详解

5.1 连接与基础设施([database] 与 [rabbit])

服务端各组件的内部连接参数,官方编排已对齐,改动通常只发生在「把某个中间件迁到外部」的场景:

[database]
mongodb = "mongodb://database"   # MongoDB 连接串,默认指向编排内 database 服务
redis = "redis://redis/"         # Redis 连接串,默认指向编排内 redis 服务(Valkey)

[rabbit]
host = "rabbit"                  # RabbitMQ 主机名
port = 5672                      # AMQP 端口
username = "rabbituser"          # 默认账号
password = "rabbitpass"          # 默认密码
default_exchange = "revolt.default"
[rabbit.queues]
acks = "internal.ack"            # 消息已读回执队列
events = "internal.event"        # 内部事件队列

逐项解读:mongodb/redis 换外部实例时改连接串即可(如 mongodb://user:pass@10.0.0.5:27017);[rabbit] 的账号密码与 compose.yml 中 rabbit 服务的 RABBITMQ_DEFAULT_USER/PASS 是同一套凭据的两端,改必须两边同步,实测环境沿用默认值验证全链路可用。default_exchange 与队列名不建议动——它们是多服务间事件的寻址约定。

💡 技术拓展:事件分发通道不止 RabbitMQ 一种选择——

通道原理适用
RabbitMQ 队列持久队列,可靠投递跨服务任务(推送、提及解析)
Redis Pub/Sub内存广播,低延迟在线事件扇出
直接 WS 广播服务内直发单实例小规模

Stoat 实际两者混用:Redis 承担低延迟事件总线([database] redis),RabbitMQ 承担可靠任务队列(ack/推送/提及),配置上无需选择,默认即最优。

5.2 对外地址([hosts])

全配置中部署相关性最高的段——客户端直连的服务地址全部来自这里:

[hosts]
app = "http://192.168.1.200:8140"              # Web 前端地址
api = "http://192.168.1.200:8140/api"          # REST API
events = "ws://192.168.1.200:8140/ws"          # WebSocket 实时事件
autumn = "http://192.168.1.200:8140/autumn"    # 文件服务
january = "http://192.168.1.200:8140/january"  # 链接预览代理
assets = ""                                    # 静态资源 CDN(可选)
voso_legacy = ""                               # 旧版语音兼容(留空)
voso_legacy_ws = ""                            # 旧版语音 WS 兼容(留空)

[hosts.livekit]
worldwide = "ws://192.168.1.200:8140/livekit"  # 语音 SFU 公网地址

逐项解读:官方默认生成 https://你的域名 形态(generate_config.sh 按 wss://域名/ws 生成 events);本实测环境为 IP:8140 纯 HTTP 适配值。assets 配置后头像等静态资源走 CDN 域名。实测验证:GET /api/ 返回的 autumn.url、january.url、ws、app 字段与本段逐字一致——改完此段后用该端点核对是最快验证法。常见错误是只改 app 不改 autumn,表现为消息可发但头像/附件 404。

5.3 注册与账号安全([api.registration] / [api.smtp] / [api.security] / [api.users])

[api.registration]
invite_only = false                # true 时注册必须携带邀请码

[api.smtp]
host = ""                          # SMTP 主机,空 = 关闭邮件功能
username = ""
password = ""
from_address = "noreply@example.com"
# port = 587                       # 可选,默认 587
# use_tls = true                   # 可选

[api.smtp.expiry]
expire_verification = 604800       # 邮箱验证链接有效期,秒(7 天)
expire_password_reset = 86400      # 密码重置有效期(1 天)
expire_account_deletion = 86400    # 删除确认有效期(1 天)

[api.security]
authifier_shield_key = ""          # Shield 反滥用服务密钥
trust_cloudflare = false           # true 时信任 Cloudflare 的真实 IP 头
easypwned = ""                     # 外部泄露密码查询服务地址,空 = 仅用内置黑名单
tenor_key = ""                     # Tenor GIF API Key(启用 GIF 选择器必填)
admin_keys = []                    # 管理 API 密钥列表

[api.security.captcha]
hcaptcha_key = ""                  # hCaptcha 服务端密钥
hcaptcha_sitekey = ""              # hCaptcha 站点密钥

[api.security.shield]
host = ""                          # Shield 服务地址
key = ""

[api.users]
min_username_length = 2            # 用户名最小长度

逐项解读与实测行为:

  • [api.smtp] host 为空时(实测默认):注册直接成功、无需邮箱验证;但账号找回(密码重置)完全不可用——实测对已注册邮箱重复调用注册接口,服务端转入密码重置分支后因无 SMTP 直接报 500 OperationFailed。生产启用 SMTP 后该行为自动修复。
  • [api.security] easypwned:0.15.5 内置约 10 万条泄露密码黑名单(编译进二进制),注册与登录都会校验,实测 q1w2e3r4 这类口令返回 400 CompromisedPassword;配置外部 easypwned 服务地址后优先走外部查询(SHA1 哈希查询,返回 secure 布尔)。
  • 用户名规则实测:admin/revolt/stoat 三个保留名(不区分大小写)注册时返回 400 InvalidUsername,长度与 Unicode 同形字规范也在该层校验。
  • tenor_key 属第三方 API 密钥,建议通过 secrets.env 注入:在 secrets.env 增加 REVOLT__API__SECURITY__TENOR_KEY='你的Key',避免明文进 Revolt.toml。

5.4 文件与对象存储([files])

上传文件的全链路配置(限额 → 加密 → 预览 → S3 存储):

[files]
encryption_key = "(secrets.env 注入,openssl rand -base64 32 生成)"
webp_quality = 80.0                # WebP 有损预览质量,100 = 无损
blocked_mime_types = []            # 禁止上传的 MIME 类型黑名单
clamd_host = ""                    # ClamAV 杀毒服务地址(host:port),空 = 不扫描
scan_mime_types = [                # 需要杀毒扫描的类型,空 = 全部扫描
    "application/vnd.microsoft.portable-executable",
    "application/vnd.android.package-archive",
    "application/zip",
]

[files.limit]
min_file_size = 1                  # 最小文件字节数
min_resolution = [1, 1]            # 最小图片分辨率
max_mega_pixels = 40               # 图片最大 40 MP
max_pixel_side = 10_000            # 图片最长边 10000 px

[files.preview]                    # 各类附件的预览图最大分辨率
attachments = [1280, 1280]
avatars = [128, 128]
backgrounds = [1280, 720]
icons = [128, 128]
banners = [480, 480]
emojis = [128, 128]

[files.s3]
endpoint = "http://minio:9000"     # S3 协议端点
path_style_buckets = false         # MinIO 用虚拟主机风格
region = "minio"
access_key_id = "minioautumn"      # 与 minio 服务 MINIO_ROOT_USER 一致
secret_access_key = "minioautumn"  # 与 MINIO_ROOT_PASSWORD 一致
default_bucket = "revolt-uploads"  # 默认桶名(createbuckets 任务创建)

逐项解读:encryption_key 是存量文件可读性的唯一凭据,服务端用它对写入 S3 的内容做加密(实测:明文文本上传后 MinIO 桶内对象为加密形态,下载时服务端解密还原);[files.s3] 官方注释给出换 Backblaze B2 的完整参数示例(path_style_buckets = true + B2 的 endpoint/keyID/token);换外部对象存储时同步改 endpoint 与凭据即可,桶名保持 revolt-uploads 或同步改 compose 里 createbuckets 任务的 mc mb 行。

各类附件的上传大小限额在 [features.limits.*.file_upload_size_limit](见 5.7),此处不重复。实测上传验证:18 字节文本经 autumn 上传返回 {"id":"hKJF9aL6PWdQByFT_miNdLqdqnAQizvdj7nN-l2jpC"},挂到消息后经 /autumn/attachments/<id>/文件名 下载还原内容一致。

⚠️ 注意:实测发现一个设计行为——上传后未挂到消息/头像等用途(used_for 为空)的文件,直接访问下载 URL 返回 404 NotFound;先以附件形式发送消息后才可公开访问。做自动化上传时必须完成"挂载"步骤。

5.5 语音视频([api.livekit] 与 livekit.yml)

Revolt.toml 侧只有节点与呼叫参数:

[api.livekit]
call_ring_duration = 30            # DM/群语音呼叫响铃时长(秒)

[api.livekit.nodes.worldwide]
url = "http://livekit:7880"        # 节点内网地址(服务端信令用)
lat = 0.0
lon = 0.0

语音真正的运行配置在 livekit.yml(挂载进 LiveKit 服务):

rtc:
  use_external_ip: true
  port_range_start: 50000
  port_range_end: 50100
  tcp_port: 7881
redis:
  address: redis:6379
turn:
  enabled: false
keys:
  5782a5da1864: (secrets.env 中的 LiveKit secret)
webhook:
  api_key: 5782a5da1864
  urls:
  - "http://voice-ingress:8500/worldwide"

逐项解读:rtc 段决定 RTC 端口(TCP 7881 + UDP 50000-50100,需公网直放);turn.enabled 开启后可给 NAT 后客户端提供中继(默认关闭,因 TURN 需要额外端口与凭据);keys 段的键值对必须与 secrets.env 的 REVOLT__API__LIVEKIT__NODES__WORLDWIDE__KEY/SECRET 一致(generate_config.sh 生成时自动对齐,手工改要两处同步)。[features.limits.*.video_resolution] 控制视频分辨率上限,默认 720p,启用摄像头共享时 generate_config.sh 会改写为 1080p。

5.6 推送通知([pushd])

pushd 守护进程的三通道推送配置:

[pushd]
production = true                  # 队列名前缀隔离(避免同实例多环境串扰)
mass_mention_chunk_size = 200      # 全员/角色提及解析的分块大小
render_cache_time = 60             # 通知内容名称解析缓存(秒)

[pushd.vapid]
queue = "notifications.outbound.vapid"
private_key = "(secrets.env 注入)"
public_key = "(secrets.env 注入)"

[pushd.fcm]
queue = "notifications.outbound.fcm"
key_type = ""                      # Google FCM 服务账号凭据,全部留空 = 关闭
project_id = ""
private_key = ""
...

[pushd.apn]
sandbox = false
queue = "notifications.outbound.apn"
pkcs8 = ""                         # Apple APN 凭据,留空 = 关闭
key_id = ""
team_id = ""
topic = "chat.revolt.app"          # iOS Bundle ID

逐项解读:自托管默认只启用 VAPID(Web Push)——secrets.env 中的 VAPID 密钥对由 generate_config.sh 自动生成(EC P-256 私钥 + DER 公钥),浏览器授权通知后即可收到推送;FCM(安卓)与 APN(iOS)需要官方开发者账号凭据,自托管通常保持关闭。mass_mentions_chunk_size 增大可加快大服务器全员提及解析但更吃内存。实测验证:GET /api/ 返回的 vapid 字段即 [pushd.vapid] public_key 的运行时值。

5.7 功能开关与限额([features])

[features]
webhooks_enabled = false           # 消息 Webhook 总开关(默认关)
mass_mentions_send_notifications = true   # 全员@是否发推送
mass_mentions_enabled = true       # 是否允许全员/角色@

[features.limits.global]           # 全局硬上限
group_size = 100                   # 群组成员上限
message_embeds = 5                 # 单条消息嵌入数
message_replies = 5                # 单条消息回复引用数
message_reactions = 20             # 单条消息表情回应数
server_emoji = 100                 # 单服务器表情上限
server_roles = 200                 # 单服务器角色上限
server_channels = 200              # 单服务器频道上限
new_user_hours = 72                # "新用户"判定时长(小时)
body_limit_size = 20_000_000       # 请求体上限 20MB
restrict_server_creation = []      # 限制建服的用户 ID 白名单,空 = 不限
max_invite_duration_days = 30      # 邀请最长有效期

[features.limits.new_user]         # 新用户(注册 72 小时内)限额
outgoing_friend_requests = 5
bots = 2
message_length = 2000
message_attachments = 5
servers = 50
voice_quality = 16000
video = true
video_resolution = [1080, 720]
video_aspect_ratio = [0.3, 2.5]
[features.limits.new_user.file_upload_size_limit]
attachments = 20_000_000           # 附件 20MB
avatars = 4_000_000                # 头像 4MB
backgrounds = 6_000_000            # 背景 6MB
icons = 2_500_000                  # 图标 2.5MB
banners = 6_000_000                # 横幅 6MB
emojis = 500_000                   # 表情 500KB

[features.limits.default]          # 老用户默认限额(结构同上)
outgoing_friend_requests = 10
bots = 5
message_length = 2000
message_attachments = 5
servers = 100
...

[features.advanced]
process_message_delay_limit = 5    # 提及解析任务的延迟容忍(消息数)
seen_events_cache_size = 2048      # 事件去重缓存(每个 WS 连接,大=省流量耗内存)

[features.legal_links]
terms_of_service = ""              # 服务条款 URL(留空则客户端不显示)
privacy_policy = ""
guidelines = ""

逐项解读与实测对照:这一段是运行时最能直接核对的——GET /api/ 返回的 limits.global、limits.new_user、limits.default 与上述默认值逐字一致(实测回显含 server_channels:200、message_length:2000、file_upload_size_limits.emojis:500000 等)。改此段后无需猜测是否生效,刷新该端点即可。restrict_server_creation 填入用户 ID 数组后只有白名单用户能建服务器(公开实例防灌水的第一道闸);webhooks_enabled 打开后才有消息 Webhook 能力。

5.8 可观测与其他([sentry] / [january] / [api.audit_logs] / [api.workers])

[sentry]
api = ""                           # 各服务独立的 Sentry DSN,留空 = 上报关闭
events = ""
voice_ingress = ""
files = ""
proxy = ""
pushd = ""
crond = ""
gifbox = ""

[january]
blocked_domains = []               # 链接预览域名黑名单

[api.audit_logs]
expires_after = 2592000            # 审计日志保留 30 天(秒)

[api.workers]
max_concurrent_connections = 50    # january 抓取并发上限

逐项解读:自托管 Sentry 通常留空;january 是外链预览抓取服务,公开实例建议把恶意站点加入 blocked_domains;expires_after 按秒计(2592000 = 30 天),审计合规有更长要求时调大。

5.9 顶层与前端环境变量

Revolt.toml 顶层三项:

production = false                 # 是否生产模式
disable_events_dont_use = false    # 紧急停用事件服务的开关(名字即警告:不要用)
environment = "dev"                # 运行环境标识

.env.web 前端构建变量(见部署篇第六章全表):HOSTNAME 决定 web 服务监听地址,VITE_API_URL 等决定前端调后端的基准地址,改动后需重建 web 服务。

六、生产配置模板

适用场景:100-500 人社区、2C4G 起、有域名与 HTTPS、启用邮件找回、GIF 选择器、开放注册。以下只列需要偏离默认值的项(其余保持 generate_config.sh 生成值),可直接追加/替换到 Revolt.toml:

# ---- 对外地址(域名 + HTTPS/WSS 标准形态)----
[hosts]
app = "https://chat.example.com"
api = "https://chat.example.com/api"
events = "wss://chat.example.com/ws"
autumn = "https://chat.example.com/autumn"
january = "https://chat.example.com/january"
gifbox = "https://chat.example.com/gifbox"

[hosts.livekit]
worldwide = "wss://chat.example.com/livekit"

# ---- 邮件(启用验证与找回)----
[api.smtp]
host = "smtp.example.com"
username = "noreply@example.com"
password = "${SMTP_PASSWORD}"
from_address = "noreply@example.com"
port = 587
use_tls = true

# ---- 安全 ----
[api.security]
easypwned = ""                     # 有内部泄露库服务时填地址,否则用内置黑名单
tenor_key = "${TENOR_API_KEY}"     # GIF 选择器必填
trust_cloudflare = true            # 前置 Cloudflare 时开启

[api.security.captcha]
hcaptcha_key = "${HCAPTCHA_KEY}"   # 防机器人注册
hcaptcha_sitekey = "${HCAPTCHA_SITEKEY}"

# ---- 文件 ----
[files]
blocked_mime_types = ["application/vnd.microsoft.portable-executable", "application/vnd.android.package-archive"]

# ---- 限额收紧(公开实例防滥用)----
[features.limits.global]
restrict_server_creation = []      # 如需收紧填管理员用户 ID 数组

[features.limits.new_user]
servers = 10                       # 新用户建服/加服上限收紧
message_length = 2000
[features.limits.new_user.file_upload_size_limit]
attachments = 8_000_000            # 新用户附件降到 8MB

# ---- 运营 ----
[features.legal_links]
terms_of_service = "https://example.com/tos"
privacy_policy = "https://example.com/privacy"

模板说明:${SMTP_PASSWORD} 等 4 个第三方凭据走 secrets.env 注入(在该文件加 REVOLT__API__SMTP__PASSWORD='...'、REVOLT__API__SECURITY__TENOR_KEY='...'、REVOLT__API__SECURITY__CAPTCHA__HCAPTCHA_KEY='...'、REVOLT__API__SECURITY__CAPTCHA__HCAPTCHA_SITEKEY='...',格式见第三章映射规则),避免明文落在版本库里的 Revolt.toml。启用摄像头/屏幕共享无需改文件——generate_config.sh 交互选择即可。改完执行:

cd /opt/stoat && docker compose restart api events autumn january gifbox crond pushd voice-ingress

验证生效:

curl -s https://chat.example.com/api/ | python3 -m json.tool | grep -E '"email"|"invite_only"|"enabled"'

预期 email:true(SMTP 已配置)、captcha.enabled:true。

七、常见问题

Q1:改了 Revolt.toml 没生效?

三个可能:只重启了部分服务(Revolt.toml 挂载进 8 个服务,按第三章命令全量重启);改错文件(secrets.env 的环境变量在运行时覆盖同名配置,优先检查 env_file 是否有同名键);generate_config.sh 重跑覆盖了自定义项(从 Revolt.toml.old 找回)。

Q2:secrets.env 丢了怎么办?

VAPID 密钥丢了可重新生成(影响浏览器推送订阅,用户重新授权即可);文件加密密钥(REVOLT__FILES__ENCRYPTION_KEY)丢了无法恢复,MinIO 里所有存量文件永久不可读。这就是部署篇反复强调备份密钥的原因。

Q3:注册/登录报 CompromisedPassword,如何彻底关闭校验?

无法完全关闭——内置泄露密码黑名单编译在二进制内,无开关。可行的缓解:配置外部 easypwned 服务走自定义判定;或在自有网络策略上接受该行为(其本质是安全特性)。实测确认校验同时作用于注册(create_account)与登录(session/login)两个入口。

Q4:invite_only 开了之后邀请码从哪来?

官方 README 的 Guides 说明:在 MongoDB 的邀请集合中手工插入邀请码记录(编排形态下进 database 服务操作),注册时在表单/API 携带 invite 字段核销。适合"半公开"社区。

Q5:上传文件返回成功但访问 404?

见 5.4 的实测说明:used_for 为空的文件拒绝下载。把返回的文件 id 作为消息附件发送(attachments: [id])后再访问即可。这是防外链盗用的设计行为,不是故障。

Q6:如何核对当前所有限额的实际生效值?

curl -s http://你的入口/api/ 的 limits 对象即运行时事实(global/new_user/default 三层结构完整自报),与 [features.limits] 配置段一一对应,无需重启查看。

八、参考链接