docs: fix some correct document formatting using autocorrect (#493)

Fix some correct document formatting using [autocorrect](https://github.com/huacnlee/autocorrect)

```release-note
None
```
This commit is contained in:
Ryan Wang
2025-04-23 11:45:09 +08:00
committed by GitHub
parent c82df43df2
commit 1cf9b3636f
70 changed files with 166 additions and 166 deletions

View File

@@ -13,7 +13,7 @@ description: 代码贡献指南
> 这个步骤非常适合首次贡献者。
在 [halo-dev](https://github.com/halo-dev) 和 [halo-sigs](https://github.com/halo-sigs) 组织下,有非常多的仓库。每个仓库下都有可能包含一些“首次贡献者”友好的 Issue主要是为了给贡献者提供一个友好的体验。 该类 Issue
在 [halo-dev](https://github.com/halo-dev) 和 [halo-sigs](https://github.com/halo-sigs) 组织下,有非常多的仓库。每个仓库下都有可能包含一些“首次贡献者”友好的 Issue主要是为了给贡献者提供一个友好的体验。该类 Issue
一般会用 `good-first-issue` 标签标记。标签 `good-first-issue` 表示该 Issue 不需要对 Halo 有深入的理解也能够参与。
请点击:[good-first-issue](https://github.com/issues?q=org%3Ahalo-dev+is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22+no%3Aassignee+)

View File

@@ -27,7 +27,7 @@ description: Halo 项目的构成
- classpath:/config/
- classpath:/
> 参考: [Application Property Files](https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-application-property-files)
> 参考[Application Property Files](https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-application-property-files)
在开发的时候,希望大家能够在 `~/halo-dev/application.yml` 中进行添加自定义配置。当然后面也会讲到如何用`运行参数``VM options` 进行控制配置,届时可根据具体情况进行选择。

View File

@@ -77,7 +77,7 @@ spec:
- `options`:静态数据源。当 `action` 存在时,此参数无效。
- `action`:远程动态数据源的接口地址。
- `requestOption` 动态数据源的请求参数,可以通过此参数来指定如何获取数据,适配不同的接口。当 `action` 存在时,此参数有效。
- `requestOption`:动态数据源的请求参数,可以通过此参数来指定如何获取数据,适配不同的接口。当 `action` 存在时,此参数有效。
- `remoteOptimize`:是否开启远程数据源优化,默认为 `true`。开启后,将会对远程数据源进行优化,减少请求次数。仅在动态数据源下有效。
- `allowCreate`:是否允许创建新选项,默认为 `false`。仅在静态数据源下有效,需要同时开启 `searchable`。
- `clearable`:是否允许清空选项,默认为 `false`。

View File

@@ -253,13 +253,13 @@ Halo 默认会为每个自定义模型建立以下几个索引,因此不需要
- 必须以字母数字字符开头和结尾。
- 可以包含 `-``.``_``字母数字`字符。
通用规范:
通用规范
- 避免使用容易引起混淆或误解的键名。
- 尽量保持简洁明了,易于理解。
- 使用易于记忆和识别的单词或缩写。
一致性和清晰性:
一致性和清晰性
- 在整个项目或组织中保持一致的命名约定。
- labels 应直观地反映其代表的信息或用途。
@@ -356,7 +356,7 @@ RouterFunction<ServerResponse> route = route()
这样开发者可以灵活定义符合业务需求的 APIs方便地扩展插件的功能。
自定义 APIs 与自动生成的 APIs 一样,都应该遵循以下规范:
自定义 APIs 与自动生成的 APIs 一样,都应该遵循以下规范
`/apis/<group>/<version>/<extension>/{extensionname}/<subextension>`
@@ -631,7 +631,7 @@ public static BindingResult validate(Object target, String objectName,
}
```
参考文档:
参考文档
- [RequestBodyValidationException](https://github.com/halo-dev/halo/blob/25086ee3e63f0c8b6ed380140a068c44404ef2b2/application/src/main/java/run/halo/app/infra/exception/RequestBodyValidationException.java)
- [Bean Validation](https://beanvalidation.org/)

View File

@@ -5,7 +5,7 @@ description: 了解如何在登录时如何允许 Halo 做登录逻辑的增强
## 背景
在 Halo 中插件可以实现多种登录方式例如LDAP、第三方登录等。然而灵活的登录方式也带来了以下问题
在 Halo 中,插件可以实现多种登录方式,例如 LDAP、第三方登录等。然而灵活的登录方式也带来了以下问题
1. 登录逻辑难以统一:例如登录成功后需要进行额外处理,这需要插件自行实现。
2. Halo 或其他插件无法知晓登录状态:无法记录登录日志等额外处理。

View File

@@ -284,7 +284,7 @@ Halo 提供了 `NotificationReasonEmitter` 接口,开发者可以通过它轻
- `reasonType`:事件类型的名称,对应于 `ReasonType``metadata.name` 字段。
- `reasonData`:事件数据的构建器,用于构建 `Reason` 实例的属性。
Reason 数据的构建器有以下属性:
Reason 数据的构建器有以下属性
```java
public class ReasonPayloadBuilder {

View File

@@ -15,7 +15,7 @@ description: 了解如何为自定义模型编写控制器
这是一个描述控制器作用的例子:房间里的温度自动调节器。
当你设置了温度告诉了温度自动调节器你的期望状态Desired State
房间的实际温度是当前状态Current State 通过对设备的开关控制,温度自动调节器让其当前状态接近期望状态,未到达期望状态则继续调节,直到达到期望状态。
房间的实际温度是当前状态Current State。通过对设备的开关控制温度自动调节器让其当前状态接近期望状态未到达期望状态则继续调节直到达到期望状态。
在 Halo 中控制器的运行部分已经有一个默认实现,你只需要编写控制器的调谐的逻辑也就是 [控制器概述](../../../core/framework.md#controller) 中的所说的 Reconciler 即可。
@@ -164,10 +164,10 @@ record Result(boolean reEnqueue, Duration retryAfter) {}
### 场景:事件管理系统
创建一个名为 ”EventTracker“ 的自定义模型,用于管理和追踪组织内的各种事件。这些事件可以是会议、研讨会、社交聚会或任何其他类型的组织活动。
“EventTracker“ 自定义模型将提供一个框架,用于记录事件的详细信息,如时间、地点、参与者和状态。
创建一个名为”EventTracker“的自定义模型用于管理和追踪组织内的各种事件。这些事件可以是会议、研讨会、社交聚会或任何其他类型的组织活动。
“EventTracker“自定义模型将提供一个框架用于记录事件的详细信息如时间、地点、参与者和状态。
由于这里的重点是控制器,因此我们将忽略自定义模型的详细信息,只关注控制器的实现,一个可能的 “EventTracker” 数据结构如下:
由于这里的重点是控制器因此我们将忽略自定义模型的详细信息只关注控制器的实现一个可能的“EventTracker”数据结构如下
```yaml
apiVersion: tracker.halo.run/v1alpha1

View File

@@ -25,7 +25,7 @@ description: 了解如何使用静态资源代理来访问插件中的静态资
```
插件启动后会根据 `/plugins/{plugin-name}/assets/**` 规则生成访问路径,
因此该 `ReverseProxy` 的访问路径为: `/plugins/my-plugin/assets/res/halo.jpg`。
因此该 `ReverseProxy` 的访问路径为`/plugins/my-plugin/assets/res/halo.jpg`。
- `rules` 下可以添加多组规则。
- `path` 为路径前缀。

View File

@@ -37,10 +37,10 @@ public class MyWebSocketEndpoint implements WebSocketEndpoint {
}
```
当插件安装成功后,可以通过路径 `/apis/my-plugin.halowrite.com/v1alpha1/resources` 访问。 示例如下:
当插件安装成功后,可以通过路径 `/apis/my-plugin.halowrite.com/v1alpha1/resources` 访问。示例如下:
```bash
websocat --basic-auth admin:admin ws://127.0.0.1:8090/apis/my-plugin.halowrite.com/v1alpha1/resources
```
需要注意的是, 插件中实现的 WebSocket 相关的 API 仍然受当前权限系统约束。
需要注意的是,插件中实现的 WebSocket 相关的 API 仍然受当前权限系统约束。

View File

@@ -30,10 +30,10 @@ const groupName = ref('my-test-group')
| `meta` | Record\<string, unknown\> | undefined | 可选,要发送的额外元数据。 |
| `autoProceed` | boolean | false | 可选,在某些操作后自动继续。 |
| `allowedMetaFields` | string[] | undefined | 可选,指定允许的元数据字段。 |
| `endpoint` | string | 无,必填 | 数据发送到的端点URL。 |
| `endpoint` | string | 无,必填 | 数据发送到的端点 URL。 |
| `name` | string | file | 可选,用于上传的表单字段的名称。 |
| `note` | string | undefined | 可选,任何备注或描述。 |
| `method` | "GET" \| "POST" \| "PUT" \| "HEAD" \| "get" \| "post" \| "put" | post | 可选用于请求的HTTP方法。 |
| `method` | "GET" \| "POST" \| "PUT" \| "HEAD" \| "get" \| "post" \| "put" | post | 可选,用于请求的 HTTP 方法。 |
| `disabled` | boolean | false | 可选,如果为真,则禁用组件。 |
| `width` | string | 750px | 可选,组件的宽度。 |
| `height` | string | 550px | 可选,组件的高度。 |

View File

@@ -75,7 +75,7 @@ halo {
```
- `version`:表示要使用的 Halo 版本,随着插件 API 的更新你可能需要更高的 Halo 版本来运行插件,可自行更改。
- `superAdminUsername` Halo 的超级管理员用户名,当你启动插件时会自动根据此配置和 `superAdminPassword` 为你初始化 Halo 的超级管理员账户。
- `superAdminUsername`Halo 的超级管理员用户名,当你启动插件时会自动根据此配置和 `superAdminPassword` 为你初始化 Halo 的超级管理员账户。
- `superAdminPassword`Halo 的超级管理员用户密码。
- `externalUrl`Halo 的外部访问地址,一般默认即可,但如果修改了端口号映射可能需要修改。
- `docker.url`:用于配置连接 Docker 的 url 信息,在 Mac 或 Linux 系统上默认是 `unix:///var/run/docker.sock`,在 windows 上默认是 `npipe:////./pipe/docker_engine`
@@ -345,7 +345,7 @@ const momentsUcApiClient = {
export { momentsConsoleApiClient, momentsCoreApiClient, momentsUcApiClient };
```
使用定义的实例:
使用定义的实例
```typescript
import { momentsConsoleApiClient } from "@/api";

View File

@@ -41,8 +41,8 @@ spec:
| `spec.requires` | 插件支持的 Halo 版本范围,遵循 [SemVer Range Expressions](https://github.com/zafarkhaja/jsemver#range-expressions)。参考:[常用 SemVer Range Expressions](#common-range-expressions) |
| `spec.author` | 插件作者的信息,包括名称和支持网址。 |
| `spec.logo` | 插件的 logo支持 URL 链接或相对于项目 `src/main/resources` 目录的文件路径。 |
| `spec.settingName`(可选) | 插件配置表单的名称,用于提供用户可视化配置的表单,名称建议为 "插件名-settings"。 参考:[表单定义](../../form-schema.md)。 |
| `spec.configMapName`(可选) | 插件配置存储的 ConfigMap 名称,通常建议命名为 "插件名-configmap"。 没有配置 `settingName` 则不需要配置此项。 |
| `spec.settingName`(可选) | 插件配置表单的名称,用于提供用户可视化配置的表单,名称建议为 "插件名-settings"。参考:[表单定义](../../form-schema.md)。 |
| `spec.configMapName`(可选) | 插件配置存储的 ConfigMap 名称,通常建议命名为 "插件名-configmap"。没有配置 `settingName` 则不需要配置此项。 |
| `spec.homepage` | 插件的主页链接,通常指向插件的官方文档或帮助页面。 |
| `spec.repo` | 插件源码的仓库地址。 |
| `spec.issues` | 插件的反馈问题地址,可以是 GitHub Issues。 |

View File

@@ -200,7 +200,7 @@ RateLimiter buildSendEmailRateLimiter(String username, String email) {
var rateLimiter = rateLimiterRegistry.rateLimiter(rateLimiterKey, new RateLimiterConfig.Builder()
// 频次限制为 1 次
.limitForPeriod(1)
// 限制刷新周期为 60 秒, 即 60 秒内只能执行 1 次
// 限制刷新周期为 60 秒即 60 秒内只能执行 1 次
.limitRefreshPeriod(Duration.ofSeconds(60))
.build());
// 添加 limiter 到自己实现的 Registry 中保存起来以便在插件停止时清理

View File

@@ -51,7 +51,7 @@ description: 了解插件项目的文件结构
- `StarterPlugin.java`:插件后端的入口文件,位于 `src/main/java/run/halo/starter` 路径下。你可以根据需要修改包名和类名,但需要确保该类继承 `run.halo.app.plugin.BasePlugin`,以指定其为插件的入口。
- `plugin.yaml`:这是插件的描述文件,位于 `src/main/resources` 目录下。该文件是必须的,包含插件的基本信息,如插件名称、版本、作者、描述以及依赖等内容。
- `resources/console` 该文件夹通常包含前端部分打包后生成的文件,包括 main.jsJavaScript 文件)和 style.css样式表。如果插件不包含前端部分此目录可以忽略。
- `resources/console`:该文件夹通常包含前端部分打包后生成的文件,包括 main.jsJavaScript 文件)和 style.css样式表。如果插件不包含前端部分此目录可以忽略。
:::warning 注意
从 2.11 开始Halo 支持了 UC 个人中心,且个人中心和 Console 的插件机制共享,所以为了避免歧义,`resources/console` 在后续版本会被重命名为 `resources/ui`,但同时也会兼容 `resources/console`

View File

@@ -9,7 +9,7 @@ description: 这个例子展示了如何开发 Todo List 插件
## 配置你的插件
1. 修改 `build.gradle` 中的 `group` 为你自己的,如:
1. 修改 `build.gradle` 中的 `group` 为你自己的,如
```groovy
group = 'run.halo.tutorial'
@@ -279,7 +279,7 @@ export default definePlugin({
本章节我们将通过使用 `Axios` 来完成与插件后端 APIs 进行数据交互,文档参考 [axios-http](https://axios-http.com/docs)。
首先需要安装 `Axios` 在 ui 目录下执行命令:
首先需要安装 `Axios`,在 ui 目录下执行命令:
```shell
pnpm install axios

View File

@@ -9,12 +9,12 @@ description: 为 Web 请求提供过滤器扩展点,可用于对请求进行
AdditionalWebFilter 能做什么?
1. 认证与授权: AdditionalWebFilter 可以用来检查用户是否登录,或者是否有权限访问某个资源。
2. 日志记录与审计: 在请求处理之前或之后记录日志,帮助了解应用程序的使用情况。
3. 请求重构: 修改请求数据,例如添加、删除或修改请求头或请求参数。
4. 响应处理: 修改响应,例如设置通用的响应头。
5. 性能监控: 记录处理请求所需的时间,用于性能分析。
6. 异常处理: 统一处理请求过程中抛出的异常。
1. 认证与授权AdditionalWebFilter 可以用来检查用户是否登录,或者是否有权限访问某个资源。
2. 日志记录与审计:在请求处理之前或之后记录日志,帮助了解应用程序的使用情况。
3. 请求重构:修改请求数据,例如添加、删除或修改请求头或请求参数。
4. 响应处理:修改响应,例如设置通用的响应头。
5. 性能监控:记录处理请求所需的时间,用于性能分析。
6. 异常处理:统一处理请求过程中抛出的异常。
7. ......
## 使用示例

View File

@@ -18,7 +18,7 @@ description: Halo 服务端为插件提供的扩展点接口
1. 实现扩展点接口,然后标记上 `@Component` 注解。
2. 对该扩展点的实现类进行 `ExtensionDefinition` 自定义模型对象的声明。
例如: 实现一个通知器的扩展,首先 `implements` ReactiveNotifier 扩展点接口:
例如:实现一个通知器的扩展,首先 `implements` ReactiveNotifier 扩展点接口:
```java
@Component

View File

@@ -197,7 +197,7 @@ addOptions() {
#### 3. Slash Command 扩展
Slash Command (斜杠命令)的扩展,可用于在当前行快捷执行功能操作,例如转换当前行为标题、在当前行添加代码块等功能。
Slash Command斜杠命令的扩展可用于在当前行快捷执行功能操作例如转换当前行为标题、在当前行添加代码块等功能。
![Slash Command 扩展](/img/developer-guide/plugin/extension-points/ui/default-editor-extension-slash-command.png)

View File

@@ -61,7 +61,7 @@ Halo 提供了一个用于插件开发的 DevTools它可以帮助你快速的
3. 启动成功后,可以看到如下日志输出:
```shell
Halo 初始化成功,访问: http://localhost:8090/console
Halo 初始化成功访问http://localhost:8090/console
用户名admin
密码admin
```

View File

@@ -9,7 +9,7 @@ description: 插件开发的准备工作
- 你能通过 [Docker 运行 Halo](../../getting-started/install/docker) 或在[开发环境运行 Halo](../core/run.md)。
- 你熟悉 Java Web 开发并掌握 [Spring Boot](https://spring.io/projects/spring-boot/) 框架。
- 你需要在计算机上安装最新的 LTS 版本的 Node.js如果你还没有Node.js安装你可以在这里下载 [Node.js 18 LTS](https://nodejs.org/)。
- 你需要在计算机上安装最新的 LTS 版本的 Node.js如果你还没有 Node.js 安装,你可以在这里下载 [Node.js 18 LTS](https://nodejs.org/)。
- 你熟悉 Vue 和 TypeScript。
- 你应该熟悉使用 Node.js 包管理器。
- Git 是一个版本控制系统,用于跟踪代码的更改,您需要 Git 来下载示例插件并发布插件。

View File

@@ -150,7 +150,7 @@ Halo 不提供对第三方应用程序的支持。作为插件的开发者,你
为了保持 Halo 生态系统的健康、可靠和安全,每次你对自己拥有的插件进行重大更新时,我们建议在遵循 [semantic versioning spec](http://semver.org/) 的基础上,
发布新版本。遵循语义版本控制规范有助于其他依赖你代码的开发人员了解给定版本的更改程度,并在必要时调整自己的代码。
我们建议你的包版本从1.0.0开始并递增,如下:
我们建议你的包版本从 1.0.0 开始并递增,如下:
| Code status | Stage | Rule | Example version |
| ----------------------------------------- | ------------- | -------------------------------------------- | --------------- |

View File

@@ -41,7 +41,7 @@ rules:
### 资源型规则 {#resource-rules}
资源型规则用于定义对资源的操作权限API 符合以下特征:
资源型规则用于定义对资源的操作权限API 符合以下特征
-`/api` 开头,且以 `/api/<version>/<resource>[/<resourceName>/<subresource>]` 规则组成 APIs最少路径层级为 3 即 `/api/<version>/<resource>`,最多路径层级为 5 即包含 `<resourceName>``<subresource>`,例如 `/api/v1/posts`
-`/apis/<group>/<version>/<resource>[/<resourceName>/<subresource>]` 规则组成的 APIs最少路径层级为 4 即 `/apis/<group>/<version>/<resource>`,最多路径层级为 6 即包含 `<resourceName>``<subresource>`,例如 `/apis/my-plugin.halo.run/v1alpha1/persons`
@@ -157,7 +157,7 @@ rules:
`verbs` 字段用于指定用户或服务在特定资源上能执行的操作类型。这些操作被定义为一组“动词”,每个动词与相应的 HTTP 请求方法相对应。为了更好地理解如何确定合适的 `verbs`,以下是详细的解释和每种动词的具体用途:
动词和对应的 HTTP 方法:
动词和对应的 HTTP 方法
- create: 对应 HTTP 的 POST 方法。用于创建一个新的资源实例,如果是创建子资源且不需要资源名称可以使用 `-` 表示缺省,如 `POST /apis/my-plugin.halo.run/v1alpha1/persons/-/subresource`,同时需要注意 `POST /apis/my-plugin.halo.run/v1alpha1/persons/{some-name}` 不是一个符合规范的 create 操作,创建资源不应该包含资源名称。
- get: 对应 HTTP 的 GET 方法。用于获取单个资源的详细信息,即 API 中包含 resourceName 部分如 `GET /apis/my-plugin.halo.run/v1alpha1/persons/zhangsan`
@@ -165,7 +165,7 @@ rules:
- watch: 也是对应 HTTP 的 GET 方法。用于实时监控资源或资源集合的变化,通常是通过 WebSocket 连接来实现的,如 `ws://localhost:8090/apis/my-plugin.halo.run/v1alpha1/persons`
- update: 对应 HTTP 的 PUT 方法。用于更新现有资源的全部内容。
- patch: 对应 HTTP 的 PATCH 方法。用于对现有资源进行部分更新。
- delete: 对应 HTTP 的 DELETE 方法。用于删除单个资源, 即 API 中包含 resourceName 部分如 `DELETE /apis/my-plugin.halo.run/v1alpha1/persons/zhangsan`
- delete: 对应 HTTP 的 DELETE 方法。用于删除单个资源即 API 中包含 resourceName 部分如 `DELETE /apis/my-plugin.halo.run/v1alpha1/persons/zhangsan`
- deletecollection: 同样对应 HTTP 的 DELETE 方法,但用于删除一个资源集合。
可以使用如下表格来简化理解:
@@ -208,4 +208,4 @@ subjects:
name: guqing
```
在 Halo 中,当你给一个用户分配角色后,实际上就是创建了一个 ”RoleBinding” 对象来完成的。
在 Halo 中当你给一个用户分配角色后实际上就是创建了一个”RoleBinding”对象来完成的。

View File

@@ -20,7 +20,7 @@ Halo 安装完成后,默认初始化了一篇 `Hello Halo` 文章,接下来
4. 确认无误后,点击弹框下方的 `发布` 按钮,我们的第一篇文章就成功发布了。
:::info
关于文章相关其他功能及文章各种设置项的说明,请参考《[用户指南-文章](../user-guide/posts.md)》章节
关于文章相关其他功能及文章各种设置项的说明,请参考《[用户指南 - 文章](../user-guide/posts.md)》章节
:::
## 查看文章

View File

@@ -11,7 +11,7 @@ description: 使用阿里云计算巢服务部署 Halo
![image.png](/img/install/alibab-cloud-computenest/deploy_1.jpg)
2. 参数填写完成后可以看到对应询价明细,确认参数后点击**下一步:确认订单**。确认订单完成后同意服务协议并点击**立即创建**进入部署阶段。
3. 等待部署完成后进入服务实例管理, 在控制台找到 Halo 服务访问链接。
3. 等待部署完成后进入服务实例管理在控制台找到 Halo 服务访问链接。
![image.png](/img/install/alibab-cloud-computenest/deploy_2.jpg)
4. 单击链接访问 Halo 服务。

View File

@@ -282,7 +282,7 @@ import DockerRegistryList from "./slots/_docker-registry-list.md"
## 反向代理
你可以在下面的反向代理软件中任选一项,我们假设你已经安装好了其中一项,并对其的基本操作有一定了解。 如果你对它们没有任何了解,可以参考我们更为详细的反向代理文档:
你可以在下面的反向代理软件中任选一项,我们假设你已经安装好了其中一项,并对其的基本操作有一定了解。如果你对它们没有任何了解,可以参考我们更为详细的反向代理文档:
1. 使用 [Nginx Proxy Manager](../install/other/nginxproxymanager.md)
2. 使用 [Traefik](../install/other/traefik.md)

View File

@@ -90,8 +90,8 @@ helm install halo halo/halo --set mysql.enabled=true --set postgresql.enabled=fa
:::info 参数说明
- `mysql.enabled=true` 自动安装 MySQL 数据库;
- `postgresql.enabled=false` 不自动安装 PostgreSQL 数据库;
- `mysql.enabled=true`:自动安装 MySQL 数据库;
- `postgresql.enabled=false`:不自动安装 PostgreSQL 数据库;
- 关于 mysql 的更多参数说明,请参考 [Bitnami MySQL Chart](https://github.com/bitnami/charts/tree/main/bitnami/mysql#parameters),在原有参数格式上增加 `mysql.` 前缀即可。
:::
@@ -113,8 +113,8 @@ helm install halo halo/halo \
:::info 参数说明
- `mysql.enabled=true` 不自动安装 MySQL 数据库;
- `postgresql.enabled=false` 不自动安装 PostgreSQL 数据库;
- `mysql.enabled=true`:不自动安装 MySQL 数据库;
- `postgresql.enabled=false`:不自动安装 PostgreSQL 数据库;
- `externalDatabase.platform=mysql`:外部数据库类型,例如 `postgresql``mysql`
- `externalDatabase.host=mysql`:外部数据库连接地址;
- `externalDatabase.port=3306`:外部数据库连接端口;

View File

@@ -266,7 +266,7 @@ journalctl -n 20 -u halo
## 反向代理
你可以在下面的反向代理软件中任选一项,我们假设你已经安装好了其中一项,并对其的基本操作有一定了解。 如果你对它们没有任何了解,可以参考我们更为详细的反向代理文档:
你可以在下面的反向代理软件中任选一项,我们假设你已经安装好了其中一项,并对其的基本操作有一定了解。如果你对它们没有任何了解,可以参考我们更为详细的反向代理文档:
1. 使用 [Nginx Proxy Manager](../install/other/nginxproxymanager.md)

View File

@@ -20,7 +20,7 @@ Halo 离线安装包使用 Docker + Docker Compose 的方式部署 Halo 及其
### 解压安装包
以 root 用户 ssh 登录到目标机器, 并执行如下命令:
以 root 用户 ssh 登录到目标机器并执行如下命令:
```bash
cd /tmp

View File

@@ -25,7 +25,7 @@ Nginx Proxy Manager 后台还可以一键申请 SSL 证书,并且会自动续
> 说明:默认你的服务器已经安装了 Docker 和 Docker Compose如果你没有安装可以参考[使用 Docker Compose 部署](../docker-compose) 的环境搭建部分来进行安装。
点击下方链接进入 Nginx Proxy Manager以下简称 NPM 官网:[https://nginxproxymanager.com/](https://nginxproxymanager.com/)
点击下方链接进入 Nginx Proxy Manager以下简称 NPM官网[https://nginxproxymanager.com/](https://nginxproxymanager.com/)
我们可以直接选择 [快速安装](https://nginxproxymanager.com/guide/#quick-setup)。
@@ -109,9 +109,9 @@ docker compose up -d # 如果你用的是 docker-compose-plugin 的话,用
- `Forward Hostname/IP` :填入服务器的 IP或者 Docker 容器内部的 IP如果 NPM 和 Halo 搭建在同一台服务器上的话)
- `Forward Port`:填入 Halo 映射出的端口,这边默认是 `8090`
- `Cache Assets` :缓存,可以选择打开
- `Block Common Exploits` 阻止常见的漏洞,可以选择打开
- `Block Common Exploits`:阻止常见的漏洞,可以选择打开
- `Websockets Support` WS 支持,可以选择打开
- `Access List` 这个是 NPM 自带的一个限制访问功能,这边我们不管,后续可以自行研究。
- `Access List`:这个是 NPM 自带的一个限制访问功能,这边我们不管,后续可以自行研究。
以下是一个样列:

View File

@@ -20,9 +20,9 @@ Podman 采用无守护进程的包容性架构,因此可以更安全、更简
为什么选择 Podman 而不是 Docker ?
这个需要视情况而定, 如果您的主机配置不是很高, 您使用 Docker 时, 因为 Docker 自带的守护进程可能会雪上加霜, 它会大量占用您的资源。
这个需要视情况而定如果您的主机配置不是很高您使用 Docker 时因为 Docker 自带的守护进程可能会雪上加霜它会大量占用您的资源。
而 Podman 采用无守护进程架构,而且容器是无根模式,您可以在占用资源极小的情况下运行镜像,并且获得很高的安全性。
而且 Podman 与 Docker 高度兼容,您不需要做特别配置即可将 Docker 容器运行在Podman 上。
而且 Podman 与 Docker 高度兼容,您不需要做特别配置即可将 Docker 容器运行在 Podman 上。
[什么是 Podman?](https://www.redhat.com/zh/topics/containers/what-is-podman)
@@ -40,15 +40,15 @@ Podman 采用无守护进程的包容性架构,因此可以更安全、更简
- Podman 安装文档:[https://podman.io/docs/installation](https://podman.io/docs/installation)
:::tip
我们推荐您先阅读 Podman 官方文档对 Podman 有了相关了解后再考虑通过Linux包管理系统安装 Podman 或者使用文档中指定的方式安装
我们推荐您先阅读 Podman 官方文档对 Podman 有了相关了解后,再考虑通过 Linux 包管理系统安装 Podman 或者使用文档中指定的方式安装。
:::
## 使用 Docker 镜像
:::tip
为什么是 Docker 镜像?
为什么是 Docker 镜像
通过[前言](#前言)我们已经了解了 Podman ,其中提到 ***Podman 与 Docker 高度兼容*** ,正是因为 Podman 完全是为了替代 Docker 而诞生,所以原本的 Docker 生态中的镜像我们可以无需更改直接使用。
通过[前言](#前言)我们已经了解了 Podman其中提到 ***Podman 与 Docker 高度兼容*** ,正是因为 Podman 完全是为了替代 Docker 而诞生,所以原本的 Docker 生态中的镜像我们可以无需更改直接使用。
:::
<DockerRegistryList />
@@ -115,7 +115,7 @@ Podman 没有和 Docker 类似的管理进程,在低配置的主机上更友
但是使用 Podman 想要开机后自动启动,官方推荐一种和 systemd 服务类似的语法文件,即 Podman Quadlet。
:::
下面是一个使用 Podstgresql 数据库的示例:
下面是一个使用 Podstgresql 数据库的示例
```bash
mkdir -p /opt/podman-data/halo
@@ -162,38 +162,38 @@ systemctl start halo
# 之后重启会自动启动不需要enable服务.
```
Podman Quadlet 解析:
Podman Quadlet 解析
`[Unit]` 部分:
`[Unit]` 部分
- WantsAfter字段指定了Halo在什么服务后启动。
- WantsAfter 字段指定了 Halo 在什么服务后启动。
`[Container]` 部分:
`[Container]` 部分
- `AutoUpdate=registry`指定了自动拉取容器。假设后续Halo镜像支持了`latest`标签,你需要`systemctl enable --now podman-auto-update.timer`以启用容器自动更新。本文示例`ghcr.io/halo-dev/halo:2.20`,将会自动更新适用与`2.20`版本的patch例如您创建容器时是`2.20.1`,在官方发布`2.20.2`版本时,容器会自动更新到`2.20.2`。
- `AutoUpdate=registry`指定了自动拉取容器。假设后续 Halo 镜像支持了`latest`标签,你需要`systemctl enable --now podman-auto-update.timer`以启用容器自动更新。本文示例`ghcr.io/halo-dev/halo:2.20`,将会自动更新适用与`2.20`版本的 patch例如您创建容器时是`2.20.1`,在官方发布`2.20.2`版本时,容器会自动更新到`2.20.2`。
- `ContainerName=`指定了 systemd 将生成的服务名称。
- `User=60000 Group=60000 UserNS=keep-id:uid=60000,gid=60000` 限制容器以 id 60000 的用户运行提高安全性。注意这个id 60000请根据你实际想要运行的用户名来修改可通过`id user`获得你的用户的id.
- `User=60000 Group=60000 UserNS=keep-id:uid=60000,gid=60000` 限制容器以 id 60000 的用户运行,提高安全性。注意这个 id 60000 请根据你实际想要运行的用户名来修改,可通过`id user`获得你的用户的 id.
- `Environment=`字段指定了容器的环境变量,其中你需要注意的是`Environment=HALO_WORK_DIR="/.halo"` `Environment=SPRING_CONFIG_LOCATION="optional:classpath:/;optional:file:/.halo/"`这两个变量中的`/.halo`路径。
- `Volume=`字段指定挂载到容器储存Halo配置文件的路径请仔细观察`/opt/podman-data/halo:/.halo`其中的`/.halo`要与上面需要注意的环境变量路径要一致。
- `PublishPort=`和docker -p命令一致即需要映射的端口。
- `Image=ghcr.io/halo-dev/halo` 即Docker镜像的地址注意要完整的。比如`ghcr.io`这个路径就不能少,如果你没有配置 Podman 的 registries 文件,此路径就必不可少,建议写全。
- `Exec=` 即附加到Halo容器的 Command ,具体变量参考上方的 DockerArgs 。多个变量以空格分开。
- `Volume=`字段指定挂载到容器储存 Halo 配置文件的路径,请仔细观察`/opt/podman-data/halo:/.halo`其中的`/.halo`要与上面需要注意的环境变量路径要一致。
- `PublishPort=`和 docker -p 命令一致,即需要映射的端口。
- `Image=ghcr.io/halo-dev/halo` 即 Docker 镜像的地址,注意要完整的。比如`ghcr.io`这个路径就不能少,如果你没有配置 Podman 的 registries 文件,此路径就必不可少,建议写全。
- `Exec=` 即附加到 Halo 容器的 Command具体变量参考上方的 DockerArgs。多个变量以空格分开。
`[Service]` 部分:
即原生systemd语法
`[Service]` 部分
即原生 systemd 语法
- `Restart` 指定遇到错误后总是重启容器
- `RestartSec` 重启的间隔时间
- `StartLimitInterval` 重启的次数,超过这个次数将不再重启。
- `TimeoutStartSec` 启动容器的超时时间,建议不要修改,因为每次开机后 Podman 将自动拉取容器,这时也许耗时会很长,这些时间是算在启动时间中的。如果定义太小的时间,可能将导致 Podman 无法拉取容器镜像。
- `TimeoutStopSec` 停止容器时的超时时间,`systemctl stop halo` 假设使用这个命令,如果停止时间超过了`TimeoutStopSec`定义的时间将会被系统Kill.
- `TimeoutStopSec` 停止容器时的超时时间,`systemctl stop halo` 假设使用这个命令,如果停止时间超过了`TimeoutStopSec`定义的时间,将会被系统 Kill.
`[Install]` 部分:
`[Install]` 部分
此部分请查看systemd文档不建议修改。
此部分请查看 systemd 文档,不建议修改。
使用默认的 root 用户运行时无需定义 `User=60000 Group=60000 UserNS=keep-id:uid=60000,gid=60000` 与 `Environment=HALO_WORK_DIR="/.halo"` `Environment=SPRING_CONFIG_LOCATION="optional:classpath:/;optional:file:/.halo/"`
示例:
示例
```bash
mkdir -p /opt/podman-data/halo

View File

@@ -27,9 +27,9 @@ Console 控制台是一个 Halo 站点的后台管理系统,只有具有权限
1. **全局搜索框**:点击或通过快捷键 `Ctrl+K` 可以呼出全局搜索框,输入关键字可以在所有文章、页面、附件、用户及设置项等所有内容中进行全局搜索。
2. **侧边导航栏**:对控制台提供的功能进行导航,点击导航栏条目会在页面右侧显示对应功能页面。安装某些插件可能会扩展导航栏条目。
3. **用户信息展示及操作**:展示当前登录用户的头像、名称及角色等信息,`···` 中提供更多用户相关操作。
4. **功能页面标题** 当前所在的功能页面标题。
4. **功能页面标题**:当前所在的功能页面标题。
5. **功能页面操作区域**:当前所在功能页面提供的功能操作按钮。
6. **功能页面主体** 当前所在功能页面的主体显示区域,显示内容及形式视具体页面功能而定。
6. **功能页面主体**:当前所在功能页面的主体显示区域,显示内容及形式视具体页面功能而定。
## 个人中心

View File

@@ -118,7 +118,7 @@ server {
```bash
# '-f' 滚动更新日志
# '-n 200' 从倒数第200行开始查看
# '-n 200' 从倒数第 200 行开始查看
# 更多帮助可以查看 'docker logs --help'
docker logs -f halo -n 200
```

View File

@@ -17,4 +17,4 @@ description: 页面管理相关功能说明
#### 页面操作
对于页面的新建、设置、发布及删除等操作,与文章操作基本一致,具体操作请参考[《用户指南-文章》](./posts.md)章节,此处不再赘述。
对于页面的新建、设置、发布及删除等操作,与文章操作基本一致,具体操作请参考[《用户指南 - 文章》](./posts.md)章节,此处不再赘述。

View File

@@ -38,8 +38,8 @@ Halo 支持通过插件来拓展文章编辑器,目前除了 Halo 内置的编
- **分类目录**:文章所属分类,方便用户区分文章类型进行针对性浏览,一篇文章可以属于多个分类。
- **标签**:文章添加的标签,方便用户更进一步标识文章信息,一篇文章可以添加多个标签。
- **自动生成摘要**:文章摘要是对文章内容的概括性描述。
- **是** 系统根据文章内容,自动生成一段摘要。
- **否** 用户自行输入文章摘要文本。
- **是**:系统根据文章内容,自动生成一段摘要。
- **否**:用户自行输入文章摘要文本。
- **自定义摘要**:用户自行输入的文章摘要文本,仅当 `自动生成摘要` 为否时生效。
- **允许评论**:是否允许用户在主题端浏览文章时对该文章发起评论。
- **是否置顶**:文章是否排序在文章列表的最顶部。

View File

@@ -51,7 +51,7 @@ Halo 提供了以下站点基本信息设置:
- **站点关键词**:格式为以 `,` 分隔的关键词列表,配置后会在所有页面 HTML 源码的 head 部分添加:
```html
<meta name="keywords" content="{关键词 A,关键词 B}" />
<meta name="keywords" content="{关键词 A, 关键词 B}" />
```
:::warning 注意
@@ -119,7 +119,7 @@ Halo 提供了以下站点基本信息设置:
## 通知设置
从 2.10.0 版本开始, Halo 提供了 **通知** 功能当有新的评论、留言、回复等事件发生时Halo 会通过配置的方式通知站长或者相关用户。同时,个人中心配置的电子邮箱也会作为通知的接收邮箱。
从 2.10.0 版本开始Halo 提供了 **通知** 功能当有新的评论、留言、回复等事件发生时Halo 会通过配置的方式通知站长或者相关用户。同时,个人中心配置的电子邮箱也会作为通知的接收邮箱。
### 邮件通知

View File

@@ -13,7 +13,7 @@ description: 代码贡献指南
> 这个步骤非常适合首次贡献者。
在 [halo-dev](https://github.com/halo-dev) 和 [halo-sigs](https://github.com/halo-sigs) 组织下,有非常多的仓库。每个仓库下都有可能包含一些“首次贡献者”友好的 Issue主要是为了给贡献者提供一个友好的体验。 该类 Issue
在 [halo-dev](https://github.com/halo-dev) 和 [halo-sigs](https://github.com/halo-sigs) 组织下,有非常多的仓库。每个仓库下都有可能包含一些“首次贡献者”友好的 Issue主要是为了给贡献者提供一个友好的体验。该类 Issue
一般会用 `good-first-issue` 标签标记。标签 `good-first-issue` 表示该 Issue 不需要对 Halo 有深入的理解也能够参与。
请点击:[good-first-issue](https://github.com/issues?q=org%3Ahalo-dev+is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22+no%3Aassignee+)

View File

@@ -27,7 +27,7 @@ description: Halo 项目的构成
- classpath:/config/
- classpath:/
> 参考: [Application Property Files](https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-application-property-files)
> 参考[Application Property Files](https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-application-property-files)
在开发的时候,希望大家能够在 `~/halo-dev/application.yml` 中进行添加自定义配置。当然后面也会讲到如何用`运行参数``VM options` 进行控制配置,届时可根据具体情况进行选择。

View File

@@ -77,7 +77,7 @@ spec:
- `options`:静态数据源。当 `action` 存在时,此参数无效。
- `action`:远程动态数据源的接口地址。
- `requestOption` 动态数据源的请求参数,可以通过此参数来指定如何获取数据,适配不同的接口。当 `action` 存在时,此参数有效。
- `requestOption`:动态数据源的请求参数,可以通过此参数来指定如何获取数据,适配不同的接口。当 `action` 存在时,此参数有效。
- `remoteOptimize`:是否开启远程数据源优化,默认为 `true`。开启后,将会对远程数据源进行优化,减少请求次数。仅在动态数据源下有效。
- `allowCreate`:是否允许创建新选项,默认为 `false`。仅在静态数据源下有效,需要同时开启 `searchable`。
- `clearable`:是否允许清空选项,默认为 `false`。

View File

@@ -253,13 +253,13 @@ Halo 默认会为每个自定义模型建立以下几个索引,因此不需要
- 必须以字母数字字符开头和结尾。
- 可以包含 `-``.``_``字母数字`字符。
通用规范:
通用规范
- 避免使用容易引起混淆或误解的键名。
- 尽量保持简洁明了,易于理解。
- 使用易于记忆和识别的单词或缩写。
一致性和清晰性:
一致性和清晰性
- 在整个项目或组织中保持一致的命名约定。
- labels 应直观地反映其代表的信息或用途。
@@ -356,7 +356,7 @@ RouterFunction<ServerResponse> route = route()
这样开发者可以灵活定义符合业务需求的 APIs方便地扩展插件的功能。
自定义 APIs 与自动生成的 APIs 一样,都应该遵循以下规范:
自定义 APIs 与自动生成的 APIs 一样,都应该遵循以下规范
`/apis/<group>/<version>/<extension>/{extensionname}/<subextension>`
@@ -631,7 +631,7 @@ public static BindingResult validate(Object target, String objectName,
}
```
参考文档:
参考文档
- [RequestBodyValidationException](https://github.com/halo-dev/halo/blob/25086ee3e63f0c8b6ed380140a068c44404ef2b2/application/src/main/java/run/halo/app/infra/exception/RequestBodyValidationException.java)
- [Bean Validation](https://beanvalidation.org/)

View File

@@ -5,7 +5,7 @@ description: 了解如何在登录时如何允许 Halo 做登录逻辑的增强
## 背景
在 Halo 中插件可以实现多种登录方式例如LDAP、第三方登录等。然而灵活的登录方式也带来了以下问题
在 Halo 中,插件可以实现多种登录方式,例如 LDAP、第三方登录等。然而灵活的登录方式也带来了以下问题
1. 登录逻辑难以统一:例如登录成功后需要进行额外处理,这需要插件自行实现。
2. Halo 或其他插件无法知晓登录状态:无法记录登录日志等额外处理。

View File

@@ -284,7 +284,7 @@ Halo 提供了 `NotificationReasonEmitter` 接口,开发者可以通过它轻
- `reasonType`:事件类型的名称,对应于 `ReasonType``metadata.name` 字段。
- `reasonData`:事件数据的构建器,用于构建 `Reason` 实例的属性。
Reason 数据的构建器有以下属性:
Reason 数据的构建器有以下属性
```java
public class ReasonPayloadBuilder {

View File

@@ -15,7 +15,7 @@ description: 了解如何为自定义模型编写控制器
这是一个描述控制器作用的例子:房间里的温度自动调节器。
当你设置了温度告诉了温度自动调节器你的期望状态Desired State
房间的实际温度是当前状态Current State 通过对设备的开关控制,温度自动调节器让其当前状态接近期望状态,未到达期望状态则继续调节,直到达到期望状态。
房间的实际温度是当前状态Current State。通过对设备的开关控制温度自动调节器让其当前状态接近期望状态未到达期望状态则继续调节直到达到期望状态。
在 Halo 中控制器的运行部分已经有一个默认实现,你只需要编写控制器的调谐的逻辑也就是 [控制器概述](../../../core/framework.md#controller) 中的所说的 Reconciler 即可。
@@ -164,10 +164,10 @@ record Result(boolean reEnqueue, Duration retryAfter) {}
### 场景:事件管理系统
创建一个名为 ”EventTracker“ 的自定义模型,用于管理和追踪组织内的各种事件。这些事件可以是会议、研讨会、社交聚会或任何其他类型的组织活动。
“EventTracker“ 自定义模型将提供一个框架,用于记录事件的详细信息,如时间、地点、参与者和状态。
创建一个名为”EventTracker“的自定义模型用于管理和追踪组织内的各种事件。这些事件可以是会议、研讨会、社交聚会或任何其他类型的组织活动。
“EventTracker“自定义模型将提供一个框架用于记录事件的详细信息如时间、地点、参与者和状态。
由于这里的重点是控制器,因此我们将忽略自定义模型的详细信息,只关注控制器的实现,一个可能的 “EventTracker” 数据结构如下:
由于这里的重点是控制器因此我们将忽略自定义模型的详细信息只关注控制器的实现一个可能的“EventTracker”数据结构如下
```yaml
apiVersion: tracker.halo.run/v1alpha1

View File

@@ -25,7 +25,7 @@ description: 了解如何使用静态资源代理来访问插件中的静态资
```
插件启动后会根据 `/plugins/{plugin-name}/assets/**` 规则生成访问路径,
因此该 `ReverseProxy` 的访问路径为: `/plugins/my-plugin/assets/res/halo.jpg`。
因此该 `ReverseProxy` 的访问路径为`/plugins/my-plugin/assets/res/halo.jpg`。
- `rules` 下可以添加多组规则。
- `path` 为路径前缀。

View File

@@ -37,10 +37,10 @@ public class MyWebSocketEndpoint implements WebSocketEndpoint {
}
```
当插件安装成功后,可以通过路径 `/apis/my-plugin.halowrite.com/v1alpha1/resources` 访问。 示例如下:
当插件安装成功后,可以通过路径 `/apis/my-plugin.halowrite.com/v1alpha1/resources` 访问。示例如下:
```bash
websocat --basic-auth admin:admin ws://127.0.0.1:8090/apis/my-plugin.halowrite.com/v1alpha1/resources
```
需要注意的是, 插件中实现的 WebSocket 相关的 API 仍然受当前权限系统约束。
需要注意的是,插件中实现的 WebSocket 相关的 API 仍然受当前权限系统约束。

View File

@@ -30,10 +30,10 @@ const groupName = ref('my-test-group')
| `meta` | Record\<string, unknown\> | undefined | 可选,要发送的额外元数据。 |
| `autoProceed` | boolean | false | 可选,在某些操作后自动继续。 |
| `allowedMetaFields` | string[] | undefined | 可选,指定允许的元数据字段。 |
| `endpoint` | string | 无,必填 | 数据发送到的端点URL。 |
| `endpoint` | string | 无,必填 | 数据发送到的端点 URL。 |
| `name` | string | file | 可选,用于上传的表单字段的名称。 |
| `note` | string | undefined | 可选,任何备注或描述。 |
| `method` | "GET" \| "POST" \| "PUT" \| "HEAD" \| "get" \| "post" \| "put" | post | 可选用于请求的HTTP方法。 |
| `method` | "GET" \| "POST" \| "PUT" \| "HEAD" \| "get" \| "post" \| "put" | post | 可选,用于请求的 HTTP 方法。 |
| `disabled` | boolean | false | 可选,如果为真,则禁用组件。 |
| `width` | string | 750px | 可选,组件的宽度。 |
| `height` | string | 550px | 可选,组件的高度。 |

View File

@@ -75,7 +75,7 @@ halo {
```
- `version`:表示要使用的 Halo 版本,随着插件 API 的更新你可能需要更高的 Halo 版本来运行插件,可自行更改。
- `superAdminUsername` Halo 的超级管理员用户名,当你启动插件时会自动根据此配置和 `superAdminPassword` 为你初始化 Halo 的超级管理员账户。
- `superAdminUsername`Halo 的超级管理员用户名,当你启动插件时会自动根据此配置和 `superAdminPassword` 为你初始化 Halo 的超级管理员账户。
- `superAdminPassword`Halo 的超级管理员用户密码。
- `externalUrl`Halo 的外部访问地址,一般默认即可,但如果修改了端口号映射可能需要修改。
- `docker.url`:用于配置连接 Docker 的 url 信息,在 Mac 或 Linux 系统上默认是 `unix:///var/run/docker.sock`,在 windows 上默认是 `npipe:////./pipe/docker_engine`
@@ -345,7 +345,7 @@ const momentsUcApiClient = {
export { momentsConsoleApiClient, momentsCoreApiClient, momentsUcApiClient };
```
使用定义的实例:
使用定义的实例
```typescript
import { momentsConsoleApiClient } from "@/api";

View File

@@ -41,8 +41,8 @@ spec:
| `spec.requires` | 插件支持的 Halo 版本范围,遵循 [SemVer Range Expressions](https://github.com/zafarkhaja/jsemver#range-expressions)。参考:[常用 SemVer Range Expressions](#common-range-expressions) |
| `spec.author` | 插件作者的信息,包括名称和支持网址。 |
| `spec.logo` | 插件的 logo支持 URL 链接或相对于项目 `src/main/resources` 目录的文件路径。 |
| `spec.settingName`(可选) | 插件配置表单的名称,用于提供用户可视化配置的表单,名称建议为 "插件名-settings"。 参考:[表单定义](../../form-schema.md)。 |
| `spec.configMapName`(可选) | 插件配置存储的 ConfigMap 名称,通常建议命名为 "插件名-configmap"。 没有配置 `settingName` 则不需要配置此项。 |
| `spec.settingName`(可选) | 插件配置表单的名称,用于提供用户可视化配置的表单,名称建议为 "插件名-settings"。参考:[表单定义](../../form-schema.md)。 |
| `spec.configMapName`(可选) | 插件配置存储的 ConfigMap 名称,通常建议命名为 "插件名-configmap"。没有配置 `settingName` 则不需要配置此项。 |
| `spec.homepage` | 插件的主页链接,通常指向插件的官方文档或帮助页面。 |
| `spec.repo` | 插件源码的仓库地址。 |
| `spec.issues` | 插件的反馈问题地址,可以是 GitHub Issues。 |

View File

@@ -200,7 +200,7 @@ RateLimiter buildSendEmailRateLimiter(String username, String email) {
var rateLimiter = rateLimiterRegistry.rateLimiter(rateLimiterKey, new RateLimiterConfig.Builder()
// 频次限制为 1 次
.limitForPeriod(1)
// 限制刷新周期为 60 秒, 即 60 秒内只能执行 1 次
// 限制刷新周期为 60 秒即 60 秒内只能执行 1 次
.limitRefreshPeriod(Duration.ofSeconds(60))
.build());
// 添加 limiter 到自己实现的 Registry 中保存起来以便在插件停止时清理

View File

@@ -51,7 +51,7 @@ description: 了解插件项目的文件结构
- `StarterPlugin.java`:插件后端的入口文件,位于 `src/main/java/run/halo/starter` 路径下。你可以根据需要修改包名和类名,但需要确保该类继承 `run.halo.app.plugin.BasePlugin`,以指定其为插件的入口。
- `plugin.yaml`:这是插件的描述文件,位于 `src/main/resources` 目录下。该文件是必须的,包含插件的基本信息,如插件名称、版本、作者、描述以及依赖等内容。
- `resources/console` 该文件夹通常包含前端部分打包后生成的文件,包括 main.jsJavaScript 文件)和 style.css样式表。如果插件不包含前端部分此目录可以忽略。
- `resources/console`:该文件夹通常包含前端部分打包后生成的文件,包括 main.jsJavaScript 文件)和 style.css样式表。如果插件不包含前端部分此目录可以忽略。
:::warning 注意
从 2.11 开始Halo 支持了 UC 个人中心,且个人中心和 Console 的插件机制共享,所以为了避免歧义,`resources/console` 在后续版本会被重命名为 `resources/ui`,但同时也会兼容 `resources/console`

View File

@@ -9,7 +9,7 @@ description: 这个例子展示了如何开发 Todo List 插件
## 配置你的插件
1. 修改 `build.gradle` 中的 `group` 为你自己的,如:
1. 修改 `build.gradle` 中的 `group` 为你自己的,如
```groovy
group = 'run.halo.tutorial'
@@ -279,7 +279,7 @@ export default definePlugin({
本章节我们将通过使用 `Axios` 来完成与插件后端 APIs 进行数据交互,文档参考 [axios-http](https://axios-http.com/docs)。
首先需要安装 `Axios` 在 ui 目录下执行命令:
首先需要安装 `Axios`,在 ui 目录下执行命令:
```shell
pnpm install axios

View File

@@ -9,12 +9,12 @@ description: 为 Web 请求提供过滤器扩展点,可用于对请求进行
AdditionalWebFilter 能做什么?
1. 认证与授权: AdditionalWebFilter 可以用来检查用户是否登录,或者是否有权限访问某个资源。
2. 日志记录与审计: 在请求处理之前或之后记录日志,帮助了解应用程序的使用情况。
3. 请求重构: 修改请求数据,例如添加、删除或修改请求头或请求参数。
4. 响应处理: 修改响应,例如设置通用的响应头。
5. 性能监控: 记录处理请求所需的时间,用于性能分析。
6. 异常处理: 统一处理请求过程中抛出的异常。
1. 认证与授权AdditionalWebFilter 可以用来检查用户是否登录,或者是否有权限访问某个资源。
2. 日志记录与审计:在请求处理之前或之后记录日志,帮助了解应用程序的使用情况。
3. 请求重构:修改请求数据,例如添加、删除或修改请求头或请求参数。
4. 响应处理:修改响应,例如设置通用的响应头。
5. 性能监控:记录处理请求所需的时间,用于性能分析。
6. 异常处理:统一处理请求过程中抛出的异常。
7. ......
## 使用示例

View File

@@ -18,7 +18,7 @@ description: Halo 服务端为插件提供的扩展点接口
1. 实现扩展点接口,然后标记上 `@Component` 注解。
2. 对该扩展点的实现类进行 `ExtensionDefinition` 自定义模型对象的声明。
例如: 实现一个通知器的扩展,首先 `implements` ReactiveNotifier 扩展点接口:
例如:实现一个通知器的扩展,首先 `implements` ReactiveNotifier 扩展点接口:
```java
@Component

View File

@@ -197,7 +197,7 @@ addOptions() {
#### 3. Slash Command 扩展
Slash Command (斜杠命令)的扩展,可用于在当前行快捷执行功能操作,例如转换当前行为标题、在当前行添加代码块等功能。
Slash Command斜杠命令的扩展可用于在当前行快捷执行功能操作例如转换当前行为标题、在当前行添加代码块等功能。
![Slash Command 扩展](/img/developer-guide/plugin/extension-points/ui/default-editor-extension-slash-command.png)

View File

@@ -61,7 +61,7 @@ Halo 提供了一个用于插件开发的 DevTools它可以帮助你快速的
3. 启动成功后,可以看到如下日志输出:
```shell
Halo 初始化成功,访问: http://localhost:8090/console
Halo 初始化成功访问http://localhost:8090/console
用户名admin
密码admin
```

View File

@@ -9,7 +9,7 @@ description: 插件开发的准备工作
- 你能通过 [Docker 运行 Halo](../../getting-started/install/docker) 或在[开发环境运行 Halo](../core/run.md)。
- 你熟悉 Java Web 开发并掌握 [Spring Boot](https://spring.io/projects/spring-boot/) 框架。
- 你需要在计算机上安装最新的 LTS 版本的 Node.js如果你还没有Node.js安装你可以在这里下载 [Node.js 18 LTS](https://nodejs.org/)。
- 你需要在计算机上安装最新的 LTS 版本的 Node.js如果你还没有 Node.js 安装,你可以在这里下载 [Node.js 18 LTS](https://nodejs.org/)。
- 你熟悉 Vue 和 TypeScript。
- 你应该熟悉使用 Node.js 包管理器。
- Git 是一个版本控制系统,用于跟踪代码的更改,您需要 Git 来下载示例插件并发布插件。

View File

@@ -150,7 +150,7 @@ Halo 不提供对第三方应用程序的支持。作为插件的开发者,你
为了保持 Halo 生态系统的健康、可靠和安全,每次你对自己拥有的插件进行重大更新时,我们建议在遵循 [semantic versioning spec](http://semver.org/) 的基础上,
发布新版本。遵循语义版本控制规范有助于其他依赖你代码的开发人员了解给定版本的更改程度,并在必要时调整自己的代码。
我们建议你的包版本从1.0.0开始并递增,如下:
我们建议你的包版本从 1.0.0 开始并递增,如下:
| Code status | Stage | Rule | Example version |
| ----------------------------------------- | ------------- | -------------------------------------------- | --------------- |

View File

@@ -41,7 +41,7 @@ rules:
### 资源型规则 {#resource-rules}
资源型规则用于定义对资源的操作权限API 符合以下特征:
资源型规则用于定义对资源的操作权限API 符合以下特征
-`/api` 开头,且以 `/api/<version>/<resource>[/<resourceName>/<subresource>]` 规则组成 APIs最少路径层级为 3 即 `/api/<version>/<resource>`,最多路径层级为 5 即包含 `<resourceName>``<subresource>`,例如 `/api/v1/posts`
-`/apis/<group>/<version>/<resource>[/<resourceName>/<subresource>]` 规则组成的 APIs最少路径层级为 4 即 `/apis/<group>/<version>/<resource>`,最多路径层级为 6 即包含 `<resourceName>``<subresource>`,例如 `/apis/my-plugin.halo.run/v1alpha1/persons`
@@ -157,7 +157,7 @@ rules:
`verbs` 字段用于指定用户或服务在特定资源上能执行的操作类型。这些操作被定义为一组“动词”,每个动词与相应的 HTTP 请求方法相对应。为了更好地理解如何确定合适的 `verbs`,以下是详细的解释和每种动词的具体用途:
动词和对应的 HTTP 方法:
动词和对应的 HTTP 方法
- create: 对应 HTTP 的 POST 方法。用于创建一个新的资源实例,如果是创建子资源且不需要资源名称可以使用 `-` 表示缺省,如 `POST /apis/my-plugin.halo.run/v1alpha1/persons/-/subresource`,同时需要注意 `POST /apis/my-plugin.halo.run/v1alpha1/persons/{some-name}` 不是一个符合规范的 create 操作,创建资源不应该包含资源名称。
- get: 对应 HTTP 的 GET 方法。用于获取单个资源的详细信息,即 API 中包含 resourceName 部分如 `GET /apis/my-plugin.halo.run/v1alpha1/persons/zhangsan`
@@ -165,7 +165,7 @@ rules:
- watch: 也是对应 HTTP 的 GET 方法。用于实时监控资源或资源集合的变化,通常是通过 WebSocket 连接来实现的,如 `ws://localhost:8090/apis/my-plugin.halo.run/v1alpha1/persons`
- update: 对应 HTTP 的 PUT 方法。用于更新现有资源的全部内容。
- patch: 对应 HTTP 的 PATCH 方法。用于对现有资源进行部分更新。
- delete: 对应 HTTP 的 DELETE 方法。用于删除单个资源, 即 API 中包含 resourceName 部分如 `DELETE /apis/my-plugin.halo.run/v1alpha1/persons/zhangsan`
- delete: 对应 HTTP 的 DELETE 方法。用于删除单个资源即 API 中包含 resourceName 部分如 `DELETE /apis/my-plugin.halo.run/v1alpha1/persons/zhangsan`
- deletecollection: 同样对应 HTTP 的 DELETE 方法,但用于删除一个资源集合。
可以使用如下表格来简化理解:
@@ -208,4 +208,4 @@ subjects:
name: guqing
```
在 Halo 中,当你给一个用户分配角色后,实际上就是创建了一个 ”RoleBinding” 对象来完成的。
在 Halo 中当你给一个用户分配角色后实际上就是创建了一个”RoleBinding”对象来完成的。

View File

@@ -20,7 +20,7 @@ Halo 安装完成后,默认初始化了一篇 `Hello Halo` 文章,接下来
4. 确认无误后,点击弹框下方的 `发布` 按钮,我们的第一篇文章就成功发布了。
:::info
关于文章相关其他功能及文章各种设置项的说明,请参考《[用户指南-文章](../user-guide/posts.md)》章节
关于文章相关其他功能及文章各种设置项的说明,请参考《[用户指南 - 文章](../user-guide/posts.md)》章节
:::
## 查看文章

View File

@@ -11,7 +11,7 @@ description: 使用阿里云计算巢服务部署 Halo
![image.png](/img/install/alibab-cloud-computenest/deploy_1.jpg)
2. 参数填写完成后可以看到对应询价明细,确认参数后点击**下一步:确认订单**。确认订单完成后同意服务协议并点击**立即创建**进入部署阶段。
3. 等待部署完成后进入服务实例管理, 在控制台找到 Halo 服务访问链接。
3. 等待部署完成后进入服务实例管理在控制台找到 Halo 服务访问链接。
![image.png](/img/install/alibab-cloud-computenest/deploy_2.jpg)
4. 单击链接访问 Halo 服务。

View File

@@ -282,7 +282,7 @@ import DockerRegistryList from "./slots/_docker-registry-list.md"
## 反向代理
你可以在下面的反向代理软件中任选一项,我们假设你已经安装好了其中一项,并对其的基本操作有一定了解。 如果你对它们没有任何了解,可以参考我们更为详细的反向代理文档:
你可以在下面的反向代理软件中任选一项,我们假设你已经安装好了其中一项,并对其的基本操作有一定了解。如果你对它们没有任何了解,可以参考我们更为详细的反向代理文档:
1. 使用 [Nginx Proxy Manager](../install/other/nginxproxymanager.md)
2. 使用 [Traefik](../install/other/traefik.md)

View File

@@ -90,8 +90,8 @@ helm install halo halo/halo --set mysql.enabled=true --set postgresql.enabled=fa
:::info 参数说明
- `mysql.enabled=true` 自动安装 MySQL 数据库;
- `postgresql.enabled=false` 不自动安装 PostgreSQL 数据库;
- `mysql.enabled=true`:自动安装 MySQL 数据库;
- `postgresql.enabled=false`:不自动安装 PostgreSQL 数据库;
- 关于 mysql 的更多参数说明,请参考 [Bitnami MySQL Chart](https://github.com/bitnami/charts/tree/main/bitnami/mysql#parameters),在原有参数格式上增加 `mysql.` 前缀即可。
:::
@@ -113,8 +113,8 @@ helm install halo halo/halo \
:::info 参数说明
- `mysql.enabled=true` 不自动安装 MySQL 数据库;
- `postgresql.enabled=false` 不自动安装 PostgreSQL 数据库;
- `mysql.enabled=true`:不自动安装 MySQL 数据库;
- `postgresql.enabled=false`:不自动安装 PostgreSQL 数据库;
- `externalDatabase.platform=mysql`:外部数据库类型,例如 `postgresql``mysql`
- `externalDatabase.host=mysql`:外部数据库连接地址;
- `externalDatabase.port=3306`:外部数据库连接端口;

View File

@@ -266,7 +266,7 @@ journalctl -n 20 -u halo
## 反向代理
你可以在下面的反向代理软件中任选一项,我们假设你已经安装好了其中一项,并对其的基本操作有一定了解。 如果你对它们没有任何了解,可以参考我们更为详细的反向代理文档:
你可以在下面的反向代理软件中任选一项,我们假设你已经安装好了其中一项,并对其的基本操作有一定了解。如果你对它们没有任何了解,可以参考我们更为详细的反向代理文档:
1. 使用 [Nginx Proxy Manager](../install/other/nginxproxymanager.md)

View File

@@ -20,7 +20,7 @@ Halo 离线安装包使用 Docker + Docker Compose 的方式部署 Halo 及其
### 解压安装包
以 root 用户 ssh 登录到目标机器, 并执行如下命令:
以 root 用户 ssh 登录到目标机器并执行如下命令:
```bash
cd /tmp

View File

@@ -25,7 +25,7 @@ Nginx Proxy Manager 后台还可以一键申请 SSL 证书,并且会自动续
> 说明:默认你的服务器已经安装了 Docker 和 Docker Compose如果你没有安装可以参考[使用 Docker Compose 部署](../docker-compose) 的环境搭建部分来进行安装。
点击下方链接进入 Nginx Proxy Manager以下简称 NPM 官网:[https://nginxproxymanager.com/](https://nginxproxymanager.com/)
点击下方链接进入 Nginx Proxy Manager以下简称 NPM官网[https://nginxproxymanager.com/](https://nginxproxymanager.com/)
我们可以直接选择 [快速安装](https://nginxproxymanager.com/guide/#quick-setup)。
@@ -109,9 +109,9 @@ docker compose up -d # 如果你用的是 docker-compose-plugin 的话,用
- `Forward Hostname/IP` :填入服务器的 IP或者 Docker 容器内部的 IP如果 NPM 和 Halo 搭建在同一台服务器上的话)
- `Forward Port`:填入 Halo 映射出的端口,这边默认是 `8090`
- `Cache Assets` :缓存,可以选择打开
- `Block Common Exploits` 阻止常见的漏洞,可以选择打开
- `Block Common Exploits`:阻止常见的漏洞,可以选择打开
- `Websockets Support` WS 支持,可以选择打开
- `Access List` 这个是 NPM 自带的一个限制访问功能,这边我们不管,后续可以自行研究。
- `Access List`:这个是 NPM 自带的一个限制访问功能,这边我们不管,后续可以自行研究。
以下是一个样列:

View File

@@ -20,9 +20,9 @@ Podman 采用无守护进程的包容性架构,因此可以更安全、更简
为什么选择 Podman 而不是 Docker ?
这个需要视情况而定, 如果您的主机配置不是很高, 您使用 Docker 时, 因为 Docker 自带的守护进程可能会雪上加霜, 它会大量占用您的资源。
这个需要视情况而定如果您的主机配置不是很高您使用 Docker 时因为 Docker 自带的守护进程可能会雪上加霜它会大量占用您的资源。
而 Podman 采用无守护进程架构,而且容器是无根模式,您可以在占用资源极小的情况下运行镜像,并且获得很高的安全性。
而且 Podman 与 Docker 高度兼容,您不需要做特别配置即可将 Docker 容器运行在Podman 上。
而且 Podman 与 Docker 高度兼容,您不需要做特别配置即可将 Docker 容器运行在 Podman 上。
[什么是 Podman?](https://www.redhat.com/zh/topics/containers/what-is-podman)
@@ -40,15 +40,15 @@ Podman 采用无守护进程的包容性架构,因此可以更安全、更简
- Podman 安装文档:[https://podman.io/docs/installation](https://podman.io/docs/installation)
:::tip
我们推荐您先阅读 Podman 官方文档对 Podman 有了相关了解后再考虑通过Linux包管理系统安装 Podman 或者使用文档中指定的方式安装
我们推荐您先阅读 Podman 官方文档对 Podman 有了相关了解后,再考虑通过 Linux 包管理系统安装 Podman 或者使用文档中指定的方式安装。
:::
## 使用 Docker 镜像
:::tip
为什么是 Docker 镜像?
为什么是 Docker 镜像
通过[前言](#前言)我们已经了解了 Podman ,其中提到 ***Podman 与 Docker 高度兼容*** ,正是因为 Podman 完全是为了替代 Docker 而诞生,所以原本的 Docker 生态中的镜像我们可以无需更改直接使用。
通过[前言](#前言)我们已经了解了 Podman其中提到 ***Podman 与 Docker 高度兼容*** ,正是因为 Podman 完全是为了替代 Docker 而诞生,所以原本的 Docker 生态中的镜像我们可以无需更改直接使用。
:::
<DockerRegistryList />
@@ -115,7 +115,7 @@ Podman 没有和 Docker 类似的管理进程,在低配置的主机上更友
但是使用 Podman 想要开机后自动启动,官方推荐一种和 systemd 服务类似的语法文件,即 Podman Quadlet。
:::
下面是一个使用 Podstgresql 数据库的示例:
下面是一个使用 Podstgresql 数据库的示例
```bash
mkdir -p /opt/podman-data/halo
@@ -162,38 +162,38 @@ systemctl start halo
# 之后重启会自动启动不需要enable服务.
```
Podman Quadlet 解析:
Podman Quadlet 解析
`[Unit]` 部分:
`[Unit]` 部分
- WantsAfter字段指定了Halo在什么服务后启动。
- WantsAfter 字段指定了 Halo 在什么服务后启动。
`[Container]` 部分:
`[Container]` 部分
- `AutoUpdate=registry`指定了自动拉取容器。假设后续Halo镜像支持了`latest`标签,你需要`systemctl enable --now podman-auto-update.timer`以启用容器自动更新。本文示例`ghcr.io/halo-dev/halo:2.20`,将会自动更新适用与`2.20`版本的patch例如您创建容器时是`2.20.1`,在官方发布`2.20.2`版本时,容器会自动更新到`2.20.2`。
- `AutoUpdate=registry`指定了自动拉取容器。假设后续 Halo 镜像支持了`latest`标签,你需要`systemctl enable --now podman-auto-update.timer`以启用容器自动更新。本文示例`ghcr.io/halo-dev/halo:2.20`,将会自动更新适用与`2.20`版本的 patch例如您创建容器时是`2.20.1`,在官方发布`2.20.2`版本时,容器会自动更新到`2.20.2`。
- `ContainerName=`指定了 systemd 将生成的服务名称。
- `User=60000 Group=60000 UserNS=keep-id:uid=60000,gid=60000` 限制容器以 id 60000 的用户运行提高安全性。注意这个id 60000请根据你实际想要运行的用户名来修改可通过`id user`获得你的用户的id.
- `User=60000 Group=60000 UserNS=keep-id:uid=60000,gid=60000` 限制容器以 id 60000 的用户运行,提高安全性。注意这个 id 60000 请根据你实际想要运行的用户名来修改,可通过`id user`获得你的用户的 id.
- `Environment=`字段指定了容器的环境变量,其中你需要注意的是`Environment=HALO_WORK_DIR="/.halo"` `Environment=SPRING_CONFIG_LOCATION="optional:classpath:/;optional:file:/.halo/"`这两个变量中的`/.halo`路径。
- `Volume=`字段指定挂载到容器储存Halo配置文件的路径请仔细观察`/opt/podman-data/halo:/.halo`其中的`/.halo`要与上面需要注意的环境变量路径要一致。
- `PublishPort=`和docker -p命令一致即需要映射的端口。
- `Image=ghcr.io/halo-dev/halo` 即Docker镜像的地址注意要完整的。比如`ghcr.io`这个路径就不能少,如果你没有配置 Podman 的 registries 文件,此路径就必不可少,建议写全。
- `Exec=` 即附加到Halo容器的 Command ,具体变量参考上方的 DockerArgs 。多个变量以空格分开。
- `Volume=`字段指定挂载到容器储存 Halo 配置文件的路径,请仔细观察`/opt/podman-data/halo:/.halo`其中的`/.halo`要与上面需要注意的环境变量路径要一致。
- `PublishPort=`和 docker -p 命令一致,即需要映射的端口。
- `Image=ghcr.io/halo-dev/halo` 即 Docker 镜像的地址,注意要完整的。比如`ghcr.io`这个路径就不能少,如果你没有配置 Podman 的 registries 文件,此路径就必不可少,建议写全。
- `Exec=` 即附加到 Halo 容器的 Command具体变量参考上方的 DockerArgs。多个变量以空格分开。
`[Service]` 部分:
即原生systemd语法
`[Service]` 部分
即原生 systemd 语法
- `Restart` 指定遇到错误后总是重启容器
- `RestartSec` 重启的间隔时间
- `StartLimitInterval` 重启的次数,超过这个次数将不再重启。
- `TimeoutStartSec` 启动容器的超时时间,建议不要修改,因为每次开机后 Podman 将自动拉取容器,这时也许耗时会很长,这些时间是算在启动时间中的。如果定义太小的时间,可能将导致 Podman 无法拉取容器镜像。
- `TimeoutStopSec` 停止容器时的超时时间,`systemctl stop halo` 假设使用这个命令,如果停止时间超过了`TimeoutStopSec`定义的时间将会被系统Kill.
- `TimeoutStopSec` 停止容器时的超时时间,`systemctl stop halo` 假设使用这个命令,如果停止时间超过了`TimeoutStopSec`定义的时间,将会被系统 Kill.
`[Install]` 部分:
`[Install]` 部分
此部分请查看systemd文档不建议修改。
此部分请查看 systemd 文档,不建议修改。
使用默认的 root 用户运行时无需定义 `User=60000 Group=60000 UserNS=keep-id:uid=60000,gid=60000` 与 `Environment=HALO_WORK_DIR="/.halo"` `Environment=SPRING_CONFIG_LOCATION="optional:classpath:/;optional:file:/.halo/"`
示例:
示例
```bash
mkdir -p /opt/podman-data/halo

View File

@@ -27,9 +27,9 @@ Console 控制台是一个 Halo 站点的后台管理系统,只有具有权限
1. **全局搜索框**:点击或通过快捷键 `Ctrl+K` 可以呼出全局搜索框,输入关键字可以在所有文章、页面、附件、用户及设置项等所有内容中进行全局搜索。
2. **侧边导航栏**:对控制台提供的功能进行导航,点击导航栏条目会在页面右侧显示对应功能页面。安装某些插件可能会扩展导航栏条目。
3. **用户信息展示及操作**:展示当前登录用户的头像、名称及角色等信息,`···` 中提供更多用户相关操作。
4. **功能页面标题** 当前所在的功能页面标题。
4. **功能页面标题**:当前所在的功能页面标题。
5. **功能页面操作区域**:当前所在功能页面提供的功能操作按钮。
6. **功能页面主体** 当前所在功能页面的主体显示区域,显示内容及形式视具体页面功能而定。
6. **功能页面主体**:当前所在功能页面的主体显示区域,显示内容及形式视具体页面功能而定。
## 个人中心

View File

@@ -118,7 +118,7 @@ server {
```bash
# '-f' 滚动更新日志
# '-n 200' 从倒数第200行开始查看
# '-n 200' 从倒数第 200 行开始查看
# 更多帮助可以查看 'docker logs --help'
docker logs -f halo -n 200
```

View File

@@ -17,4 +17,4 @@ description: 页面管理相关功能说明
#### 页面操作
对于页面的新建、设置、发布及删除等操作,与文章操作基本一致,具体操作请参考[《用户指南-文章》](./posts.md)章节,此处不再赘述。
对于页面的新建、设置、发布及删除等操作,与文章操作基本一致,具体操作请参考[《用户指南 - 文章》](./posts.md)章节,此处不再赘述。

View File

@@ -38,8 +38,8 @@ Halo 支持通过插件来拓展文章编辑器,目前除了 Halo 内置的编
- **分类目录**:文章所属分类,方便用户区分文章类型进行针对性浏览,一篇文章可以属于多个分类。
- **标签**:文章添加的标签,方便用户更进一步标识文章信息,一篇文章可以添加多个标签。
- **自动生成摘要**:文章摘要是对文章内容的概括性描述。
- **是** 系统根据文章内容,自动生成一段摘要。
- **否** 用户自行输入文章摘要文本。
- **是**:系统根据文章内容,自动生成一段摘要。
- **否**:用户自行输入文章摘要文本。
- **自定义摘要**:用户自行输入的文章摘要文本,仅当 `自动生成摘要` 为否时生效。
- **允许评论**:是否允许用户在主题端浏览文章时对该文章发起评论。
- **是否置顶**:文章是否排序在文章列表的最顶部。

View File

@@ -51,7 +51,7 @@ Halo 提供了以下站点基本信息设置:
- **站点关键词**:格式为以 `,` 分隔的关键词列表,配置后会在所有页面 HTML 源码的 head 部分添加:
```html
<meta name="keywords" content="{关键词 A,关键词 B}" />
<meta name="keywords" content="{关键词 A, 关键词 B}" />
```
:::warning 注意
@@ -119,7 +119,7 @@ Halo 提供了以下站点基本信息设置:
## 通知设置
从 2.10.0 版本开始, Halo 提供了 **通知** 功能当有新的评论、留言、回复等事件发生时Halo 会通过配置的方式通知站长或者相关用户。同时,个人中心配置的电子邮箱也会作为通知的接收邮箱。
从 2.10.0 版本开始Halo 提供了 **通知** 功能当有新的评论、留言、回复等事件发生时Halo 会通过配置的方式通知站长或者相关用户。同时,个人中心配置的电子邮箱也会作为通知的接收邮箱。
### 邮件通知