chore: use markdownlint and add pre commit hook (#41)

Signed-off-by: Ryan Wang <i@ryanc.cc>
JohnNiang-patch-1
Ryan Wang 3 years ago committed by GitHub
parent 251729f565
commit 7e023448fc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -0,0 +1,4 @@
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
pnpm lint

@ -0,0 +1,8 @@
{
"MD033": false,
"MD024": false,
"MD029": false,
"MD010": { "code_blocks": true, "spaces_per_tab": 4 },
"MD046": { "style": "fenced" },
"line-length": false
}

@ -0,0 +1,3 @@
{
"recommendations": ["davidanson.vscode-markdownlint"]
}

@ -0,0 +1,5 @@
{
"[markdown]": {
"editor.defaultFormatter": "DavidAnson.vscode-markdownlint"
}
}

@ -9,7 +9,7 @@ description: 问题反馈渠道及指南
## GitHub Issues ## GitHub Issues
链接https://github.com/halo-dev/halo/issues 链接:<https://github.com/halo-dev/halo/issues>
如果你在使用过程中,遇到了一些 bug 或者需要添加某些新特性,请尽量在 GitHub Issues 进行反馈,这非常有助于我们跟踪解决此问题,您也可以很方便的接收到处理状态。 如果你在使用过程中,遇到了一些 bug 或者需要添加某些新特性,请尽量在 GitHub Issues 进行反馈,这非常有助于我们跟踪解决此问题,您也可以很方便的接收到处理状态。
@ -23,6 +23,6 @@ description: 问题反馈渠道及指南
## Halo 官方社区 ## Halo 官方社区
链接https://bbs.halo.run 链接:<https://bbs.halo.run>
此平台主要目的用于与其他 Halo 用户进行交流。但如果您对 GitHub 不是很熟悉或者没有账号,您也可以在此平台进行反馈。 此平台主要目的用于与其他 Halo 用户进行交流。但如果您对 GitHub 不是很熟悉或者没有账号,您也可以在此平台进行反馈。

@ -9,7 +9,7 @@ description: 开发环境的一些说明
2. 工具:[Gradle](https://gradle.org/)[Lombok](https://projectlombok.org/) 插件 2. 工具:[Gradle](https://gradle.org/)[Lombok](https://projectlombok.org/) 插件
3. JDK`11+` 3. JDK`11+`
> 推荐 IntelliJ IDEA 社区版开源免费https://github.com/JetBrains/intellij-community > 推荐 IntelliJ IDEA 社区版(开源免费)<https://github.com/JetBrains/intellij-community>
`Halo` 项目使用了 `Lombok`,运行 `Halo` 之前请检查 `IDE` 是否已经安装好了 `Lombok` 插件。 `Halo` 项目使用了 `Lombok`,运行 `Halo` 之前请检查 `IDE` 是否已经安装好了 `Lombok` 插件。

@ -31,11 +31,6 @@ description: Halo 项目的构成
在开发的时候,希望大家能够在 `~/halo-dev/application.yml` 中进行添加自定义配置。当然后面也会讲到如何用`运行参数` 和 `VM options` 进行控制配置,届时可根据具体情况进行选择。 在开发的时候,希望大家能够在 `~/halo-dev/application.yml` 中进行添加自定义配置。当然后面也会讲到如何用`运行参数` 和 `VM options` 进行控制配置,届时可根据具体情况进行选择。
:::warning
<article class="message is-warning">
<div class="message-body">
开发的时候,我们不建议直接更改`项目源码`中的所包含的`配置文件`,包括 `application.yml`、`application-dev.yml`、`application-test.yml` 和 `application-user.yml` 开发的时候,我们不建议直接更改`项目源码`中的所包含的`配置文件`,包括 `application.yml`、`application-dev.yml`、`application-test.yml` 和 `application-user.yml`
:::
</div>
</article>

@ -5,16 +5,15 @@ description: 系统提供的一些全局变量
## 博客地址 ## 博客地址
``` ```html
${blog_url!} ${blog_url!}
``` ```
此变量与后台博客设置中的 `博客地址` 相对应。 此变量与后台博客设置中的 `博客地址` 相对应。
## 网站根路径 ## 网站根路径
``` ```html
${context!} ${context!}
``` ```
@ -24,12 +23,12 @@ ${context!}
假设,我设置的 `博客地址``https://halo.run`,那么: 假设,我设置的 `博客地址``https://halo.run`,那么:
- 全局绝对路径为开启的状态下https://halo.run/ - 全局绝对路径为开启的状态下:<https://halo.run/>
- 全局绝对路径为关闭的状态下:/ - 全局绝对路径为关闭的状态下:/
## 主题资源根路径 ## 主题资源根路径
``` ```html
${theme_base!} ${theme_base!}
``` ```
@ -37,7 +36,7 @@ ${theme_base!}
举个例子,你当前开发的主题为 `anatole`,当你要获取主题下 `css/style.css` 这个文件的路径,那么: 举个例子,你当前开发的主题为 `anatole`,当你要获取主题下 `css/style.css` 这个文件的路径,那么:
``` ```html
${theme_base!}/css/style.css ${theme_base!}/css/style.css
``` ```
@ -45,25 +44,25 @@ ${theme_base!}/css/style.css
主题名称: 主题名称:
``` ```html
${theme.name!} ${theme.name!}
``` ```
主题 git 仓库地址: 主题 git 仓库地址:
``` ```html
${theme.repo!} ${theme.repo!}
``` ```
主题版本号: 主题版本号:
``` ```html
${theme.version!} ${theme.version!}
``` ```
## 博客标题 ## 博客标题
``` ```html
${blog_title!} ${blog_title!}
``` ```
@ -71,7 +70,7 @@ ${blog_title!}
## 博客 Logo ## 博客 Logo
``` ```html
${blog_logo!} ${blog_logo!}
``` ```
@ -79,7 +78,7 @@ ${blog_logo!}
## Halo 版本 ## Halo 版本
``` ```html
${version!} ${version!}
``` ```
@ -89,37 +88,37 @@ ${version!}
昵称: 昵称:
``` ```html
${user.nickname!} ${user.nickname!}
``` ```
邮箱地址: 邮箱地址:
``` ```html
${user.email!} ${user.email!}
``` ```
描述: 描述:
``` ```html
${user.description!} ${user.description!}
``` ```
头像地址: 头像地址:
``` ```html
${user.avatar!} ${user.avatar!}
``` ```
上次登录时间: 上次登录时间:
``` ```html
${user.expireTime!} ${user.expireTime!}
``` ```
## SEO 关键词 ## SEO 关键词
``` ```html
${meta_keywords!} ${meta_keywords!}
``` ```
@ -132,16 +131,15 @@ ${meta_keywords!}
## SEO 描述 ## SEO 描述
``` ```html
${meta_description!} ${meta_description!}
``` ```
需要注意的是,虽然这个变量在任何页面都可以使用,但是其值可能在不同的页面是不一样的。会根据用户的设置,生成对应的值。 需要注意的是,虽然这个变量在任何页面都可以使用,但是其值可能在不同的页面是不一样的。会根据用户的设置,生成对应的值。
## RSS 2.0 订阅地址 ## RSS 2.0 订阅地址
``` ```html
${rss_url!} ${rss_url!}
``` ```
@ -149,7 +147,7 @@ ${rss_url!}
## Atom 格式的订阅地址 ## Atom 格式的订阅地址
``` ```html
${atom_url!} ${atom_url!}
``` ```
@ -157,7 +155,7 @@ ${atom_url!}
## Xml 格式的网站地图地址 ## Xml 格式的网站地图地址
``` ```html
${sitemap_xml_url!} ${sitemap_xml_url!}
``` ```
@ -165,7 +163,7 @@ ${sitemap_xml_url!}
## HTML 格式的网站地图地址 ## HTML 格式的网站地图地址
``` ```html
${sitemap_html_url!} ${sitemap_html_url!}
``` ```
@ -173,7 +171,7 @@ ${sitemap_html_url!}
## 友情链接页面地址 ## 友情链接页面地址
``` ```html
${links_url!} ${links_url!}
``` ```
@ -184,7 +182,7 @@ ${links_url!}
## 图库页面地址 ## 图库页面地址
``` ```html
${photos_url!} ${photos_url!}
``` ```
@ -195,7 +193,7 @@ ${photos_url!}
## 日志页面地址 ## 日志页面地址
``` ```html
${journals_url!} ${journals_url!}
``` ```
@ -206,7 +204,7 @@ ${journals_url!}
## 文章归档页面地址 ## 文章归档页面地址
``` ```html
${archives_url!} ${archives_url!}
``` ```
@ -217,7 +215,7 @@ ${archives_url!}
## 分类列表页面地址 ## 分类列表页面地址
``` ```html
${categories_url!} ${categories_url!}
``` ```
@ -228,7 +226,7 @@ ${categories_url!}
## 标签列表页面地址 ## 标签列表页面地址
``` ```html
${tags_url!} ${tags_url!}
``` ```

@ -44,7 +44,7 @@ Halo 的运行可参考上述 [系统开发](/developer-guide/core/prepare)
> 为了让开发更加规范,我们推荐使用以下的目录结构。 > 为了让开发更加规范,我们推荐使用以下的目录结构。
``` ```txt
├── module // 公共模板目录 ├── module // 公共模板目录
│   ├── comment.ftl // 比如:评论模板 │   ├── comment.ftl // 比如:评论模板
│   ├── layout.ftl // 比如:布局模板 │   ├── layout.ftl // 比如:布局模板

@ -29,12 +29,10 @@ description: 系统提供的一些宏模板
> 需要注意的是,为了保证系统功能的完整性,我们强制要求在每个页面的尾部必须包含此模板。 > 需要注意的是,为了保证系统功能的完整性,我们强制要求在每个页面的尾部必须包含此模板。
```html ```html
<@global.footer /> <@global.footer />
``` ```
等同于: 等同于:
```html ```html
@ -51,7 +49,6 @@ description: 系统提供的一些宏模板
x 年前/x 个月前/x 天前/昨天/x 小时前/x 分钟前/x 秒前/刚刚 x 年前/x 个月前/x 天前/昨天/x 小时前/x 分钟前/x 秒前/刚刚
``` ```
## 评论模块 ## 评论模块
```html ```html
@ -73,23 +70,22 @@ x 年前/x 个月前/x 天前/昨天/x 小时前/x 分钟前/x 秒前/刚刚
- targetpost / sheet / journal 对象 - targetpost / sheet / journal 对象
- type评论类型可为post / sheet / journal - type评论类型可为post / sheet / journal
例子: 例子:
在文章页面post.ftl or post_xxx.ftl 在文章页面post.ftl or post_xxx.ftl
``` ```html
<@global.comment target=post type="post" /> <@global.comment target=post type="post" />
``` ```
在自定义页面sheet.ftl or post_sheet.ftl 在自定义页面sheet.ftl or post_sheet.ftl
``` ```html
<@global.comment target=sheet type="sheet" /> <@global.comment target=sheet type="sheet" />
``` ```
在日志页面journals.ftl 在日志页面journals.ftl
``` ```html
<@global.comment target=journal type="journal" /> <@global.comment target=journal type="journal" />
``` ```

@ -411,7 +411,6 @@ archives(year):
archives(month): archives(month):
```json ```json
[{ [{
"month": 0, "month": 0,
@ -1751,7 +1750,7 @@ links:
teams: teams:
``` ```json
[{ [{
"team": "string", "team": "string",
"links": [{ "links": [{
@ -1834,7 +1833,7 @@ teams:
teams: teams:
``` ```json
[{ [{
"team": "string", "team": "string",
"links": [{ "links": [{
@ -2149,7 +2148,7 @@ count: long
1. methodindex 1. methodindex
2. page当前页通过 `${posts.number}` 得到 2. page当前页通过 `${posts.number}` 得到
3. total总页数通过 `${posts.totalPages}` 得到 3. total总页数通过 `${posts.totalPages}` 得到
3. display页码展示数量 4. display页码展示数量
#### 返回参数 #### 返回参数
@ -2236,7 +2235,7 @@ pagination
1. methodarchives 1. methodarchives
2. page当前页通过 `${posts.number}` 得到 2. page当前页通过 `${posts.number}` 得到
3. total总页数通过 `${posts.totalPages}` 得到 3. total总页数通过 `${posts.totalPages}` 得到
3. display页码展示数量 4. display页码展示数量
#### 返回参数 #### 返回参数
@ -2411,8 +2410,8 @@ pagination
1. methodtagPosts 1. methodtagPosts
2. page当前页通过 `${posts.number}` 得到 2. page当前页通过 `${posts.number}` 得到
3. total总页数通过 `${posts.totalPages}` 得到 3. total总页数通过 `${posts.totalPages}` 得到
3. display页码展示数量 4. display页码展示数量
4. slug标签 slug 5. slug标签 slug
#### 返回参数 #### 返回参数
@ -2499,8 +2498,8 @@ pagination
1. methodcategoryPosts 1. methodcategoryPosts
2. page当前页通过 `${posts.number}` 得到 2. page当前页通过 `${posts.number}` 得到
3. total总页数通过 `${posts.totalPages}` 得到 3. total总页数通过 `${posts.totalPages}` 得到
3. display页码展示数量 4. display页码展示数量
4. slug标签 slug 5. slug标签 slug
#### 返回参数 #### 返回参数
@ -2587,7 +2586,7 @@ pagination
1. methodphotos 1. methodphotos
2. page当前页通过 `${photos.number}` 得到 2. page当前页通过 `${photos.number}` 得到
3. total总页数通过 `${photos.totalPages}` 得到 3. total总页数通过 `${photos.totalPages}` 得到
3. display页码展示数量 4. display页码展示数量
#### 返回参数 #### 返回参数
@ -2674,7 +2673,7 @@ pagination
1. methodjournals 1. methodjournals
2. page当前页通过 `${journals.number}` 得到 2. page当前页通过 `${journals.number}` 得到
3. total总页数通过 `${journals.totalPages}` 得到 3. total总页数通过 `${journals.totalPages}` 得到
3. display页码展示数量 4. display页码展示数量
#### 返回参数 #### 返回参数

@ -12,9 +12,11 @@ Halo 的配置文件名为 `application.yaml`,其必须位于[工作目录](/g
如下将详细列出配置文件 `application.yaml` 中所有的配置项。 如下将详细列出配置文件 `application.yaml` 中所有的配置项。
## 基础配置 ## 基础配置
基础配置中的配置设置一般来说是**必要的**,且必须在 application.yaml 里进行定义。 基础配置中的配置设置一般来说是**必要的**,且必须在 application.yaml 里进行定义。
### 端口 ### 端口
用于指定 HTTP 服务器监听的端口Halo 默认设置为 `8090` 用于指定 HTTP 服务器监听的端口Halo 默认设置为 `8090`
```yaml ```yaml
@ -25,6 +27,7 @@ server:
请注意,如果您选择设置端口为 `80`,则需要确保您的 80 端口未被占用,通常**不建议**直接设置为 80 端口。 请注意,如果您选择设置端口为 `80`,则需要确保您的 80 端口未被占用,通常**不建议**直接设置为 80 端口。
### 数据库 ### 数据库
Halo 目前支持 `H2``MySQL` 数据库。 Halo 目前支持 `H2``MySQL` 数据库。
:::tip :::tip
@ -88,9 +91,11 @@ create database halodb character set utf8mb4 collate utf8mb4_bin;
- 默认时区为 `Asia/Shanghai`,如果与您所在时区不一致,则可以修改为您所在的时区。 - 默认时区为 `Asia/Shanghai`,如果与您所在时区不一致,则可以修改为您所在的时区。
## 高级配置 ## 高级配置
高级配置中的配置设置是可选的,如果不需要,可以略过。 高级配置中的配置设置是可选的,如果不需要,可以略过。
### 后台路径 ### 后台路径
Halo 支持自定义后台管理的**根路径**。 Halo 支持自定义后台管理的**根路径**。
```yaml ```yaml
@ -102,6 +107,7 @@ halo:
注意:仅为改动后台管理的根路径,因此前后不带 `/` 注意:仅为改动后台管理的根路径,因此前后不带 `/`
### 缓存 ### 缓存
某些情况下,需要用户根据需求来设置缓存数据的保存方式,例如将缓存数据持久化保存在本地。 某些情况下,需要用户根据需求来设置缓存数据的保存方式,例如将缓存数据持久化保存在本地。
```yaml ```yaml
@ -111,10 +117,12 @@ halo:
``` ```
目前支持两种策略: 目前支持两种策略:
- `memory` 将数据缓存至内存,重启服务缓存将清空。 - `memory` 将数据缓存至内存,重启服务缓存将清空。
- `level` 将数据缓存至本地,重启服务不会清空缓存。 - `level` 将数据缓存至本地,重启服务不会清空缓存。
### 压缩 ### 压缩
启用压缩对于减少带宽和加快页面加载非常有用,在**未使用** `Nginx``Caddy` 等反向代理服务器时(反向代理服务器通常是默认开启 Gzip 的可以考虑开启系统自带的Gzip 功能。 启用压缩对于减少带宽和加快页面加载非常有用,在**未使用** `Nginx``Caddy` 等反向代理服务器时(反向代理服务器通常是默认开启 Gzip 的可以考虑开启系统自带的Gzip 功能。
```yaml ```yaml

@ -8,36 +8,43 @@ description: 使用 Docker 部署
::: :::
## 使用 Docker 镜像 ## 使用 Docker 镜像
Halo 在 Docker Hub 上发布的镜像为 [halohub/halo](https://hub.docker.com/r/halohub/halo) Halo 在 Docker Hub 上发布的镜像为 [halohub/halo](https://hub.docker.com/r/halohub/halo)
1. 创建[工作目录](/getting-started/prepare#工作目录) 1. 创建[工作目录](/getting-started/prepare#工作目录)
```bash ```bash
mkdir ~/.halo && cd ~/.halo mkdir ~/.halo && cd ~/.halo
``` ```
2. 下载示例配置文件到[工作目录](/getting-started/prepare#工作目录) 2. 下载示例配置文件到[工作目录](/getting-started/prepare#工作目录)
```bash ```bash
wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml
``` ```
3. 编辑配置文件,配置数据库或者端口等,如需配置请参考[参考配置](/getting-started/config) 3. 编辑配置文件,配置数据库或者端口等,如需配置请参考[参考配置](/getting-started/config)
```bash ```bash
vim application.yaml vim application.yaml
``` ```
4. 拉取最新的 Halo 镜像 4. 拉取最新的 Halo 镜像
```bash ```bash
docker pull halohub/halo:1.4.17 docker pull halohub/halo:1.4.17
``` ```
:::info :::info
查看最新版本镜像https://hub.docker.com/r/halohub/halo ,我们推荐使用具体版本号的镜像,但也提供了 `latest` 标签的镜像,它始终是最新的。 查看最新版本镜像:<https://hub.docker.com/r/halohub/halo> ,我们推荐使用具体版本号的镜像,但也提供了 `latest` 标签的镜像,它始终是最新的。
::: :::
5. 创建容器 5. 创建容器
```bash ```bash
docker run -it -d --name halo -p 8090:8090 -v ~/.halo:/root/.halo --restart=unless-stopped halohub/halo:1.4.17 docker run -it -d --name halo -p 8090:8090 -v ~/.halo:/root/.halo --restart=unless-stopped halohub/halo:1.4.17
``` ```
- **-it** 开启输入功能并连接伪终端 - **-it** 开启输入功能并连接伪终端
- **-d** 后台运行容器 - **-d** 后台运行容器
- **--name** 为容器指定一个名称 - **--name** 为容器指定一个名称
@ -78,7 +85,7 @@ server {
### Caddy 1.x ### Caddy 1.x
``` ```txt
https://www.yourdomain.com { https://www.yourdomain.com {
gzip gzip
tls your@email.com tls your@email.com
@ -90,7 +97,7 @@ https://www.yourdomain.com {
### Caddy 2.x ### Caddy 2.x
``` ```txt
www.yourdomain.com www.yourdomain.com
encode gzip encode gzip
@ -98,4 +105,4 @@ encode gzip
reverse_proxy 127.0.0.1:8090 reverse_proxy 127.0.0.1:8090
``` ```
以上配置都可以在 https://github.com/halo-dev/halo-common 找到。 以上配置都可以在 <https://github.com/halo-dev/halo-common> 找到。

@ -8,6 +8,7 @@ description: 在Linux上快速安装Halo
::: :::
## 依赖检查 ## 依赖检查
目前运行 Halo 的最低依赖要求为 JRE 11请务必确保在进行下面操作之前已经正确安装了 JRE。 目前运行 Halo 的最低依赖要求为 JRE 11请务必确保在进行下面操作之前已经正确安装了 JRE。
目前介绍两种 Linux 发行版的安装方式,均为 OpenJRE不推荐 Oracle 版本。 目前介绍两种 Linux 发行版的安装方式,均为 OpenJRE不推荐 Oracle 版本。
@ -61,32 +62,37 @@ OpenJDK 64-Bit Server VM (build 11.0.10+9-Ubuntu-0ubuntu1.20.04, mixed mode)
::: :::
创建一个名为 halo 的用户(名字可以随意) 创建一个名为 halo 的用户(名字可以随意)
```bash ```bash
useradd -m halo useradd -m halo
``` ```
给予 sudo 权限 给予 sudo 权限
```bash ```bash
usermod -aG wheel halo usermod -aG wheel halo
``` ```
为 halo 用户创建密码 为 halo 用户创建密码
```bash ```bash
passwd halo passwd halo
``` ```
登录到 halo 账户 登录到 halo 账户
```bash ```bash
su - halo su - halo
``` ```
2. 创建存放 [运行包](/getting-started/prepare#运行包) 的目录,这里以 `~/app` 为例 2. 创建存放 [运行包](/getting-started/prepare#运行包) 的目录,这里以 `~/app` 为例
``` ```bash
mkdir ~/app && cd ~/app mkdir ~/app && cd ~/app
``` ```
3. 下载运行包 3. 下载运行包
```bash ```bash
wget https://dl.halo.run/release/halo-1.4.17.jar -O halo.jar wget https://dl.halo.run/release/halo-1.4.17.jar -O halo.jar
``` ```
@ -102,26 +108,31 @@ mkdir ~/.halo && cd ~/.halo
``` ```
5. 下载示例配置文件到 [工作目录](/getting-started/prepare#工作目录) 5. 下载示例配置文件到 [工作目录](/getting-started/prepare#工作目录)
```bash ```bash
wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml
``` ```
6. 编辑配置文件,配置数据库或者端口等,如需配置请参考 [参考配置](/getting-started/config) 6. 编辑配置文件,配置数据库或者端口等,如需配置请参考 [参考配置](/getting-started/config)
```bash ```bash
vim application.yaml vim application.yaml
``` ```
7. 测试运行 Halo 7. 测试运行 Halo
```bash ```bash
cd ~/app && java -jar halo.jar cd ~/app && java -jar halo.jar
``` ```
8. 如看到类似以下日志输出,则代表启动成功。 8. 如看到类似以下日志输出,则代表启动成功。
```bash ```bash
run.halo.app.listener.StartedListener : Halo started at http://127.0.0.1:8090 run.halo.app.listener.StartedListener : Halo started at http://127.0.0.1:8090
run.halo.app.listener.StartedListener : Halo admin started at http://127.0.0.1:8090/admin run.halo.app.listener.StartedListener : Halo admin started at http://127.0.0.1:8090/admin
run.halo.app.listener.StartedListener : Halo has started successfully! run.halo.app.listener.StartedListener : Halo has started successfully!
``` ```
打开 `http://ip: 端口号` 即可看到安装引导界面。 打开 `http://ip: 端口号` 即可看到安装引导界面。
:::info :::info
@ -143,16 +154,19 @@ exit
``` ```
2. 下载 Halo 官方的 halo.service 模板 2. 下载 Halo 官方的 halo.service 模板
```bash ```bash
wget https://dl.halo.run/config/halo.service -O /etc/systemd/system/halo.service wget https://dl.halo.run/config/halo.service -O /etc/systemd/system/halo.service
``` ```
3. 修改 halo.service 3. 修改 halo.service
```bash ```bash
vim /etc/systemd/system/halo.service vim /etc/systemd/system/halo.service
``` ```
4. 修改配置 4. 修改配置
- **YOUR_JAR_PATH**Halo 运行包的绝对路径,例如 `/home/halo/app/halo.jar`,注意:此路径不支持 `~` 符号。 - **YOUR_JAR_PATH**Halo 运行包的绝对路径,例如 `/home/halo/app/halo.jar`,注意:此路径不支持 `~` 符号。
- **USER**:运行 Halo 的系统用户,如果有按照上方教程创建新的用户来运行 Halo修改为你创建的用户名称即可。反之请删除 `User=USER` - **USER**:运行 Halo 的系统用户,如果有按照上方教程创建新的用户来运行 Halo修改为你创建的用户名称即可。反之请删除 `User=USER`
@ -182,21 +196,25 @@ WantedBy=multi-user.target
::: :::
5. 重新加载 systemd 5. 重新加载 systemd
```bash ```bash
systemctl daemon-reload systemctl daemon-reload
``` ```
6. 运行服务 6. 运行服务
```bash ```bash
systemctl start halo systemctl start halo
``` ```
7. 在系统启动时启动服务 7. 在系统启动时启动服务
```bash ```bash
systemctl enable halo systemctl enable halo
``` ```
您可以查看服务日志检查启动状态 您可以查看服务日志检查启动状态
```bash ```bash
journalctl -n 20 -u halo journalctl -n 20 -u halo
``` ```
@ -230,7 +248,7 @@ server {
### Caddy 1.x ### Caddy 1.x
``` ```txt
https://www.yourdomain.com { https://www.yourdomain.com {
gzip gzip
tls your@email.com tls your@email.com
@ -242,7 +260,7 @@ https://www.yourdomain.com {
### Caddy 2.x ### Caddy 2.x
``` ```txt
www.yourdomain.com www.yourdomain.com
encode gzip encode gzip
@ -250,4 +268,4 @@ encode gzip
reverse_proxy 127.0.0.1:8090 reverse_proxy 127.0.0.1:8090
``` ```
以上配置都可以在 https://github.com/halo-dev/halo-common 找到。 以上配置都可以在 <https://github.com/halo-dev/halo-common> 找到。

@ -86,7 +86,7 @@ docker run --name some-mysql -v ~/.halo/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSW
5. 创建 `Halo` 工作目录 5. 创建 `Halo` 工作目录
``` ```bash
mkdir ~/.halo && cd ~/.halo mkdir ~/.halo && cd ~/.halo
``` ```
@ -140,7 +140,7 @@ docker network connect halo-net some-mysql
3. 同之前一样创建 `Halo` 工作目录 3. 同之前一样创建 `Halo` 工作目录
``` ```bash
mkdir ~/.halo && cd ~/.halo mkdir ~/.halo && cd ~/.halo
``` ```

@ -15,7 +15,7 @@ description: 使用 OneinStack 的 vhost 脚本创建 Halo 站点的 Nginx 配
点击下方链接进入 OneinStack 官网,仅选择 `安装 Nginx`,其他的都可以取消选择。 点击下方链接进入 OneinStack 官网,仅选择 `安装 Nginx`,其他的都可以取消选择。
https://oneinstack.com/auto <https://oneinstack.com/auto>
最后点击 `复制安装命令` 到服务器执行即可。如果你仅安装 Nginx你的链接应该是这样 最后点击 `复制安装命令` 到服务器执行即可。如果你仅安装 Nginx你的链接应该是这样
@ -260,14 +260,14 @@ nginx -t
如果输出如下提示则代表配置有效: 如果输出如下提示则代表配置有效:
``` ```bash
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
``` ```
重载 Nginx 配置: 重载 Nginx 配置:
``` ```bash
nginx -s reload nginx -s reload
``` ```

@ -14,13 +14,13 @@ description: 使用腾讯云 CloudBase 一键部署
1. 系统使用内置的 H2 Database暂不支持使用 MySQL。 1. 系统使用内置的 H2 Database暂不支持使用 MySQL。
1. 工作目录保存在腾讯云提供的 CFS 上,在使用此方式创建应用的时候会要求创建 CFS。 1. 工作目录保存在腾讯云提供的 CFS 上,在使用此方式创建应用的时候会要求创建 CFS。
1. 目前使用该方式部署,不支持修改 [配置文件](/getting-started/config)。 1. 目前使用该方式部署,不支持修改 [配置文件](/getting-started/config)。
1. 费用相关请参考 https://cloud.tencent.com/document/product/876/18864 1. 费用相关请参考 <https://cloud.tencent.com/document/product/876/18864>
## 进入云开发页面 ## 进入云开发页面
点击下方按钮即可进入到腾讯云云开发 CloudBase 创建应用界面,此按钮可在云开发页面自动选择 Halo 的配置模板。 点击下方按钮即可进入到腾讯云云开发 CloudBase 创建应用界面,此按钮可在云开发页面自动选择 Halo 的配置模板。
[![](https://main.qcloudimg.com/raw/67f5a389f1ac6f3b4d04c7256438e44f.svg)](https://console.cloud.tencent.com/tcb/env/index?action=CreateAndDeployCloudBaseProject&appUrl=https%3A%2F%2Fgithub.com%2Fhalo-dev%2Ftencent-cloudbase-halo&branch=master) [![CloudBase](https://main.qcloudimg.com/raw/67f5a389f1ac6f3b4d04c7256438e44f.svg)](https://console.cloud.tencent.com/tcb/env/index?action=CreateAndDeployCloudBaseProject&appUrl=https%3A%2F%2Fgithub.com%2Fhalo-dev%2Ftencent-cloudbase-halo&branch=master)
## 配置并部署 ## 配置并部署
@ -48,7 +48,7 @@ description: 使用腾讯云 CloudBase 一键部署
![tencent-cloudbase-6.png](/img/tencent-cloudbase/tencent-cloudbase-6.png) ![tencent-cloudbase-6.png](/img/tencent-cloudbase/tencent-cloudbase-6.png)
**Halo 初始化页面** **Halo 初始化页面**
![tencent-cloudbase-7.png](/img/tencent-cloudbase/tencent-cloudbase-7.png) ![tencent-cloudbase-7.png](/img/tencent-cloudbase/tencent-cloudbase-7.png)
@ -77,4 +77,3 @@ description: 使用腾讯云 CloudBase 一键部署
- [Halo 配置文件仓库](https://github.com/halo-dev/tencent-cloudbase-halo) - [Halo 配置文件仓库](https://github.com/halo-dev/tencent-cloudbase-halo)
- [腾讯云 CloudBase](https://console.cloud.tencent.com/tcb/env/index) - [腾讯云 CloudBase](https://console.cloud.tencent.com/tcb/env/index)
- [云开发使用指南](https://cloud.tencent.com/document/product/876) - [云开发使用指南](https://cloud.tencent.com/document/product/876)

@ -6,13 +6,15 @@ title: 在 Windows 服务器上部署
在继续操作之前,我们推荐您先阅读[《写在前面》](/getting-started/prepare),这可以快速帮助你了解 Halo。 在继续操作之前,我们推荐您先阅读[《写在前面》](/getting-started/prepare),这可以快速帮助你了解 Halo。
::: :::
# 系统要求 ## 系统要求
目前运行 Halo 的最低依赖要求为 JRE 11而 Java9 之后将不再提供 32 位系统的环境,因此请确保您的服务器属于 64 位 CPU。 目前运行 Halo 的最低依赖要求为 JRE 11而 Java9 之后将不再提供 32 位系统的环境,因此请确保您的服务器属于 64 位 CPU。
# 依赖检查 ## 依赖检查
如下将介绍在 Windows 下安装 OpenJRE 11 的方式。如果您的服务器已经安装过 OpenJRE 11则可以直接跳过本节。 如下将介绍在 Windows 下安装 OpenJRE 11 的方式。如果您的服务器已经安装过 OpenJRE 11则可以直接跳过本节。
1. 使用浏览器前往 https://developers.redhat.com/content-gateway/file/java-11-openjdk-jre-11.0.10.9-1.windows.redhat.x86_64.msi 下载 OpenJRE 11 的可执行程序。 1. 使用浏览器前往 <https://developers.redhat.com/content-gateway/file/java-11-openjdk-jre-11.0.10.9-1.windows.redhat.x86_64.msi> 下载 OpenJRE 11 的可执行程序。
2. 下载时会提示登录“红帽”,任意注册账号登录即可。登录完成之后会自动下载 JRE。 2. 下载时会提示登录“红帽”,任意注册账号登录即可。登录完成之后会自动下载 JRE。
@ -21,7 +23,8 @@ title: 在 Windows 服务器上部署
![img2.png](/img/img2.png) ![img2.png](/img/img2.png)
4. 安装完成之后, 使用 <kbd>Win</kbd>+<kbd>R</kbd> 打开运行窗口并输入 `CMD` 后,回车打开 CMD 窗口。之后键入 `java -version`。显示如下所示内容即代表安装成功。 4. 安装完成之后, 使用 <kbd>Win</kbd>+<kbd>R</kbd> 打开运行窗口并输入 `CMD` 后,回车打开 CMD 窗口。之后键入 `java -version`。显示如下所示内容即代表安装成功。
```
```bash
openjdk version "11.0.10" 2021-01-19 LTS openjdk version "11.0.10" 2021-01-19 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.10+9-LTS) OpenJDK Runtime Environment 18.9 (build 11.0.10+9-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.10+9-LTS, mixed mode) OpenJDK 64-Bit Server VM 18.9 (build 11.0.10+9-LTS, mixed mode)
@ -29,10 +32,11 @@ OpenJDK 64-Bit Server VM 18.9 (build 11.0.10+9-LTS, mixed mode)
![1615618595.jpg](/img/1615618595.jpg) ![1615618595.jpg](/img/1615618595.jpg)
# 安装 Halo ## 安装 Halo
1. 下载运行包 1. 下载运行包
使用浏览器前往 https://dl.halo.run/release/halo-1.4.6.jar 下载最新版本 Halo 运行包,**并保存至桌面**。修改 Jar 包名称为 `halo.jar` 使用浏览器前往 <https://dl.halo.run/release/halo-1.4.6.jar> 下载最新版本 Halo 运行包,**并保存至桌面**。修改 Jar 包名称为 `halo.jar`
:::info :::info
如果下载速度不理想,可以[在这里](/getting-started/downloads)选择其他下载地址。 如果下载速度不理想,可以[在这里](/getting-started/downloads)选择其他下载地址。
@ -40,7 +44,7 @@ OpenJDK 64-Bit Server VM 18.9 (build 11.0.10+9-LTS, mixed mode)
2. 下载示例配置文件 2. 下载示例配置文件
使用浏览器前往 https://dl.halo.run/config/application-template.yaml 下载示例配置文件,**并保存至桌面**。修改示例配置文件名字为 `application.yaml` 使用浏览器前往 <https://dl.halo.run/config/application-template.yaml> 下载示例配置文件,**并保存至桌面**。修改示例配置文件名字为 `application.yaml`
:::tip :::tip
IE 浏览器下,配置文件可能会以文本的形式直接打开,因此推荐使用其他浏览器或下载器下载。 IE 浏览器下,配置文件可能会以文本的形式直接打开,因此推荐使用其他浏览器或下载器下载。
@ -51,16 +55,19 @@ IE 浏览器下,配置文件可能会以文本的形式直接打开,因此
4. 测试运行 Halo 4. 测试运行 Halo
使用 <kbd>Win</kbd>+<kbd>R</kbd> 打开运行窗口并输入 `CMD` 后,回车打开 CMD 窗口,并键入如下命令。 使用 <kbd>Win</kbd>+<kbd>R</kbd> 打开运行窗口并输入 `CMD` 后,回车打开 CMD 窗口,并键入如下命令。
```
```bash
cd Desktop && java -jar halo.jar cd Desktop && java -jar halo.jar
``` ```
5. 如看到类似以下日志输出,则代表启动成功。 5. 如看到类似以下日志输出,则代表启动成功。
```bash ```bash
run.halo.app.listener.StartedListener : Halo started at http://127.0.0.1:8090 run.halo.app.listener.StartedListener : Halo started at http://127.0.0.1:8090
run.halo.app.listener.StartedListener : Halo admin started at http://127.0.0.1:8090/admin run.halo.app.listener.StartedListener : Halo admin started at http://127.0.0.1:8090/admin
run.halo.app.listener.StartedListener : Halo has started successfully! run.halo.app.listener.StartedListener : Halo has started successfully!
``` ```
浏览器打开 `http://ip:端口号` 即可看到安装引导界面。 浏览器打开 `http://ip:端口号` 即可看到安装引导界面。
:::info :::info

@ -84,14 +84,16 @@ create database halodb character set utf8mb4 collate utf8mb4_bin;
代表当前系统下的 [用户目录](https://zh.wikipedia.org/wiki/%E5%AE%B6%E7%9B%AE%E5%BD%95)。 代表当前系统下的 [用户目录](https://zh.wikipedia.org/wiki/%E5%AE%B6%E7%9B%AE%E5%BD%95)。
### 运行包 ### 运行包
指 Halo 构建所产生的 Jar 包,后缀为 `.jar`。可能与其他网站应用有所区别的是Halo 仅仅只有这一个文件。而且所有数据统一保存在下面所说的 `工作目录` 指 Halo 构建所产生的 Jar 包,后缀为 `.jar`。可能与其他网站应用有所区别的是Halo 仅仅只有这一个文件。而且所有数据统一保存在下面所说的 `工作目录`
### 工作目录 ### 工作目录
指 Halo 所依赖的工作目录,在 Halo 运行的时候会在系统当前用户目录下产生一个 `.halo` 的文件夹,绝对路径为 `~/.halo`。由于这个工作目录是固定的,所以上面所说的 `运行包`不限制所存放的位置,里面通常包含下列目录或文件: 指 Halo 所依赖的工作目录,在 Halo 运行的时候会在系统当前用户目录下产生一个 `.halo` 的文件夹,绝对路径为 `~/.halo`。由于这个工作目录是固定的,所以上面所说的 `运行包`不限制所存放的位置,里面通常包含下列目录或文件:
1. `db`:存放 H2 Database 的物理文件,如果您使用 MySQL 数据库,那么不会存在这个目录。 1. `db`:存放 H2 Database 的物理文件,如果您使用 MySQL 数据库,那么不会存在这个目录。
2. `templates/themes`:里面包含用户所下载的主题。 2. `templates/themes`:里面包含用户所下载的主题。
3. `static`:相当于网站的根目录。 3. `static`:相当于网站的根目录。
4. `logs`:运行日志目录。 4. `logs`:运行日志目录。
4. `upload`:附件目录。 5. `upload`:附件目录。
5. `application.yaml`:配置文件。 6. `application.yaml`:配置文件。

@ -57,11 +57,10 @@ java -jar halo.jar
5. 重启服务 5. 重启服务
``` ```bash
service halo start service halo start
``` ```
## Docker <i class="mdi mdi-docker"></i> ## Docker <i class="mdi mdi-docker"></i>
> 我们假设您的容器是按照 [使用 Docker 部署 Halo](/getting-started/install/docker) 中的命令构建的。如有不同,请根据实际情况修改。 > 我们假设您的容器是按照 [使用 Docker 部署 Halo](/getting-started/install/docker) 中的命令构建的。如有不同,请根据实际情况修改。
@ -93,7 +92,7 @@ docker pull halohub/halo:1.4.17
``` ```
:::info :::info
查看最新版本镜像https://hub.docker.com/r/halohub/halo ,我们推荐使用具体版本号的镜像,但也提供了 `latest` 标签的镜像,它始终是最新的。 查看最新版本镜像:<https://hub.docker.com/r/halohub/halo> ,我们推荐使用具体版本号的镜像,但也提供了 `latest` 标签的镜像,它始终是最新的。
::: :::
4. 创建容器 4. 创建容器
@ -101,6 +100,7 @@ docker pull halohub/halo:1.4.17
```bash ```bash
docker run -it -d --name halo -p 8090:8090 -v ~/.halo:/root/.halo --restart=unless-stopped halohub/halo:1.4.17 docker run -it -d --name halo -p 8090:8090 -v ~/.halo:/root/.halo --restart=unless-stopped halohub/halo:1.4.17
``` ```
- **-it** 开启输入功能并连接伪终端 - **-it** 开启输入功能并连接伪终端
- **-d** 后台运行容器 - **-d** 后台运行容器
- **--name** 为容器指定一个名称 - **--name** 为容器指定一个名称

@ -29,7 +29,7 @@ description: 系统功能的相关配置说明
很多人反映评论中自己的头像不显示,其实评论部分调用的头像并不是在个人资料中设置的那个,而是 `Gravatar`。所以这一点怪我,从 Halo 发布至今我都没有说明这个事情。 很多人反映评论中自己的头像不显示,其实评论部分调用的头像并不是在个人资料中设置的那个,而是 `Gravatar`。所以这一点怪我,从 Halo 发布至今我都没有说明这个事情。
至于什么是 `Gravatar`,引用 `Gravatar` 官方的说明:`全球公认的头像`。这可不是在吹牛,因为只要接入了 Gravatar 的网站,你在网站上使用在 Gravatar 注册的邮箱之后,都会显示你设置的头像,而不需要额外设置。比较出名的网站有 `Github``Gitlab``V2ex` 等。所以点击 https://cn.gravatar.com/ 注册一个吧。 至于什么是 `Gravatar`,引用 `Gravatar` 官方的说明:`全球公认的头像`。这可不是在吹牛,因为只要接入了 Gravatar 的网站,你在网站上使用在 Gravatar 注册的邮箱之后,都会显示你设置的头像,而不需要额外设置。比较出名的网站有 `Github``Gitlab``V2ex` 等。所以点击 <https://cn.gravatar.com/> 注册一个吧。
## 设置用户头像/Logo/Favicon ## 设置用户头像/Logo/Favicon
@ -158,8 +158,8 @@ A诸如百度统计CNZZGoogle Analytics。可以非常详细的统计
点击主题下方的设置按钮即可进入主题设置。另外主题设置还有一种预览模式,可以实时查看主题设置变更后的效果。当你设置当前激活主题的时候,在页面右下角有一个 `预览模式` 的按钮,点击即可进入预览模式。 点击主题下方的设置按钮即可进入主题设置。另外主题设置还有一种预览模式,可以实时查看主题设置变更后的效果。当你设置当前激活主题的时候,在页面右下角有一个 `预览模式` 的按钮,点击即可进入预览模式。
## 设置备案信息 ## 设置备案信息
由于后台博客设置并没有提供设置备案信息的选项,所以有很多人不知道该怎么添加备案信息,这里简单说明一下。
由于后台博客设置并没有提供设置备案信息的选项,所以有很多人不知道该怎么添加备案信息,这里简单说明一下。
第一步: 第一步:
@ -167,7 +167,6 @@ A诸如百度统计CNZZGoogle Analytics。可以非常详细的统计
这时候你应该可以看到一个`页脚信息`的选项,而且有提示 `支持 HTML 格式的文本`。所以我们把备案信息放在这里即可。 这时候你应该可以看到一个`页脚信息`的选项,而且有提示 `支持 HTML 格式的文本`。所以我们把备案信息放在这里即可。
第二步: 第二步:
将整理好的备案信息填写到页脚信息即可,如果没记错的话,公安联网备案是有提供`网站公安机关备案号`和`备案编号HTML代码`的。 将整理好的备案信息填写到页脚信息即可,如果没记错的话,公安联网备案是有提供`网站公安机关备案号`和`备案编号HTML代码`的。

@ -9,21 +9,27 @@ Halo 使用的 `Markdown` 解析器为 [flexmark-java](https://github.com/vsch/f
## 代码块 ## 代码块
```language ````markdown
代码块 ```language
``` 代码块
```
````
其中language 为必填,如果不填写,很可能主题的代码高亮插件无法识别代码的语言,导致样式异常。举几个例子: 其中language 为必填,如果不填写,很可能主题的代码高亮插件无法识别代码的语言,导致样式异常。举几个例子:
```java ````markdown
public static void main(String[] args){ ```java
    System.out.println("Hello World!"); public static void main(String[] args){
}     System.out.println("Hello World!");
``` }
```
````
```javascript ````markdown
console.log("Hello World!") ```javascript
``` console.log("Hello World!")
```
````
## TOC ## TOC
@ -33,9 +39,9 @@ Halo 使用的 `Markdown` 解析器为 [flexmark-java](https://github.com/vsch/f
支持自动将一个链接解析为可点击的格式,如下: 支持自动将一个链接解析为可点击的格式,如下:
````markdown ```markdown
https://halo.run https://halo.run
```` ```
将被解析为: 将被解析为:
@ -177,21 +183,21 @@ Halo 内置一些短连接以更好地支持一些 HTML 语法,但是编辑器
## 脚注 ## 脚注
#### 语法 语法
```markdown ```markdown
[^脚注名] [^脚注名]
[^脚注名]: 脚注内容 [^脚注名]: 脚注内容
``` ```
#### 示例 示例
```markdown ```markdown
驿外[^1]断桥边,寂寞开无主。已是黄昏独自愁,更着风和雨 驿外[^1]断桥边,寂寞开无主。已是黄昏独自愁,更着风和雨
[^1]: 驿指荒僻、冷清之地。驿驿站。 [^1]: 驿指荒僻、冷清之地。驿驿站。
``` ```
#### 解析结果 解析结果
```html ```html
<p>驿外<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>断桥边,寂寞开无主。已是黄昏独自愁,更着风和雨</p> <p>驿外<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>断桥边,寂寞开无主。已是黄昏独自愁,更着风和雨</p>

@ -3,6 +3,7 @@
"version": "0.0.0", "version": "0.0.0",
"private": true, "private": true,
"scripts": { "scripts": {
"prepare": "husky install",
"docusaurus": "docusaurus", "docusaurus": "docusaurus",
"start": "docusaurus start", "start": "docusaurus start",
"build": "docusaurus build", "build": "docusaurus build",
@ -11,7 +12,8 @@
"clear": "docusaurus clear", "clear": "docusaurus clear",
"serve": "docusaurus serve", "serve": "docusaurus serve",
"write-translations": "docusaurus write-translations", "write-translations": "docusaurus write-translations",
"write-heading-ids": "docusaurus write-heading-ids" "write-heading-ids": "docusaurus write-heading-ids",
"lint": "markdownlint-cli2 './docs/**/*.md' './versioned_docs/version-1.4.17/**/*.md'"
}, },
"dependencies": { "dependencies": {
"@docusaurus/core": "2.0.0-beta.14", "@docusaurus/core": "2.0.0-beta.14",
@ -37,5 +39,10 @@
"last 1 firefox version", "last 1 firefox version",
"last 1 safari version" "last 1 safari version"
] ]
},
"devDependencies": {
"husky": "^7.0.4",
"markdownlint": "^0.25.1",
"markdownlint-cli2": "^0.4.0"
} }
} }

@ -8,6 +8,9 @@ specifiers:
'@svgr/webpack': ^5.5.0 '@svgr/webpack': ^5.5.0
clsx: ^1.1.1 clsx: ^1.1.1
file-loader: ^6.2.0 file-loader: ^6.2.0
husky: ^7.0.4
markdownlint: ^0.25.1
markdownlint-cli2: ^0.4.0
prism-react-renderer: ^1.2.1 prism-react-renderer: ^1.2.1
react: ^17.0.2 react: ^17.0.2
react-dom: ^17.0.2 react-dom: ^17.0.2
@ -26,6 +29,11 @@ dependencies:
react-dom: 17.0.2_react@17.0.2 react-dom: 17.0.2_react@17.0.2
url-loader: 4.1.1_file-loader@6.2.0 url-loader: 4.1.1_file-loader@6.2.0
devDependencies:
husky: 7.0.4
markdownlint: 0.25.1
markdownlint-cli2: 0.4.0
packages: packages:
/@algolia/autocomplete-core/1.2.2: /@algolia/autocomplete-core/1.2.2:
@ -3599,12 +3607,10 @@ packages:
dependencies: dependencies:
'@nodelib/fs.stat': 2.0.5 '@nodelib/fs.stat': 2.0.5
run-parallel: 1.2.0 run-parallel: 1.2.0
dev: false
/@nodelib/fs.stat/2.0.5: /@nodelib/fs.stat/2.0.5:
resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
engines: {node: '>= 8'} engines: {node: '>= 8'}
dev: false
/@nodelib/fs.walk/1.2.8: /@nodelib/fs.walk/1.2.8:
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
@ -3612,7 +3618,6 @@ packages:
dependencies: dependencies:
'@nodelib/fs.scandir': 2.1.5 '@nodelib/fs.scandir': 2.1.5
fastq: 1.13.0 fastq: 1.13.0
dev: false
/@polka/url/1.0.0-next.21: /@polka/url/1.0.0-next.21:
resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==}
@ -4373,7 +4378,6 @@ packages:
/argparse/2.0.1: /argparse/2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
dev: false
/arr-diff/4.0.0: /arr-diff/4.0.0:
resolution: {integrity: sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=} resolution: {integrity: sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=}
@ -4410,6 +4414,11 @@ packages:
engines: {node: '>=8'} engines: {node: '>=8'}
dev: false dev: false
/array-union/3.0.1:
resolution: {integrity: sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==}
engines: {node: '>=12'}
dev: true
/array-uniq/1.0.3: /array-uniq/1.0.3:
resolution: {integrity: sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=} resolution: {integrity: sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
@ -4720,7 +4729,6 @@ packages:
engines: {node: '>=8'} engines: {node: '>=8'}
dependencies: dependencies:
fill-range: 7.0.1 fill-range: 7.0.1
dev: false
/browserslist/4.14.2: /browserslist/4.14.2:
resolution: {integrity: sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw==} resolution: {integrity: sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw==}
@ -5762,7 +5770,6 @@ packages:
engines: {node: '>=8'} engines: {node: '>=8'}
dependencies: dependencies:
path-type: 4.0.0 path-type: 4.0.0
dev: false
/dns-equal/1.0.0: /dns-equal/1.0.0:
resolution: {integrity: sha1-s55/HabrCnW6nBcySzR1PEfgZU0=} resolution: {integrity: sha1-s55/HabrCnW6nBcySzR1PEfgZU0=}
@ -5926,6 +5933,10 @@ packages:
resolution: {integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==} resolution: {integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==}
dev: false dev: false
/entities/2.1.0:
resolution: {integrity: sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==}
dev: true
/entities/2.2.0: /entities/2.2.0:
resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==}
dev: false dev: false
@ -6213,7 +6224,6 @@ packages:
glob-parent: 5.1.2 glob-parent: 5.1.2
merge2: 1.4.1 merge2: 1.4.1
micromatch: 4.0.4 micromatch: 4.0.4
dev: false
/fast-json-stable-stringify/2.1.0: /fast-json-stable-stringify/2.1.0:
resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
@ -6229,7 +6239,6 @@ packages:
resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==}
dependencies: dependencies:
reusify: 1.0.4 reusify: 1.0.4
dev: false
/faye-websocket/0.11.4: /faye-websocket/0.11.4:
resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==}
@ -6320,7 +6329,6 @@ packages:
engines: {node: '>=8'} engines: {node: '>=8'}
dependencies: dependencies:
to-regex-range: 5.0.1 to-regex-range: 5.0.1
dev: false
/finalhandler/1.1.2: /finalhandler/1.1.2:
resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==}
@ -6589,7 +6597,6 @@ packages:
engines: {node: '>= 6'} engines: {node: '>= 6'}
dependencies: dependencies:
is-glob: 4.0.3 is-glob: 4.0.3
dev: false
/glob-parent/6.0.2: /glob-parent/6.0.2:
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
@ -6660,11 +6667,23 @@ packages:
array-union: 2.1.0 array-union: 2.1.0
dir-glob: 3.0.1 dir-glob: 3.0.1
fast-glob: 3.2.7 fast-glob: 3.2.7
ignore: 5.1.8 ignore: 5.2.0
merge2: 1.4.1 merge2: 1.4.1
slash: 3.0.0 slash: 3.0.0
dev: false dev: false
/globby/12.1.0:
resolution: {integrity: sha512-YULDaNwsoUZkRy9TWSY/M7Obh0abamTKoKzTfOI3uU+hfpX2FZqOq8LFDxsjYheF1RH7ITdArgbQnsNBFgcdBA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
dependencies:
array-union: 3.0.1
dir-glob: 3.0.1
fast-glob: 3.2.7
ignore: 5.2.0
merge2: 1.4.1
slash: 4.0.0
dev: true
/globby/6.1.0: /globby/6.1.0:
resolution: {integrity: sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=} resolution: {integrity: sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
@ -7082,6 +7101,12 @@ packages:
engines: {node: '>=10.17.0'} engines: {node: '>=10.17.0'}
dev: false dev: false
/husky/7.0.4:
resolution: {integrity: sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==}
engines: {node: '>=12'}
hasBin: true
dev: true
/iconv-lite/0.4.24: /iconv-lite/0.4.24:
resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
@ -7103,6 +7128,10 @@ packages:
engines: {node: '>= 4'} engines: {node: '>= 4'}
dev: false dev: false
/ignore/5.2.0:
resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==}
engines: {node: '>= 4'}
/immer/8.0.1: /immer/8.0.1:
resolution: {integrity: sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA==} resolution: {integrity: sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA==}
dev: false dev: false
@ -7378,7 +7407,6 @@ packages:
/is-extglob/2.1.1: /is-extglob/2.1.1:
resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=} resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
dev: false
/is-fullwidth-code-point/2.0.0: /is-fullwidth-code-point/2.0.0:
resolution: {integrity: sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=} resolution: {integrity: sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=}
@ -7402,7 +7430,6 @@ packages:
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
dependencies: dependencies:
is-extglob: 2.1.1 is-extglob: 2.1.1
dev: false
/is-hexadecimal/1.0.4: /is-hexadecimal/1.0.4:
resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==}
@ -7443,7 +7470,6 @@ packages:
/is-number/7.0.0: /is-number/7.0.0:
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
engines: {node: '>=0.12.0'} engines: {node: '>=0.12.0'}
dev: false
/is-obj/1.0.1: /is-obj/1.0.1:
resolution: {integrity: sha1-PkcprB9f3gJc19g6iW2rn09n2w8=} resolution: {integrity: sha1-PkcprB9f3gJc19g6iW2rn09n2w8=}
@ -7779,6 +7805,12 @@ packages:
resolution: {integrity: sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=} resolution: {integrity: sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=}
dev: false dev: false
/linkify-it/3.0.3:
resolution: {integrity: sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==}
dependencies:
uc.micro: 1.0.6
dev: true
/loader-runner/4.2.0: /loader-runner/4.2.0:
resolution: {integrity: sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==} resolution: {integrity: sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==}
engines: {node: '>=6.11.5'} engines: {node: '>=6.11.5'}
@ -7960,6 +7992,50 @@ packages:
resolution: {integrity: sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==} resolution: {integrity: sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==}
dev: false dev: false
/markdown-it/12.3.2:
resolution: {integrity: sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==}
hasBin: true
dependencies:
argparse: 2.0.1
entities: 2.1.0
linkify-it: 3.0.3
mdurl: 1.0.1
uc.micro: 1.0.6
dev: true
/markdownlint-cli2-formatter-default/0.0.3_markdownlint-cli2@0.4.0:
resolution: {integrity: sha512-QEAJitT5eqX1SNboOD+SO/LNBpu4P4je8JlR02ug2cLQAqmIhh8IJnSK7AcaHBHhNADqdGydnPpQOpsNcEEqCw==}
peerDependencies:
markdownlint-cli2: '>=0.0.4'
dependencies:
markdownlint-cli2: 0.4.0
dev: true
/markdownlint-cli2/0.4.0:
resolution: {integrity: sha512-EcwP5tAbyzzL3ACI0L16LqbNctmh8wNX56T+aVvIxWyTAkwbYNx2V7IheRkXS3mE7R/pnaApZ/RSXcXuzRVPjg==}
engines: {node: '>=12'}
hasBin: true
dependencies:
globby: 12.1.0
markdownlint: 0.25.1
markdownlint-cli2-formatter-default: 0.0.3_markdownlint-cli2@0.4.0
markdownlint-rule-helpers: 0.16.0
micromatch: 4.0.4
strip-json-comments: 4.0.0
yaml: 1.10.2
dev: true
/markdownlint-rule-helpers/0.16.0:
resolution: {integrity: sha512-oEacRUVeTJ5D5hW1UYd2qExYI0oELdYK72k1TKGvIeYJIbqQWAz476NAc7LNixSySUhcNl++d02DvX0ccDk9/w==}
dev: true
/markdownlint/0.25.1:
resolution: {integrity: sha512-AG7UkLzNa1fxiOv5B+owPsPhtM4D6DoODhsJgiaNg1xowXovrYgOnLqAgOOFQpWOlHFVQUzjMY5ypNNTeov92g==}
engines: {node: '>=12'}
dependencies:
markdown-it: 12.3.2
dev: true
/mdast-squeeze-paragraphs/4.0.0: /mdast-squeeze-paragraphs/4.0.0:
resolution: {integrity: sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==} resolution: {integrity: sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==}
dependencies: dependencies:
@ -7999,7 +8075,6 @@ packages:
/mdurl/1.0.1: /mdurl/1.0.1:
resolution: {integrity: sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=} resolution: {integrity: sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=}
dev: false
/media-typer/0.3.0: /media-typer/0.3.0:
resolution: {integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=} resolution: {integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=}
@ -8031,7 +8106,6 @@ packages:
/merge2/1.4.1: /merge2/1.4.1:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines: {node: '>= 8'} engines: {node: '>= 8'}
dev: false
/methods/1.1.2: /methods/1.1.2:
resolution: {integrity: sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=} resolution: {integrity: sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=}
@ -8067,7 +8141,6 @@ packages:
dependencies: dependencies:
braces: 3.0.2 braces: 3.0.2
picomatch: 2.3.0 picomatch: 2.3.0
dev: false
/mime-db/1.33.0: /mime-db/1.33.0:
resolution: {integrity: sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==} resolution: {integrity: sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==}
@ -8681,7 +8754,6 @@ packages:
/path-type/4.0.0: /path-type/4.0.0:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
engines: {node: '>=8'} engines: {node: '>=8'}
dev: false
/picocolors/0.2.1: /picocolors/0.2.1:
resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==} resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==}
@ -8694,7 +8766,6 @@ packages:
/picomatch/2.3.0: /picomatch/2.3.0:
resolution: {integrity: sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==} resolution: {integrity: sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==}
engines: {node: '>=8.6'} engines: {node: '>=8.6'}
dev: false
/pify/2.3.0: /pify/2.3.0:
resolution: {integrity: sha1-7RQaasBDqEnqWISY59yosVMw6Qw=} resolution: {integrity: sha1-7RQaasBDqEnqWISY59yosVMw6Qw=}
@ -9330,7 +9401,6 @@ packages:
/queue-microtask/1.2.3: /queue-microtask/1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
dev: false
/randombytes/2.1.0: /randombytes/2.1.0:
resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
@ -9927,7 +9997,6 @@ packages:
/reusify/1.0.4: /reusify/1.0.4:
resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'} engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
dev: false
/rimraf/2.7.1: /rimraf/2.7.1:
resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
@ -9962,7 +10031,6 @@ packages:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
dependencies: dependencies:
queue-microtask: 1.2.3 queue-microtask: 1.2.3
dev: false
/rxjs/6.6.7: /rxjs/6.6.7:
resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==}
@ -10279,6 +10347,11 @@ packages:
engines: {node: '>=8'} engines: {node: '>=8'}
dev: false dev: false
/slash/4.0.0:
resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==}
engines: {node: '>=12'}
dev: true
/snapdragon-node/2.1.1: /snapdragon-node/2.1.1:
resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==} resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
@ -10589,6 +10662,11 @@ packages:
engines: {node: '>=8'} engines: {node: '>=8'}
dev: false dev: false
/strip-json-comments/4.0.0:
resolution: {integrity: sha512-LzWcbfMbAsEDTRmhjWIioe8GcDRl0fa35YMXFoJKDdiD/quGFmjJjdgPjFJJNwCMaLyQqFIDqCdHD2V4HfLgYA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
dev: true
/style-to-object/0.3.0: /style-to-object/0.3.0:
resolution: {integrity: sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==} resolution: {integrity: sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==}
dependencies: dependencies:
@ -10778,7 +10856,6 @@ packages:
engines: {node: '>=8.0'} engines: {node: '>=8.0'}
dependencies: dependencies:
is-number: 7.0.0 is-number: 7.0.0
dev: false
/to-regex/3.0.2: /to-regex/3.0.2:
resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==} resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==}
@ -10856,6 +10933,10 @@ packages:
resolution: {integrity: sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==} resolution: {integrity: sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==}
dev: false dev: false
/uc.micro/1.0.6:
resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==}
dev: true
/unbox-primitive/1.0.1: /unbox-primitive/1.0.1:
resolution: {integrity: sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==} resolution: {integrity: sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==}
dependencies: dependencies:
@ -11629,7 +11710,6 @@ packages:
/yaml/1.10.2: /yaml/1.10.2:
resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
engines: {node: '>= 6'} engines: {node: '>= 6'}
dev: false
/yargs-parser/13.1.2: /yargs-parser/13.1.2:
resolution: {integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==} resolution: {integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==}

@ -9,7 +9,7 @@ description: 问题反馈渠道及指南
## GitHub Issues ## GitHub Issues
链接https://github.com/halo-dev/halo/issues 链接:<https://github.com/halo-dev/halo/issues>
如果你在使用过程中,遇到了一些 bug 或者需要添加某些新特性,请尽量在 GitHub Issues 进行反馈,这非常有助于我们跟踪解决此问题,您也可以很方便的接收到处理状态。 如果你在使用过程中,遇到了一些 bug 或者需要添加某些新特性,请尽量在 GitHub Issues 进行反馈,这非常有助于我们跟踪解决此问题,您也可以很方便的接收到处理状态。
@ -23,6 +23,6 @@ description: 问题反馈渠道及指南
## Halo 官方社区 ## Halo 官方社区
链接https://bbs.halo.run 链接:<https://bbs.halo.run>
此平台主要目的用于与其他 Halo 用户进行交流。但如果您对 GitHub 不是很熟悉或者没有账号,您也可以在此平台进行反馈。 此平台主要目的用于与其他 Halo 用户进行交流。但如果您对 GitHub 不是很熟悉或者没有账号,您也可以在此平台进行反馈。

@ -9,7 +9,7 @@ description: 开发环境的一些说明
2. 工具:[Gradle](https://gradle.org/)[Lombok](https://projectlombok.org/) 插件 2. 工具:[Gradle](https://gradle.org/)[Lombok](https://projectlombok.org/) 插件
3. JDK`11+` 3. JDK`11+`
> 推荐 IntelliJ IDEA 社区版开源免费https://github.com/JetBrains/intellij-community > 推荐 IntelliJ IDEA 社区版(开源免费)<https://github.com/JetBrains/intellij-community>
`Halo` 项目使用了 `Lombok`,运行 `Halo` 之前请检查 `IDE` 是否已经安装好了 `Lombok` 插件。 `Halo` 项目使用了 `Lombok`,运行 `Halo` 之前请检查 `IDE` 是否已经安装好了 `Lombok` 插件。

@ -31,11 +31,6 @@ description: Halo 项目的构成
在开发的时候,希望大家能够在 `~/halo-dev/application.yml` 中进行添加自定义配置。当然后面也会讲到如何用`运行参数` 和 `VM options` 进行控制配置,届时可根据具体情况进行选择。 在开发的时候,希望大家能够在 `~/halo-dev/application.yml` 中进行添加自定义配置。当然后面也会讲到如何用`运行参数` 和 `VM options` 进行控制配置,届时可根据具体情况进行选择。
:::warning
<article class="message is-warning">
<div class="message-body">
开发的时候,我们不建议直接更改`项目源码`中的所包含的`配置文件`,包括 `application.yml`、`application-dev.yml`、`application-test.yml` 和 `application-user.yml` 开发的时候,我们不建议直接更改`项目源码`中的所包含的`配置文件`,包括 `application.yml`、`application-dev.yml`、`application-test.yml` 和 `application-user.yml`
:::
</div>
</article>

@ -5,16 +5,15 @@ description: 系统提供的一些全局变量
## 博客地址 ## 博客地址
``` ```html
${blog_url!} ${blog_url!}
``` ```
此变量与后台博客设置中的 `博客地址` 相对应。 此变量与后台博客设置中的 `博客地址` 相对应。
## 网站根路径 ## 网站根路径
``` ```html
${context!} ${context!}
``` ```
@ -24,12 +23,12 @@ ${context!}
假设,我设置的 `博客地址``https://halo.run`,那么: 假设,我设置的 `博客地址``https://halo.run`,那么:
- 全局绝对路径为开启的状态下https://halo.run/ - 全局绝对路径为开启的状态下:<https://halo.run/>
- 全局绝对路径为关闭的状态下:/ - 全局绝对路径为关闭的状态下:/
## 主题资源根路径 ## 主题资源根路径
``` ```html
${theme_base!} ${theme_base!}
``` ```
@ -37,7 +36,7 @@ ${theme_base!}
举个例子,你当前开发的主题为 `anatole`,当你要获取主题下 `css/style.css` 这个文件的路径,那么: 举个例子,你当前开发的主题为 `anatole`,当你要获取主题下 `css/style.css` 这个文件的路径,那么:
``` ```html
${theme_base!}/css/style.css ${theme_base!}/css/style.css
``` ```
@ -45,25 +44,25 @@ ${theme_base!}/css/style.css
主题名称: 主题名称:
``` ```html
${theme.name!} ${theme.name!}
``` ```
主题 git 仓库地址: 主题 git 仓库地址:
``` ```html
${theme.repo!} ${theme.repo!}
``` ```
主题版本号: 主题版本号:
``` ```html
${theme.version!} ${theme.version!}
``` ```
## 博客标题 ## 博客标题
``` ```html
${blog_title!} ${blog_title!}
``` ```
@ -71,7 +70,7 @@ ${blog_title!}
## 博客 Logo ## 博客 Logo
``` ```html
${blog_logo!} ${blog_logo!}
``` ```
@ -79,7 +78,7 @@ ${blog_logo!}
## Halo 版本 ## Halo 版本
``` ```html
${version!} ${version!}
``` ```
@ -89,37 +88,37 @@ ${version!}
昵称: 昵称:
``` ```html
${user.nickname!} ${user.nickname!}
``` ```
邮箱地址: 邮箱地址:
``` ```html
${user.email!} ${user.email!}
``` ```
描述: 描述:
``` ```html
${user.description!} ${user.description!}
``` ```
头像地址: 头像地址:
``` ```html
${user.avatar!} ${user.avatar!}
``` ```
上次登录时间: 上次登录时间:
``` ```html
${user.expireTime!} ${user.expireTime!}
``` ```
## SEO 关键词 ## SEO 关键词
``` ```html
${meta_keywords!} ${meta_keywords!}
``` ```
@ -132,16 +131,15 @@ ${meta_keywords!}
## SEO 描述 ## SEO 描述
``` ```html
${meta_description!} ${meta_description!}
``` ```
需要注意的是,虽然这个变量在任何页面都可以使用,但是其值可能在不同的页面是不一样的。会根据用户的设置,生成对应的值。 需要注意的是,虽然这个变量在任何页面都可以使用,但是其值可能在不同的页面是不一样的。会根据用户的设置,生成对应的值。
## RSS 2.0 订阅地址 ## RSS 2.0 订阅地址
``` ```html
${rss_url!} ${rss_url!}
``` ```
@ -149,7 +147,7 @@ ${rss_url!}
## Atom 格式的订阅地址 ## Atom 格式的订阅地址
``` ```html
${atom_url!} ${atom_url!}
``` ```
@ -157,7 +155,7 @@ ${atom_url!}
## Xml 格式的网站地图地址 ## Xml 格式的网站地图地址
``` ```html
${sitemap_xml_url!} ${sitemap_xml_url!}
``` ```
@ -165,7 +163,7 @@ ${sitemap_xml_url!}
## HTML 格式的网站地图地址 ## HTML 格式的网站地图地址
``` ```html
${sitemap_html_url!} ${sitemap_html_url!}
``` ```
@ -173,7 +171,7 @@ ${sitemap_html_url!}
## 友情链接页面地址 ## 友情链接页面地址
``` ```html
${links_url!} ${links_url!}
``` ```
@ -184,7 +182,7 @@ ${links_url!}
## 图库页面地址 ## 图库页面地址
``` ```html
${photos_url!} ${photos_url!}
``` ```
@ -195,7 +193,7 @@ ${photos_url!}
## 日志页面地址 ## 日志页面地址
``` ```html
${journals_url!} ${journals_url!}
``` ```
@ -206,7 +204,7 @@ ${journals_url!}
## 文章归档页面地址 ## 文章归档页面地址
``` ```html
${archives_url!} ${archives_url!}
``` ```
@ -217,7 +215,7 @@ ${archives_url!}
## 分类列表页面地址 ## 分类列表页面地址
``` ```html
${categories_url!} ${categories_url!}
``` ```
@ -228,7 +226,7 @@ ${categories_url!}
## 标签列表页面地址 ## 标签列表页面地址
``` ```html
${tags_url!} ${tags_url!}
``` ```

@ -44,7 +44,7 @@ Halo 的运行可参考上述 [系统开发](/developer-guide/core/prepare)
> 为了让开发更加规范,我们推荐使用以下的目录结构。 > 为了让开发更加规范,我们推荐使用以下的目录结构。
``` ```txt
├── module // 公共模板目录 ├── module // 公共模板目录
│   ├── comment.ftl // 比如:评论模板 │   ├── comment.ftl // 比如:评论模板
│   ├── layout.ftl // 比如:布局模板 │   ├── layout.ftl // 比如:布局模板

@ -29,12 +29,10 @@ description: 系统提供的一些宏模板
> 需要注意的是,为了保证系统功能的完整性,我们强制要求在每个页面的尾部必须包含此模板。 > 需要注意的是,为了保证系统功能的完整性,我们强制要求在每个页面的尾部必须包含此模板。
```html ```html
<@global.footer /> <@global.footer />
``` ```
等同于: 等同于:
```html ```html
@ -51,7 +49,6 @@ description: 系统提供的一些宏模板
x 年前/x 个月前/x 天前/昨天/x 小时前/x 分钟前/x 秒前/刚刚 x 年前/x 个月前/x 天前/昨天/x 小时前/x 分钟前/x 秒前/刚刚
``` ```
## 评论模块 ## 评论模块
```html ```html
@ -73,23 +70,22 @@ x 年前/x 个月前/x 天前/昨天/x 小时前/x 分钟前/x 秒前/刚刚
- targetpost / sheet / journal 对象 - targetpost / sheet / journal 对象
- type评论类型可为post / sheet / journal - type评论类型可为post / sheet / journal
例子: 例子:
在文章页面post.ftl or post_xxx.ftl 在文章页面post.ftl or post_xxx.ftl
``` ```html
<@global.comment target=post type="post" /> <@global.comment target=post type="post" />
``` ```
在自定义页面sheet.ftl or post_sheet.ftl 在自定义页面sheet.ftl or post_sheet.ftl
``` ```html
<@global.comment target=sheet type="sheet" /> <@global.comment target=sheet type="sheet" />
``` ```
在日志页面journals.ftl 在日志页面journals.ftl
``` ```html
<@global.comment target=journal type="journal" /> <@global.comment target=journal type="journal" />
``` ```

@ -411,7 +411,6 @@ archives(year):
archives(month): archives(month):
```json ```json
[{ [{
"month": 0, "month": 0,
@ -1751,7 +1750,7 @@ links:
teams: teams:
``` ```json
[{ [{
"team": "string", "team": "string",
"links": [{ "links": [{
@ -1834,7 +1833,7 @@ teams:
teams: teams:
``` ```json
[{ [{
"team": "string", "team": "string",
"links": [{ "links": [{
@ -2149,7 +2148,7 @@ count: long
1. methodindex 1. methodindex
2. page当前页通过 `${posts.number}` 得到 2. page当前页通过 `${posts.number}` 得到
3. total总页数通过 `${posts.totalPages}` 得到 3. total总页数通过 `${posts.totalPages}` 得到
3. display页码展示数量 4. display页码展示数量
#### 返回参数 #### 返回参数
@ -2236,7 +2235,7 @@ pagination
1. methodarchives 1. methodarchives
2. page当前页通过 `${posts.number}` 得到 2. page当前页通过 `${posts.number}` 得到
3. total总页数通过 `${posts.totalPages}` 得到 3. total总页数通过 `${posts.totalPages}` 得到
3. display页码展示数量 4. display页码展示数量
#### 返回参数 #### 返回参数
@ -2411,8 +2410,8 @@ pagination
1. methodtagPosts 1. methodtagPosts
2. page当前页通过 `${posts.number}` 得到 2. page当前页通过 `${posts.number}` 得到
3. total总页数通过 `${posts.totalPages}` 得到 3. total总页数通过 `${posts.totalPages}` 得到
3. display页码展示数量 4. display页码展示数量
4. slug标签 slug 5. slug标签 slug
#### 返回参数 #### 返回参数
@ -2499,8 +2498,8 @@ pagination
1. methodcategoryPosts 1. methodcategoryPosts
2. page当前页通过 `${posts.number}` 得到 2. page当前页通过 `${posts.number}` 得到
3. total总页数通过 `${posts.totalPages}` 得到 3. total总页数通过 `${posts.totalPages}` 得到
3. display页码展示数量 4. display页码展示数量
4. slug标签 slug 5. slug标签 slug
#### 返回参数 #### 返回参数
@ -2587,7 +2586,7 @@ pagination
1. methodphotos 1. methodphotos
2. page当前页通过 `${photos.number}` 得到 2. page当前页通过 `${photos.number}` 得到
3. total总页数通过 `${photos.totalPages}` 得到 3. total总页数通过 `${photos.totalPages}` 得到
3. display页码展示数量 4. display页码展示数量
#### 返回参数 #### 返回参数
@ -2674,7 +2673,7 @@ pagination
1. methodjournals 1. methodjournals
2. page当前页通过 `${journals.number}` 得到 2. page当前页通过 `${journals.number}` 得到
3. total总页数通过 `${journals.totalPages}` 得到 3. total总页数通过 `${journals.totalPages}` 得到
3. display页码展示数量 4. display页码展示数量
#### 返回参数 #### 返回参数

@ -12,9 +12,11 @@ Halo 的配置文件名为 `application.yaml`,其必须位于[工作目录](/g
如下将详细列出配置文件 `application.yaml` 中所有的配置项。 如下将详细列出配置文件 `application.yaml` 中所有的配置项。
## 基础配置 ## 基础配置
基础配置中的配置设置一般来说是**必要的**,且必须在 application.yaml 里进行定义。 基础配置中的配置设置一般来说是**必要的**,且必须在 application.yaml 里进行定义。
### 端口 ### 端口
用于指定 HTTP 服务器监听的端口Halo 默认设置为 `8090` 用于指定 HTTP 服务器监听的端口Halo 默认设置为 `8090`
```yaml ```yaml
@ -25,6 +27,7 @@ server:
请注意,如果您选择设置端口为 `80`,则需要确保您的 80 端口未被占用,通常**不建议**直接设置为 80 端口。 请注意,如果您选择设置端口为 `80`,则需要确保您的 80 端口未被占用,通常**不建议**直接设置为 80 端口。
### 数据库 ### 数据库
Halo 目前支持 `H2``MySQL` 数据库。 Halo 目前支持 `H2``MySQL` 数据库。
:::tip :::tip
@ -88,9 +91,11 @@ create database halodb character set utf8mb4 collate utf8mb4_bin;
- 默认时区为 `Asia/Shanghai`,如果与您所在时区不一致,则可以修改为您所在的时区。 - 默认时区为 `Asia/Shanghai`,如果与您所在时区不一致,则可以修改为您所在的时区。
## 高级配置 ## 高级配置
高级配置中的配置设置是可选的,如果不需要,可以略过。 高级配置中的配置设置是可选的,如果不需要,可以略过。
### 后台路径 ### 后台路径
Halo 支持自定义后台管理的**根路径**。 Halo 支持自定义后台管理的**根路径**。
```yaml ```yaml
@ -102,6 +107,7 @@ halo:
注意:仅为改动后台管理的根路径,因此前后不带 `/` 注意:仅为改动后台管理的根路径,因此前后不带 `/`
### 缓存 ### 缓存
某些情况下,需要用户根据需求来设置缓存数据的保存方式,例如将缓存数据持久化保存在本地。 某些情况下,需要用户根据需求来设置缓存数据的保存方式,例如将缓存数据持久化保存在本地。
```yaml ```yaml
@ -111,10 +117,12 @@ halo:
``` ```
目前支持两种策略: 目前支持两种策略:
- `memory` 将数据缓存至内存,重启服务缓存将清空。 - `memory` 将数据缓存至内存,重启服务缓存将清空。
- `level` 将数据缓存至本地,重启服务不会清空缓存。 - `level` 将数据缓存至本地,重启服务不会清空缓存。
### 压缩 ### 压缩
启用压缩对于减少带宽和加快页面加载非常有用,在**未使用** `Nginx``Caddy` 等反向代理服务器时(反向代理服务器通常是默认开启 Gzip 的可以考虑开启系统自带的Gzip 功能。 启用压缩对于减少带宽和加快页面加载非常有用,在**未使用** `Nginx``Caddy` 等反向代理服务器时(反向代理服务器通常是默认开启 Gzip 的可以考虑开启系统自带的Gzip 功能。
```yaml ```yaml

@ -8,36 +8,43 @@ description: 使用 Docker 部署
::: :::
## 使用 Docker 镜像 ## 使用 Docker 镜像
Halo 在 Docker Hub 上发布的镜像为 [halohub/halo](https://hub.docker.com/r/halohub/halo) Halo 在 Docker Hub 上发布的镜像为 [halohub/halo](https://hub.docker.com/r/halohub/halo)
1. 创建[工作目录](/getting-started/prepare#工作目录) 1. 创建[工作目录](/getting-started/prepare#工作目录)
```bash ```bash
mkdir ~/.halo && cd ~/.halo mkdir ~/.halo && cd ~/.halo
``` ```
2. 下载示例配置文件到[工作目录](/getting-started/prepare#工作目录) 2. 下载示例配置文件到[工作目录](/getting-started/prepare#工作目录)
```bash ```bash
wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml
``` ```
3. 编辑配置文件,配置数据库或者端口等,如需配置请参考[参考配置](/getting-started/config) 3. 编辑配置文件,配置数据库或者端口等,如需配置请参考[参考配置](/getting-started/config)
```bash ```bash
vim application.yaml vim application.yaml
``` ```
4. 拉取最新的 Halo 镜像 4. 拉取最新的 Halo 镜像
```bash ```bash
docker pull halohub/halo:1.4.17 docker pull halohub/halo:1.4.17
``` ```
:::info :::info
查看最新版本镜像https://hub.docker.com/r/halohub/halo ,我们推荐使用具体版本号的镜像,但也提供了 `latest` 标签的镜像,它始终是最新的。 查看最新版本镜像:<https://hub.docker.com/r/halohub/halo> ,我们推荐使用具体版本号的镜像,但也提供了 `latest` 标签的镜像,它始终是最新的。
::: :::
5. 创建容器 5. 创建容器
```bash ```bash
docker run -it -d --name halo -p 8090:8090 -v ~/.halo:/root/.halo --restart=unless-stopped halohub/halo:1.4.17 docker run -it -d --name halo -p 8090:8090 -v ~/.halo:/root/.halo --restart=unless-stopped halohub/halo:1.4.17
``` ```
- **-it** 开启输入功能并连接伪终端 - **-it** 开启输入功能并连接伪终端
- **-d** 后台运行容器 - **-d** 后台运行容器
- **--name** 为容器指定一个名称 - **--name** 为容器指定一个名称
@ -78,7 +85,7 @@ server {
### Caddy 1.x ### Caddy 1.x
``` ```txt
https://www.yourdomain.com { https://www.yourdomain.com {
gzip gzip
tls your@email.com tls your@email.com
@ -90,7 +97,7 @@ https://www.yourdomain.com {
### Caddy 2.x ### Caddy 2.x
``` ```txt
www.yourdomain.com www.yourdomain.com
encode gzip encode gzip
@ -98,4 +105,4 @@ encode gzip
reverse_proxy 127.0.0.1:8090 reverse_proxy 127.0.0.1:8090
``` ```
以上配置都可以在 https://github.com/halo-dev/halo-common 找到。 以上配置都可以在 <https://github.com/halo-dev/halo-common> 找到。

@ -8,6 +8,7 @@ description: 在Linux上快速安装Halo
::: :::
## 依赖检查 ## 依赖检查
目前运行 Halo 的最低依赖要求为 JRE 11请务必确保在进行下面操作之前已经正确安装了 JRE。 目前运行 Halo 的最低依赖要求为 JRE 11请务必确保在进行下面操作之前已经正确安装了 JRE。
目前介绍两种 Linux 发行版的安装方式,均为 OpenJRE不推荐 Oracle 版本。 目前介绍两种 Linux 发行版的安装方式,均为 OpenJRE不推荐 Oracle 版本。
@ -61,32 +62,37 @@ OpenJDK 64-Bit Server VM (build 11.0.10+9-Ubuntu-0ubuntu1.20.04, mixed mode)
::: :::
创建一个名为 halo 的用户(名字可以随意) 创建一个名为 halo 的用户(名字可以随意)
```bash ```bash
useradd -m halo useradd -m halo
``` ```
给予 sudo 权限 给予 sudo 权限
```bash ```bash
usermod -aG wheel halo usermod -aG wheel halo
``` ```
为 halo 用户创建密码 为 halo 用户创建密码
```bash ```bash
passwd halo passwd halo
``` ```
登录到 halo 账户 登录到 halo 账户
```bash ```bash
su - halo su - halo
``` ```
2. 创建存放 [运行包](/getting-started/prepare#运行包) 的目录,这里以 `~/app` 为例 2. 创建存放 [运行包](/getting-started/prepare#运行包) 的目录,这里以 `~/app` 为例
``` ```bash
mkdir ~/app && cd ~/app mkdir ~/app && cd ~/app
``` ```
3. 下载运行包 3. 下载运行包
```bash ```bash
wget https://dl.halo.run/release/halo-1.4.17.jar -O halo.jar wget https://dl.halo.run/release/halo-1.4.17.jar -O halo.jar
``` ```
@ -102,26 +108,31 @@ mkdir ~/.halo && cd ~/.halo
``` ```
5. 下载示例配置文件到 [工作目录](/getting-started/prepare#工作目录) 5. 下载示例配置文件到 [工作目录](/getting-started/prepare#工作目录)
```bash ```bash
wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml
``` ```
6. 编辑配置文件,配置数据库或者端口等,如需配置请参考 [参考配置](/getting-started/config) 6. 编辑配置文件,配置数据库或者端口等,如需配置请参考 [参考配置](/getting-started/config)
```bash ```bash
vim application.yaml vim application.yaml
``` ```
7. 测试运行 Halo 7. 测试运行 Halo
```bash ```bash
cd ~/app && java -jar halo.jar cd ~/app && java -jar halo.jar
``` ```
8. 如看到类似以下日志输出,则代表启动成功。 8. 如看到类似以下日志输出,则代表启动成功。
```bash ```bash
run.halo.app.listener.StartedListener : Halo started at http://127.0.0.1:8090 run.halo.app.listener.StartedListener : Halo started at http://127.0.0.1:8090
run.halo.app.listener.StartedListener : Halo admin started at http://127.0.0.1:8090/admin run.halo.app.listener.StartedListener : Halo admin started at http://127.0.0.1:8090/admin
run.halo.app.listener.StartedListener : Halo has started successfully! run.halo.app.listener.StartedListener : Halo has started successfully!
``` ```
打开 `http://ip: 端口号` 即可看到安装引导界面。 打开 `http://ip: 端口号` 即可看到安装引导界面。
:::info :::info
@ -143,16 +154,19 @@ exit
``` ```
2. 下载 Halo 官方的 halo.service 模板 2. 下载 Halo 官方的 halo.service 模板
```bash ```bash
wget https://dl.halo.run/config/halo.service -O /etc/systemd/system/halo.service wget https://dl.halo.run/config/halo.service -O /etc/systemd/system/halo.service
``` ```
3. 修改 halo.service 3. 修改 halo.service
```bash ```bash
vim /etc/systemd/system/halo.service vim /etc/systemd/system/halo.service
``` ```
4. 修改配置 4. 修改配置
- **YOUR_JAR_PATH**Halo 运行包的绝对路径,例如 `/home/halo/app/halo.jar`,注意:此路径不支持 `~` 符号。 - **YOUR_JAR_PATH**Halo 运行包的绝对路径,例如 `/home/halo/app/halo.jar`,注意:此路径不支持 `~` 符号。
- **USER**:运行 Halo 的系统用户,如果有按照上方教程创建新的用户来运行 Halo修改为你创建的用户名称即可。反之请删除 `User=USER` - **USER**:运行 Halo 的系统用户,如果有按照上方教程创建新的用户来运行 Halo修改为你创建的用户名称即可。反之请删除 `User=USER`
@ -182,21 +196,25 @@ WantedBy=multi-user.target
::: :::
5. 重新加载 systemd 5. 重新加载 systemd
```bash ```bash
systemctl daemon-reload systemctl daemon-reload
``` ```
6. 运行服务 6. 运行服务
```bash ```bash
systemctl start halo systemctl start halo
``` ```
7. 在系统启动时启动服务 7. 在系统启动时启动服务
```bash ```bash
systemctl enable halo systemctl enable halo
``` ```
您可以查看服务日志检查启动状态 您可以查看服务日志检查启动状态
```bash ```bash
journalctl -n 20 -u halo journalctl -n 20 -u halo
``` ```
@ -230,7 +248,7 @@ server {
### Caddy 1.x ### Caddy 1.x
``` ```txt
https://www.yourdomain.com { https://www.yourdomain.com {
gzip gzip
tls your@email.com tls your@email.com
@ -242,7 +260,7 @@ https://www.yourdomain.com {
### Caddy 2.x ### Caddy 2.x
``` ```txt
www.yourdomain.com www.yourdomain.com
encode gzip encode gzip
@ -250,4 +268,4 @@ encode gzip
reverse_proxy 127.0.0.1:8090 reverse_proxy 127.0.0.1:8090
``` ```
以上配置都可以在 https://github.com/halo-dev/halo-common 找到。 以上配置都可以在 <https://github.com/halo-dev/halo-common> 找到。

@ -86,7 +86,7 @@ docker run --name some-mysql -v ~/.halo/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSW
5. 创建 `Halo` 工作目录 5. 创建 `Halo` 工作目录
``` ```bash
mkdir ~/.halo && cd ~/.halo mkdir ~/.halo && cd ~/.halo
``` ```
@ -140,7 +140,7 @@ docker network connect halo-net some-mysql
3. 同之前一样创建 `Halo` 工作目录 3. 同之前一样创建 `Halo` 工作目录
``` ```bash
mkdir ~/.halo && cd ~/.halo mkdir ~/.halo && cd ~/.halo
``` ```

@ -15,7 +15,7 @@ description: 使用 OneinStack 的 vhost 脚本创建 Halo 站点的 Nginx 配
点击下方链接进入 OneinStack 官网,仅选择 `安装 Nginx`,其他的都可以取消选择。 点击下方链接进入 OneinStack 官网,仅选择 `安装 Nginx`,其他的都可以取消选择。
https://oneinstack.com/auto <https://oneinstack.com/auto>
最后点击 `复制安装命令` 到服务器执行即可。如果你仅安装 Nginx你的链接应该是这样 最后点击 `复制安装命令` 到服务器执行即可。如果你仅安装 Nginx你的链接应该是这样
@ -260,14 +260,14 @@ nginx -t
如果输出如下提示则代表配置有效: 如果输出如下提示则代表配置有效:
``` ```bash
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
``` ```
重载 Nginx 配置: 重载 Nginx 配置:
``` ```bash
nginx -s reload nginx -s reload
``` ```

@ -14,13 +14,13 @@ description: 使用腾讯云 CloudBase 一键部署
1. 系统使用内置的 H2 Database暂不支持使用 MySQL。 1. 系统使用内置的 H2 Database暂不支持使用 MySQL。
1. 工作目录保存在腾讯云提供的 CFS 上,在使用此方式创建应用的时候会要求创建 CFS。 1. 工作目录保存在腾讯云提供的 CFS 上,在使用此方式创建应用的时候会要求创建 CFS。
1. 目前使用该方式部署,不支持修改 [配置文件](/getting-started/config)。 1. 目前使用该方式部署,不支持修改 [配置文件](/getting-started/config)。
1. 费用相关请参考 https://cloud.tencent.com/document/product/876/18864 1. 费用相关请参考 <https://cloud.tencent.com/document/product/876/18864>
## 进入云开发页面 ## 进入云开发页面
点击下方按钮即可进入到腾讯云云开发 CloudBase 创建应用界面,此按钮可在云开发页面自动选择 Halo 的配置模板。 点击下方按钮即可进入到腾讯云云开发 CloudBase 创建应用界面,此按钮可在云开发页面自动选择 Halo 的配置模板。
[![](https://main.qcloudimg.com/raw/67f5a389f1ac6f3b4d04c7256438e44f.svg)](https://console.cloud.tencent.com/tcb/env/index?action=CreateAndDeployCloudBaseProject&appUrl=https%3A%2F%2Fgithub.com%2Fhalo-dev%2Ftencent-cloudbase-halo&branch=master) [![CloudBase](https://main.qcloudimg.com/raw/67f5a389f1ac6f3b4d04c7256438e44f.svg)](https://console.cloud.tencent.com/tcb/env/index?action=CreateAndDeployCloudBaseProject&appUrl=https%3A%2F%2Fgithub.com%2Fhalo-dev%2Ftencent-cloudbase-halo&branch=master)
## 配置并部署 ## 配置并部署
@ -48,7 +48,7 @@ description: 使用腾讯云 CloudBase 一键部署
![tencent-cloudbase-6.png](/img/tencent-cloudbase/tencent-cloudbase-6.png) ![tencent-cloudbase-6.png](/img/tencent-cloudbase/tencent-cloudbase-6.png)
**Halo 初始化页面** **Halo 初始化页面**
![tencent-cloudbase-7.png](/img/tencent-cloudbase/tencent-cloudbase-7.png) ![tencent-cloudbase-7.png](/img/tencent-cloudbase/tencent-cloudbase-7.png)
@ -77,4 +77,3 @@ description: 使用腾讯云 CloudBase 一键部署
- [Halo 配置文件仓库](https://github.com/halo-dev/tencent-cloudbase-halo) - [Halo 配置文件仓库](https://github.com/halo-dev/tencent-cloudbase-halo)
- [腾讯云 CloudBase](https://console.cloud.tencent.com/tcb/env/index) - [腾讯云 CloudBase](https://console.cloud.tencent.com/tcb/env/index)
- [云开发使用指南](https://cloud.tencent.com/document/product/876) - [云开发使用指南](https://cloud.tencent.com/document/product/876)

@ -6,13 +6,15 @@ title: 在 Windows 服务器上部署
在继续操作之前,我们推荐您先阅读[《写在前面》](/getting-started/prepare),这可以快速帮助你了解 Halo。 在继续操作之前,我们推荐您先阅读[《写在前面》](/getting-started/prepare),这可以快速帮助你了解 Halo。
::: :::
# 系统要求 ## 系统要求
目前运行 Halo 的最低依赖要求为 JRE 11而 Java9 之后将不再提供 32 位系统的环境,因此请确保您的服务器属于 64 位 CPU。 目前运行 Halo 的最低依赖要求为 JRE 11而 Java9 之后将不再提供 32 位系统的环境,因此请确保您的服务器属于 64 位 CPU。
# 依赖检查 ## 依赖检查
如下将介绍在 Windows 下安装 OpenJRE 11 的方式。如果您的服务器已经安装过 OpenJRE 11则可以直接跳过本节。 如下将介绍在 Windows 下安装 OpenJRE 11 的方式。如果您的服务器已经安装过 OpenJRE 11则可以直接跳过本节。
1. 使用浏览器前往 https://developers.redhat.com/content-gateway/file/java-11-openjdk-jre-11.0.10.9-1.windows.redhat.x86_64.msi 下载 OpenJRE 11 的可执行程序。 1. 使用浏览器前往 <https://developers.redhat.com/content-gateway/file/java-11-openjdk-jre-11.0.10.9-1.windows.redhat.x86_64.msi> 下载 OpenJRE 11 的可执行程序。
2. 下载时会提示登录“红帽”,任意注册账号登录即可。登录完成之后会自动下载 JRE。 2. 下载时会提示登录“红帽”,任意注册账号登录即可。登录完成之后会自动下载 JRE。
@ -21,7 +23,8 @@ title: 在 Windows 服务器上部署
![img2.png](/img/img2.png) ![img2.png](/img/img2.png)
4. 安装完成之后, 使用 <kbd>Win</kbd>+<kbd>R</kbd> 打开运行窗口并输入 `CMD` 后,回车打开 CMD 窗口。之后键入 `java -version`。显示如下所示内容即代表安装成功。 4. 安装完成之后, 使用 <kbd>Win</kbd>+<kbd>R</kbd> 打开运行窗口并输入 `CMD` 后,回车打开 CMD 窗口。之后键入 `java -version`。显示如下所示内容即代表安装成功。
```
```bash
openjdk version "11.0.10" 2021-01-19 LTS openjdk version "11.0.10" 2021-01-19 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.10+9-LTS) OpenJDK Runtime Environment 18.9 (build 11.0.10+9-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.10+9-LTS, mixed mode) OpenJDK 64-Bit Server VM 18.9 (build 11.0.10+9-LTS, mixed mode)
@ -29,10 +32,11 @@ OpenJDK 64-Bit Server VM 18.9 (build 11.0.10+9-LTS, mixed mode)
![1615618595.jpg](/img/1615618595.jpg) ![1615618595.jpg](/img/1615618595.jpg)
# 安装 Halo ## 安装 Halo
1. 下载运行包 1. 下载运行包
使用浏览器前往 https://dl.halo.run/release/halo-1.4.6.jar 下载最新版本 Halo 运行包,**并保存至桌面**。修改 Jar 包名称为 `halo.jar` 使用浏览器前往 <https://dl.halo.run/release/halo-1.4.6.jar> 下载最新版本 Halo 运行包,**并保存至桌面**。修改 Jar 包名称为 `halo.jar`
:::info :::info
如果下载速度不理想,可以[在这里](/getting-started/downloads)选择其他下载地址。 如果下载速度不理想,可以[在这里](/getting-started/downloads)选择其他下载地址。
@ -40,7 +44,7 @@ OpenJDK 64-Bit Server VM 18.9 (build 11.0.10+9-LTS, mixed mode)
2. 下载示例配置文件 2. 下载示例配置文件
使用浏览器前往 https://dl.halo.run/config/application-template.yaml 下载示例配置文件,**并保存至桌面**。修改示例配置文件名字为 `application.yaml` 使用浏览器前往 <https://dl.halo.run/config/application-template.yaml> 下载示例配置文件,**并保存至桌面**。修改示例配置文件名字为 `application.yaml`
:::tip :::tip
IE 浏览器下,配置文件可能会以文本的形式直接打开,因此推荐使用其他浏览器或下载器下载。 IE 浏览器下,配置文件可能会以文本的形式直接打开,因此推荐使用其他浏览器或下载器下载。
@ -51,16 +55,19 @@ IE 浏览器下,配置文件可能会以文本的形式直接打开,因此
4. 测试运行 Halo 4. 测试运行 Halo
使用 <kbd>Win</kbd>+<kbd>R</kbd> 打开运行窗口并输入 `CMD` 后,回车打开 CMD 窗口,并键入如下命令。 使用 <kbd>Win</kbd>+<kbd>R</kbd> 打开运行窗口并输入 `CMD` 后,回车打开 CMD 窗口,并键入如下命令。
```
```bash
cd Desktop && java -jar halo.jar cd Desktop && java -jar halo.jar
``` ```
5. 如看到类似以下日志输出,则代表启动成功。 5. 如看到类似以下日志输出,则代表启动成功。
```bash ```bash
run.halo.app.listener.StartedListener : Halo started at http://127.0.0.1:8090 run.halo.app.listener.StartedListener : Halo started at http://127.0.0.1:8090
run.halo.app.listener.StartedListener : Halo admin started at http://127.0.0.1:8090/admin run.halo.app.listener.StartedListener : Halo admin started at http://127.0.0.1:8090/admin
run.halo.app.listener.StartedListener : Halo has started successfully! run.halo.app.listener.StartedListener : Halo has started successfully!
``` ```
浏览器打开 `http://ip:端口号` 即可看到安装引导界面。 浏览器打开 `http://ip:端口号` 即可看到安装引导界面。
:::info :::info

@ -84,14 +84,16 @@ create database halodb character set utf8mb4 collate utf8mb4_bin;
代表当前系统下的 [用户目录](https://zh.wikipedia.org/wiki/%E5%AE%B6%E7%9B%AE%E5%BD%95)。 代表当前系统下的 [用户目录](https://zh.wikipedia.org/wiki/%E5%AE%B6%E7%9B%AE%E5%BD%95)。
### 运行包 ### 运行包
指 Halo 构建所产生的 Jar 包,后缀为 `.jar`。可能与其他网站应用有所区别的是Halo 仅仅只有这一个文件。而且所有数据统一保存在下面所说的 `工作目录` 指 Halo 构建所产生的 Jar 包,后缀为 `.jar`。可能与其他网站应用有所区别的是Halo 仅仅只有这一个文件。而且所有数据统一保存在下面所说的 `工作目录`
### 工作目录 ### 工作目录
指 Halo 所依赖的工作目录,在 Halo 运行的时候会在系统当前用户目录下产生一个 `.halo` 的文件夹,绝对路径为 `~/.halo`。由于这个工作目录是固定的,所以上面所说的 `运行包`不限制所存放的位置,里面通常包含下列目录或文件: 指 Halo 所依赖的工作目录,在 Halo 运行的时候会在系统当前用户目录下产生一个 `.halo` 的文件夹,绝对路径为 `~/.halo`。由于这个工作目录是固定的,所以上面所说的 `运行包`不限制所存放的位置,里面通常包含下列目录或文件:
1. `db`:存放 H2 Database 的物理文件,如果您使用 MySQL 数据库,那么不会存在这个目录。 1. `db`:存放 H2 Database 的物理文件,如果您使用 MySQL 数据库,那么不会存在这个目录。
2. `templates/themes`:里面包含用户所下载的主题。 2. `templates/themes`:里面包含用户所下载的主题。
3. `static`:相当于网站的根目录。 3. `static`:相当于网站的根目录。
4. `logs`:运行日志目录。 4. `logs`:运行日志目录。
4. `upload`:附件目录。 5. `upload`:附件目录。
5. `application.yaml`:配置文件。 6. `application.yaml`:配置文件。

@ -57,11 +57,10 @@ java -jar halo.jar
5. 重启服务 5. 重启服务
``` ```bash
service halo start service halo start
``` ```
## Docker <i class="mdi mdi-docker"></i> ## Docker <i class="mdi mdi-docker"></i>
> 我们假设您的容器是按照 [使用 Docker 部署 Halo](/getting-started/install/docker) 中的命令构建的。如有不同,请根据实际情况修改。 > 我们假设您的容器是按照 [使用 Docker 部署 Halo](/getting-started/install/docker) 中的命令构建的。如有不同,请根据实际情况修改。
@ -93,7 +92,7 @@ docker pull halohub/halo:1.4.17
``` ```
:::info :::info
查看最新版本镜像https://hub.docker.com/r/halohub/halo ,我们推荐使用具体版本号的镜像,但也提供了 `latest` 标签的镜像,它始终是最新的。 查看最新版本镜像:<https://hub.docker.com/r/halohub/halo> ,我们推荐使用具体版本号的镜像,但也提供了 `latest` 标签的镜像,它始终是最新的。
::: :::
4. 创建容器 4. 创建容器
@ -101,6 +100,7 @@ docker pull halohub/halo:1.4.17
```bash ```bash
docker run -it -d --name halo -p 8090:8090 -v ~/.halo:/root/.halo --restart=unless-stopped halohub/halo:1.4.17 docker run -it -d --name halo -p 8090:8090 -v ~/.halo:/root/.halo --restart=unless-stopped halohub/halo:1.4.17
``` ```
- **-it** 开启输入功能并连接伪终端 - **-it** 开启输入功能并连接伪终端
- **-d** 后台运行容器 - **-d** 后台运行容器
- **--name** 为容器指定一个名称 - **--name** 为容器指定一个名称

@ -29,7 +29,7 @@ description: 系统功能的相关配置说明
很多人反映评论中自己的头像不显示,其实评论部分调用的头像并不是在个人资料中设置的那个,而是 `Gravatar`。所以这一点怪我,从 Halo 发布至今我都没有说明这个事情。 很多人反映评论中自己的头像不显示,其实评论部分调用的头像并不是在个人资料中设置的那个,而是 `Gravatar`。所以这一点怪我,从 Halo 发布至今我都没有说明这个事情。
至于什么是 `Gravatar`,引用 `Gravatar` 官方的说明:`全球公认的头像`。这可不是在吹牛,因为只要接入了 Gravatar 的网站,你在网站上使用在 Gravatar 注册的邮箱之后,都会显示你设置的头像,而不需要额外设置。比较出名的网站有 `Github``Gitlab``V2ex` 等。所以点击 https://cn.gravatar.com/ 注册一个吧。 至于什么是 `Gravatar`,引用 `Gravatar` 官方的说明:`全球公认的头像`。这可不是在吹牛,因为只要接入了 Gravatar 的网站,你在网站上使用在 Gravatar 注册的邮箱之后,都会显示你设置的头像,而不需要额外设置。比较出名的网站有 `Github``Gitlab``V2ex` 等。所以点击 <https://cn.gravatar.com/> 注册一个吧。
## 设置用户头像/Logo/Favicon ## 设置用户头像/Logo/Favicon
@ -158,8 +158,8 @@ A诸如百度统计CNZZGoogle Analytics。可以非常详细的统计
点击主题下方的设置按钮即可进入主题设置。另外主题设置还有一种预览模式,可以实时查看主题设置变更后的效果。当你设置当前激活主题的时候,在页面右下角有一个 `预览模式` 的按钮,点击即可进入预览模式。 点击主题下方的设置按钮即可进入主题设置。另外主题设置还有一种预览模式,可以实时查看主题设置变更后的效果。当你设置当前激活主题的时候,在页面右下角有一个 `预览模式` 的按钮,点击即可进入预览模式。
## 设置备案信息 ## 设置备案信息
由于后台博客设置并没有提供设置备案信息的选项,所以有很多人不知道该怎么添加备案信息,这里简单说明一下。
由于后台博客设置并没有提供设置备案信息的选项,所以有很多人不知道该怎么添加备案信息,这里简单说明一下。
第一步: 第一步:
@ -167,7 +167,6 @@ A诸如百度统计CNZZGoogle Analytics。可以非常详细的统计
这时候你应该可以看到一个`页脚信息`的选项,而且有提示 `支持 HTML 格式的文本`。所以我们把备案信息放在这里即可。 这时候你应该可以看到一个`页脚信息`的选项,而且有提示 `支持 HTML 格式的文本`。所以我们把备案信息放在这里即可。
第二步: 第二步:
将整理好的备案信息填写到页脚信息即可,如果没记错的话,公安联网备案是有提供`网站公安机关备案号`和`备案编号HTML代码`的。 将整理好的备案信息填写到页脚信息即可,如果没记错的话,公安联网备案是有提供`网站公安机关备案号`和`备案编号HTML代码`的。

@ -9,21 +9,27 @@ Halo 使用的 `Markdown` 解析器为 [flexmark-java](https://github.com/vsch/f
## 代码块 ## 代码块
```language ````markdown
代码块 ```language
``` 代码块
```
````
其中language 为必填,如果不填写,很可能主题的代码高亮插件无法识别代码的语言,导致样式异常。举几个例子: 其中language 为必填,如果不填写,很可能主题的代码高亮插件无法识别代码的语言,导致样式异常。举几个例子:
```java ````markdown
public static void main(String[] args){ ```java
    System.out.println("Hello World!"); public static void main(String[] args){
}     System.out.println("Hello World!");
``` }
```
````
```javascript ````markdown
console.log("Hello World!") ```javascript
``` console.log("Hello World!")
```
````
## TOC ## TOC
@ -33,9 +39,9 @@ Halo 使用的 `Markdown` 解析器为 [flexmark-java](https://github.com/vsch/f
支持自动将一个链接解析为可点击的格式,如下: 支持自动将一个链接解析为可点击的格式,如下:
````markdown ```markdown
https://halo.run https://halo.run
```` ```
将被解析为: 将被解析为:
@ -177,21 +183,21 @@ Halo 内置一些短连接以更好地支持一些 HTML 语法,但是编辑器
## 脚注 ## 脚注
#### 语法 语法
```markdown ```markdown
[^脚注名] [^脚注名]
[^脚注名]: 脚注内容 [^脚注名]: 脚注内容
``` ```
#### 示例 示例
```markdown ```markdown
驿外[^1]断桥边,寂寞开无主。已是黄昏独自愁,更着风和雨 驿外[^1]断桥边,寂寞开无主。已是黄昏独自愁,更着风和雨
[^1]: 驿指荒僻、冷清之地。驿驿站。 [^1]: 驿指荒僻、冷清之地。驿驿站。
``` ```
#### 解析结果 解析结果
```html ```html
<p>驿外<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>断桥边,寂寞开无主。已是黄昏独自愁,更着风和雨</p> <p>驿外<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>断桥边,寂寞开无主。已是黄昏独自愁,更着风和雨</p>

Loading…
Cancel
Save