更新DDNS及公开备注文档,增加自定义主题说明 (#103)

* 更新DDNS及公开备注文档

* 增加自定义主题说明
This commit is contained in:
UUBulb 2024-10-18 00:03:16 +08:00 committed by GitHub
parent 54ff2467eb
commit 0b492ad7a5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 245 additions and 211 deletions

View File

@ -173,6 +173,7 @@ function getGuideSidebarZhCN() {
{ text: '服务', link: '/guide/services.html' },
{ text: '任务', link: '/guide/tasks.html' },
{ text: '告警', link: '/guide/notifications.html' },
{ text: 'DDNS', link: '/guide/ddns.html' },
{ text: '内网穿透', link: '/guide/nat.html' },
{ text: '设置', link: '/guide/settings.html' },
{ text: 'API', link: '/guide/api.html' }
@ -250,6 +251,7 @@ function getGuideSidebarEnUS() {
{ text: 'Services', link: '/en_US/guide/services.html' },
{ text: 'Tasks', link: '/en_US/guide/tasks.html' },
{ text: 'Notifications', link: '/en_US/guide/notifications.html' },
{ text: 'DDNS', link: '/en_US/guide/ddns.html' },
{ text: 'NAT traversal', link: '/en_US/guide/nat.html' },
{ text: 'Settings', link: '/en_US/guide/settings.html' },
{ text: 'API', link: '/en_US/guide/api.html' }

77
docs/en_US/guide/ddns.md Normal file
View File

@ -0,0 +1,77 @@
---
outline: deep
---
# DDNS
The DDNS functionality is designed for servers with dynamic IP addresses. When the Agent server reports a new IP (every 10 minutes), Dashboard will automatically update the DNS record based on the configuration.
### Why should I use Nezha's DDNS functionality?
- Convenient centralized management of DDNS settings, instead of deploying a DDNS service on every server.
- Your confidential information is only stored on the Dashboard server, preventing leaks.
### Configuration
You can directly add DDNS configurations in the Dashboard management page.
1. Click on the "Dynamic DNS" option in the menu bar to enter the configuration page.
2. Click the "New Profile" button and fill in the required information in the pop-up window. Option details:
- **Name**: The name of the configuration.
- **DDNS Provider**: The type of provider, determining the method used to update DNS records.
- **Domains (separate with comma)**: The domain(s), if you enter multiple domains, they should be separated by commas. IDNs (Internationalized Domain Names) are supported.
- **Maximum retry attempts**: The number of attempts for updating DDNS, default is 3, and the range is between 1 and 10.
- **DDNS Credential 1** and **DDNS Credential 2** are optional. Typically, at least one needs to be provided. The [table](#provider-list) below lists the options for all providers.
3. If using the `webhook` provider, the corresponding options need to be filled out as required. For detailed instructions, see [Webhook Configuration](#webhook-configuration).
4. You need to check at least one of **IPv4 Enabled** and **IPv6 Enabled**; otherwise, no update operations will be performed.
5. After adding a new configuration, you also need to modify the server settings to activate DDNS. Server-related options include:
- **Enable DDNS**: Enable DDNS functionality for this server.
- **DDNS Profiles**: The list of DDNS configuration IDs to use, searchable by configuration name.
## Webhook Configuration
Webhook requires manually constructing HTTP requests, suitable for using other provider services when operations are simple.
Webhook option descriptions:
- **Webhook URL**: The URL for the HTTP request, where parameters can use placeholders.
- **Webhook Request Method**: The HTTP request method. Supported methods include `GET`, `POST`, `PATCH`, `DELETE`, and `PUT`.
- **Webhook Request Type**: The format of the HTTP request body, either `JSON` or `Form`.
- **Webhook Request Headers**: HTTP request headers, filled in JSON format, but nesting is not supported.
- **Webhook Request Body**: The HTTP request body. It won't be used for `GET` and `DELETE`. If you need to use a nested format, you must choose `JSON` as the request type.
Supported Webhook placeholders:
- `#ip#`: Host IP.
- `#domain#`: DDNS domain. Each request is made separately for each domain, so this value will be a single domain string.
- `#type#`: IP type, either `"ipv4"` or `"ipv6"`.
- `#record#`: Record type, either `"A"` or `"AAAA"`.
- `#access_id#`: DDNS Credential 1.
- `#access_secret#`: DDNS Credential 2.
### Oray Webhook Example
<details>
<summary>Click to expand/collapse</summary>
- URL`http://ddns.oray.com/ph/update?hostname=#domain#&myip=#ip#`
- Request Method: `GET`
- Request Header`{"Authorization": "Basic pass"}`, replace `pass` with the Base64-encoded userpass (e.g., `user:pass` becomes `dXNlcjpwYXNzCg==`).
- Oray only supports A records, so only enable IPv4. Other Webhook options are not required.
</details>
## Provider List
| Provider | Credential 1 (ID) | Credential 2 (Secret) |
| ------------ | ----------- | --------------- |
| `dummy` | ❌️ | ❌️ |
| `webhook` | Optional | Optional |
| `cloudflare` | ❌️ | ✅ |
| `tencentcloud`| ✅ | ✅ |
## Viewing Logs
In the Dashboard logs, you can see the relevant logs for the DDNS functionality. When configured correctly, there will be corresponding log entries when updating DNS records.
```shell
dashboard_1 | 2024/03/16 23:16:25 NEZHA>> 正在尝试更新域名(ddns.example.com)DDNS(1/3)
dashboard_1 | 2024/03/16 23:16:28 NEZHA>> 尝试更新域名(ddns.example.com)DDNS成功
```

View File

@ -31,7 +31,9 @@ The forced update will not work if `disable-force-update` is enabled.
* Enable DDNS: When true, if the server IP changes, the Dashboard will automatically update the DNS records.
* DDNS Domain: The DDNS domain configured for this server.
* Secret: The secret/key used for configuring the Agent, which is used to verify communication between the Agent and the Dashboard.
* One-Click Install: Click the corresponding system button to copy the command and execute it on the server for a one-click installation.
* Note: Server notes, visible only after verification.
* Public Note: Server public notes, visible on the frontend. You can customize frontend theme based on this field; see [Public Note Example](#public-note-example) for details.
* Installation commands: Click the corresponding system button to copy the command and execute it on the server for an instant installation.
* Management: Connects to WebShell, modifies server configuration, or deletes the server.
## WebSSH Terminal
@ -44,114 +46,11 @@ If the connection fails, refer to [Real-Time Channel Disconnection/Online Termin
Added in Dashboard v0.19.1 / Agent v0.19.0. A pseudo file manager embedded in WebShell, supports file download/upload, directory navigation and copying current path. Access it by clicking the blue button in the bottom-right corner of the WebShell.
## DDNS Functionality
## Public Note Example
The DDNS functionality is suitable for servers with dynamic IPs. When the Agent reports a new IP (every 10 minutes), the Dashboard will automatically update the DNS records based on the configuration.
### ServerStatus Theme Agent Billing Information Display
<details>
<summary>Click to expand/collapse</summary>
### Why Use Nezha Monitoring's DDNS Functionality?
- Centralized management of DDNS settings instead of deploying a DDNS service on each server.
- Confidential information is only stored on the Dashboard server, preventing leakage.
### Configuration Instructions
You can choose to use profiles or not; If no profile is set, all Agent servers will use the same configuration to update DDNS. If profiles are used, each server can have a specific configuration for updating DDNS, providing greater flexibility.
#### Without Profiles
::: warning
This configuration is deprecated and will be removed in a future release. Please switch to using profiles instead.
:::
```yaml
DDNS:
Enable: true
Provider: "webhook"
AccessID: ""
AccessSecret: ""
WebhookMethod: ""
WebhookURL: ""
WebhookRequestBody: ""
WebhookHeaders: ""
MaxRetries: 3
Profiles: null
```
- `Enable`: Boolean value to enable or disable the DDNS functionality.
- `Provider`: The name of the DDNS provider; currently supports `webhook`, `cloudflare`, and `tencentcloud`.
- `AccessID`: Token ID for the DDNS provider; only applicable to the `tencentcloud` provider.
- `AccessSecret`: Token Secret for the DDNS provider; only applicable to the `cloudflare` and `tencentcloud` providers.
- `WebhookMethod`: The request method for the webhook, such as `GET` or `POST`; only applicable to the `webhook` provider.
- `WebhookURL`: The request URL for the webhook; only applicable to the `webhook` provider.
- `WebhookRequestBody`: The request body for the webhook; only applicable to the `webhook` provider.
- `WebhookHeaders`: The request headers for the webhook; only applicable to the `webhook` provider.
- `MaxRetries`: The number of retry attempts when a request fails.
- `Profiles`: Multi-configuration settings; ignored in single configuration settings.
The `WebhookURL`, `WebhookRequestBody`, and `WebhookHeaders` can include the following placeholders:
- `{ip}`: The current IP of the server.
- `{domain}`: The DDNS domain. If used with `WebhookURL`, only query values will be replaced.
- `{type}`: The IP type, either "ipv4" or "ipv6".
- `{access_id}`: Credential 1.
- `{access_secret}`: Credential 2.
Example Configuration:
```yaml
WebhookHeaders: |
a:{access_id}
b:{access_secret}
WebhookRequestBody: '{"domain": "{domain}", "ip": "{ip}", "type": "{type}"}'
```
#### With Profiles
When using profiles, leave the `DDNS.Provider` value empty. If `DDNS.Provider` is not empty, this configuration will be ignored.
```yaml
DDNS:
Enable: true
MaxRetries: 3
Profiles:
example:
Provider: ""
AccessID: ""
AccessSecret: ""
WebhookMethod: ""
WebhookURL: ""
WebhookRequestBody: ""
WebhookHeaders: ""
```
- `Profiles`: Profile field.
- `example`: Can be replaced with any string as the DDNS configuration name.
Other options can be referenced from the [Without Profiles](#Without-Profiles) section.
#### Dashboard Configuration
After modifying the configuration file, you also need to modify the server settings in the Dashboard for the DDNS to take effect.
DDNS related options:
- `Enable DDNS`: Enable the DDNS functionality for this server.
- `Enable DDNS IPv4`: Enable IPv4 resolution when updating DDNS records.
- `Enable DDNS IPv6`: Enable IPv6 resolution when updating DDNS records.
- `DDNS Domain`: The domain the record points to.
- `DDNS Configuration`: The DDNS configuration name to use in multiple configurations.
::: warning
When you modify the configuration and save it in the Dashboard settings, it will populate the default configuration options in `config.yaml`, and all options in the DDNS field will be set with a default value (see [Without Profiles](#Without-Profiles)).
- If not using profiles, configure `DDNS.Provider` and ignore the `Profiles` options.
- To use profiles, leave `DDNS.Provider` empty. If `DDNS.Provider` is not empty, the `Profiles` field will be ignored.
:::
#### Viewing Logs
In the Dashboard logs, you can see the relevant logs for the DDNS functionality. When configured correctly, there will be corresponding log entries when updating DNS records.
```shell
dashboard_1 | 2024/03/16 23:16:25 NEZHA>> 正在尝试更新域名(ddns.example.com)DDNS(1/3) # Attempting to update domain (ddns.example.com) DDNS (1/3)
dashboard_1 | 2024/03/16 23:16:28 NEZHA>> 尝试更新域名(ddns.example.com)DDNS成功 # Successfully updated domain (ddns.example.com) DDNS
```
See https://github.com/naiba/nezha/pull/425.
</details>

View File

@ -15,8 +15,11 @@ You can customize the site title in this section.
## Theme
Select the theme for the homepage and admin panel here. If a theme that already exists is not in the options, update the Dashboard.
Before enabling the Custom theme, ensure you have installed the custom theme; otherwise, the Dashboard will not display correctly after enabling this option.
Select the theme for the frontend and dashboard here. If a theme that already exists is not in the options, update the Dashboard.
To use a custom frontend theme, you need to create a theme description file. For more information on custom themes, please refer to [Nezha Theme Development Environment](/en_US/developer/theme.html).
Before enabling the dashboard Custom theme, ensure you have installed the custom theme; otherwise, the Dashboard will not display correctly after enabling this option.
## Language

77
docs/guide/ddns.md Normal file
View File

@ -0,0 +1,77 @@
---
outline: deep
---
# DDNS
DDNS 功能适用于使用动态 IP 的服务器,当 Agent 上报了一个新的 IP10分钟一次Dashboard 会根据配置自动更新 DNS 记录。
## 为什么我要使用哪吒监控的 DDNS 功能?
- 方便集中管理 DDNS 设置,而不是在每台服务器上都部署一个 DDNS 服务。
- 仅在面板服务器上保存您的机密信息,防止外泄。
## 配置说明
可以直接在 Dashboard 管理页面中添加 DDNS 配置。
1. 点击菜单栏中的“动态 DNS”选项进入配置页面。
2. 点击“新配置”按钮,在弹出窗口中按需填写信息。选项说明:
- **名称**:配置名称。
- **DDNS供应商**:供应商类型,决定了使用何种方法更新 DNS 记录。
- **域名(逗号分隔)**:域名,如填写多个域名需要用 `,` 分隔。支持 IDN国际化域名
- **最大重试次数**DDNS 更新尝试次数,默认为 3范围为 1 到 10 的整数。
- **DDNS 凭据 1** 以及 **DDNS 凭据 2** 为选填,通常需要至少填 1 个。下面的[表格](#供应商列表)列出了所有供应商的对应选项。
3. 如果使用 `webhook` 供应商,那么需要按需填写 Webhook 的对应选项。具体的说明请见 [Webhook 配置说明](#webhook-配置说明)。
4. 需要至少勾选 **启用DDNS IPv4****启用DDNS IPv6** 中的一个,否则不会进行任何更新操作。
5. 在添加了新的配置后,还需要修改服务器配置才能使 DDNS 生效。服务器相关选项说明:
- **启用 DDNS**:为此服务器启用 DDNS 功能。
- **DDNS 配置**:要使用的 DDNS 配置 ID 列表,可以根据配置名称进行搜索。
## Webhook 配置说明
Webhook 需要自行构建 HTTP 请求,适用于需要使用其它供应商的服务且操作较为简单的情况。
Webhook 相关选项说明:
- **Webhook 地址**HTTP 请求 URL。其中只有参数可以使用占位符。
- **Webhook 请求方式**HTTP 请求方式。支持 `GET``POST``PATCH``DELETE` 以及 `PUT`
- **Webhook 请求类型**HTTP 请求体格式,为 `JSON` 或者 `Form`
- **Webhook 请求头**HTTP 请求头,用 JSON 填写,注意不支持嵌套。
- **Webhook 请求体**HTTP 请求体,`GET``DELETE` 不会使用。如需使用嵌套格式,必须选择 `JSON` 作为请求类型。
Webhook 支持的占位符:
- `#ip#`:主机 IP。
- `#domain#`DDNS 域名。每个域名的请求是分别进行的,所以此项的值只会是单个域名字符串。
- `#type#`IP 类型,值为 `"ipv4"``"ipv6"`
- `#record#`:记录类型,值为 `"A"``"AAAA"`
- `#access_id#`DDNS 凭据 1。
- `#access_secret#`DDNS 凭据 2。
### 花生壳 Webhook 示例
<details>
<summary>点击展开/收起</summary>
- URL`http://ddns.oray.com/ph/update?hostname=#domain#&myip=#ip#`
- 请求方式: `GET`
- 请求头:`{"Authorization": "Basic pass"}`,把 `pass` 替换成你的用户名:密码的 Base64 编码(例如,`user:pass``dXNlcjpwYXNzCg==`)。
- 花生壳只支持 A 记录,所以只勾选启用 IPv4。其它 Webhook 选项不需要填。
</details>
## 供应商列表
| 供应商 | 凭据1ID | 凭据2Secret |
| ------------ | ----------- | --------------- |
| `dummy` | ❌️ | ❌️ |
| `webhook` | 可选 | 可选 |
| `cloudflare` | ❌️ | ✅ |
| `tencentcloud`| ✅ | ✅ |
## 查看日志
在 Dashboard 的日志中,可以看到 DDNS 功能的相关日志,配置正确时,更新 DNS 记录时会有相应的日志记录。
```shell
dashboard_1 | 2024/03/16 23:16:25 NEZHA>> 正在尝试更新域名(ddns.example.com)DDNS(1/3)
dashboard_1 | 2024/03/16 23:16:28 NEZHA>> 尝试更新域名(ddns.example.com)DDNS成功
```

View File

@ -32,6 +32,8 @@ Agent 更新相关的参数是 [自定义 Agent 监控项目](/guide/q7.html)
* DDNS 域名:为该服务器配置的 DDNS 域名。
* 密钥:即 secret/key配置 Agent 时会用到,用于验证 Agent 与 Dashboard 的通信。
* 一键安装:点击相应的系统按钮,复制命令到服务器执行即可一键安装。
* 备注:服务器备注,仅验证后可见。
* 公开备注:服务器公开备注,前台可见。可以根据此字段做一些自定义,具体见[公开备注示例](#公开备注示例)。
* 管理:分别为连接 WebShell修改服务器配置删除服务器。
## 在线终端
@ -44,114 +46,85 @@ Linux 和 Windows 均可用,可使用 Ctrl+Shift+V 粘贴。
Dashboard v0.19.1 / Agent v0.19.0 加入的新功能,是嵌入 WebShell 的一个伪文件管理器,提供文件下载和上传功能,也可以进行目录跳转或者复制路径。点击 WebShell 右下角的蓝色按钮就可以打开。
## DDNS 功能
## 公开备注示例
DDNS 功能适用于使用动态 IP 的服务器,当 Agent 上报了一个新的 IP10分钟一次Dashboard 会根据配置自动更新 DNS 记录。
### ServerStatus主题agent账单信息展示
<details>
<summary>点击展开/收起</summary>
### 为什么我要使用哪吒监控的 DDNS 功能?
<strong>配置位置:后台-> 服务器 -> 编辑服务器 -> 公开备注</strong>
- 方便集中管理 DDNS 设置,而不是在每台服务器上都部署一个 DDNS 服务。
- 仅在面板服务器上保存您的机密信息,防止外泄。
### 配置说明
目前 DDNS 功能支持两种形式的配置:**单配置** 和 **多配置**。如使用 **单配置**,则所有 Agent 服务器都使用相同的信息更新 DDNS如使用 **多配置**,则可为每台服务器指定一个配置更新 DDNS灵活性更强。
#### 单配置
::: warning
此功能已废弃,并将在之后的版本中删除,请尽快迁移至 **多配置** 方式。
:::
```yaml
DDNS:
Enable: true
Provider: "webhook"
AccessID: ""
AccessSecret: ""
WebhookMethod: ""
WebhookURL: ""
WebhookRequestBody: ""
WebhookHeaders: ""
MaxRetries: 3
Profiles: null
<strong>完整配置,包含过期时间和价格展示</strong>
```json
{
"billingDataMod": {
"startDate": "2024-10-01T00:00:00+08:00",
"endDate": "2024-11-01T00:00:00+08:00",
"autoRenewal": "1",
"cycle": "月",
"amount": "$3.99"
}
}
```
- `Enable`:布尔值,选择是否开启 DDNS 功能。
- `Provider`DDNS 供应商的名称;目前支持 `webhook``cloudflare` 以及 `tencentcloud`
- `AccessID`DDNS 供应商的令牌 ID仅适用于供应商 `tencentcloud`
- `AccessSecret`DDNS 供应商的令牌 Secret仅适用于供应商 `cloudflare``tencentcloud`
- `WebhookMethod`Webhook 的请求方法。例如 `GET``POST` 等;仅适用于供应商 `webhook`
- `WebhookURL`Webhook 的请求地址;仅适用于供应商 `webhook`
- `WebhookRequestBody`Webhook 的请求体;仅适用于供应商 `webhook`
- `WebhookHeaders`Webhook 的请求头;仅适用于供应商 `webhook`
- `MaxRetries`:当请求失败时,重试请求的次数。
- `Profiles`:多配置设定;在单配置设定中,此项忽略。
`WebhookURL`(仅对参数生效)、`WebhookRequestBody` 以及 `WebhookHeaders` 可以包含以下占位符:
- `{ip}`:主机当前 IP开启 IPv4 则为 IPv4 地址,开启 IPv6 则为 IPv6 地址。
- `{domain}`ddns 域名。
- `{type}`IP 类型,可能为 "ipv4" 和 "ipv6"。
- `{access_id}`:凭据 1。
- `{access_secret}`:凭据 2。
配置示例:
```yaml
WebhookHeaders: |
a:{access_id}
b:{access_secret}
WebhookRequestBody: '{"domain": "{domain}", "ip": "{ip}", "type": "{type}"}'
<strong>单独配置过期时间</strong>
```json
{
"billingDataMod": {
"startDate": "2024-10-01T00:00:00+08:00",
"endDate": "2024-11-01T00:00:00+08:00",
"autoRenewal": "1",
"cycle": "月"
}
}
```
#### 多配置
<strong>配置详细说明:</strong>
当使用 **多配置** 时,请将 `DDNS.Provider` 留空。如 `DDNS.Provider` 的值不为空,**多配置** 设定将被忽略。
```yaml
DDNS:
Enable: true
MaxRetries: 3
Profiles:
example:
Provider: ""
AccessID: ""
AccessSecret: ""
WebhookMethod: ""
WebhookURL: ""
WebhookRequestBody: ""
WebhookHeaders: ""
<strong>startDate 账单开始时间</strong>
```
格式如 2022-04-01T23:59:59+08:00
```
- `Profiles`:配置字段。
- `example`:可替换为 DDNS 配置名,可填任意字符串。
<strong>endDate 账单到期时间</strong>
```
格式如 2022-05-01T23:59:59+08:00
当以0000-00-00开头时表示账单无期限适用于永久免费的vps如0000-00-00T23:59:59+08:00
```
其它选项请参考[单配置](#单配置)段。
<strong>Date格式说明</strong>
```
分3部分
1. 日期2022-04-01
2. 时间T23:59:59
3. 时区:+08:00
例如:
2024-10-01T23:59:59+05:00
2024-09-21T12:00:00-05:00
2024-03-15T23:59:59+00:00
```
#### Dashboard 配置
<strong>autoRenewal 自动续期</strong>
```
支持值
1自动续期
0不自动续期
当设置 "autoRenewal": 1 时程序会根据当前时间自动判断vps账单到期后无需手动更改startDate和endDate
```
修改配置文件后,还需要在 Dashboard 中修改服务器设置才能使 DDNS 生效。
<strong>amount 价格</strong>
```
格式如 $9.99 、€19.92 、¥199、19.99HKD、9.99USD、49.99CNY
如果vps是免费的请设置为"0" , 如 "amount": "0", 前台展示为 FREE
如果vps是按量收费请设置为"-1" , 如 "amount": "-1", 前台展示为PAYG
```
DDNS 相关选项说明:
- `启用 DDNS`:为此服务器启用 DDNS 功能。
- `启用 DDNS IPv4`:更新 DDNS 记录时,启用 IPv4 解析。
- `启用 DDNS IPv6`:更新 DDNS 记录时,启用 IPv6 解析。
- `DDNS 域名`:记录指向的域名。
- `DDNS 配置`:在 **多配置** 情况下,要使用的 DDNS 配置名。
::: warning
在 Dashboard 设置中修改配置并保存时,会在 `config.yaml` 中填入默认配置选项,此时 DDNS 段中会同时存在 **单配置****多配置** 字段。
- 如使用 **单配置**,请配置 `DDNS.Provider`,并忽略 `Profiles` 选项相关内容。
- 如使用 **多配置**,请将 `DDNS.Provider` 留空。如 `DDNS.Provider` 的值不为空,多配置设定将被忽略。
:::
#### 查看日志
在 Dashboard 的日志中,可以看到 DDNS 功能的相关日志,配置正确时,更新 DNS 记录时会有相应的日志记录。
```shell
dashboard_1 | 2024/03/16 23:16:25 NEZHA>> 正在尝试更新域名(ddns.example.com)DDNS(1/3)
dashboard_1 | 2024/03/16 23:16:28 NEZHA>> 尝试更新域名(ddns.example.com)DDNS成功
```
<strong>cycle 付费周期</strong>
```
支持格式(英文大小写字母都支持,大小写字母混用也支持)
1. 月、month、monthly、m、mo
2. 季、quarterly、q
3. 半年、半、half、semi-annually、h
4. 年、year、annually、y、yr
```
</details>

View File

@ -15,8 +15,11 @@ outline: deep
## 界面主题
在这里选择主页和管理界面主题,如果选项中没有某个已存在的主题,请更新面板。
启用 Custom 主题前,你需要提前安装自定义主题,否则启用该项后,面板将无法正常显示。
在这里选择主页和管理界面主题,如果选项中没有某个已存在的主题,请更新面板。
使用自定义主页主题需要创建主题描述文件,关于自定义主题更多信息请参考[哪吒主题开发环境](/developer/theme.html)。
启用管理界面 Custom 主题前,你需要提前安装自定义主题,否则启用该项后,面板将无法正常显示。
## Language