From 95971a90df7959966e8c99571e5f4708d7124b5b Mon Sep 17 00:00:00 2001 From: Ryan Wang Date: Fri, 30 Sep 2022 21:20:18 +0800 Subject: [PATCH] docs: documentation for Halo 2.0 (#92) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 提供 Halo 2.0 的文档。 TODO list: - [x] Halo 2.0 的配置文档 - [ ] ~~插件/主题开发的简要文档~~ ```release-note 提供 Halo 2.0 的文档 ``` --- docs/developer-guide/core/prepare.md | 133 +---------- docs/developer-guide/plugin/prepare.md | 6 + docs/developer-guide/theme/prepare.md | 72 +----- .../install/{other => }/docker-compose.md | 104 +-------- docs/getting-started/install/docker.md | 74 +++--- docs/getting-started/install/linux.md | 210 +++++++++--------- docs/getting-started/prepare.md | 35 ++- docs/getting-started/upgrade.md | 118 +++++----- docusaurus.config.js | 7 + i18n/zh-Hans/code.json | 102 ++++----- .../current.json | 18 +- sidebars.js | 68 +++--- 12 files changed, 320 insertions(+), 627 deletions(-) create mode 100644 docs/developer-guide/plugin/prepare.md rename docs/getting-started/install/{other => }/docker-compose.md (64%) diff --git a/docs/developer-guide/core/prepare.md b/docs/developer-guide/core/prepare.md index c75512b..52ad99b 100644 --- a/docs/developer-guide/core/prepare.md +++ b/docs/developer-guide/core/prepare.md @@ -3,135 +3,4 @@ title: 相关说明 description: 开发环境的一些说明 --- -## 所需要的环境 - -1. IDE:[IntelliJ IDEA](https://www.jetbrains.com/idea/download/) 或者 [STS](https://spring.io/tools)(Spring Tools Suite) -2. 工具:[Gradle](https://gradle.org/),[Lombok](https://projectlombok.org/) 插件 -3. JDK:`11+` - -> 推荐 IntelliJ IDEA 社区版(开源免费) - -`Halo` 项目使用了 `Lombok`,运行 `Halo` 之前请检查 `IDE` 是否已经安装好了 `Lombok` 插件。 - -如果使用的 `IDE` 是 `IntelliJ IDEA`,请在设置中启用 `Build, Execution, Deployment/Annotation Processors` 的 `Enable annotation processing`。 - -如果仍然因为 `Lombok` 报错,请更新 `IntelliJ IDEA` 至最新版。 - -## 克隆项目(Optional) - -如果你已经 `fork` 了 [`Halo`](https://github.com/halo-dev/halo),请将以下命令中的 `halo-dev` 替换为你的 `GitHub 用户名`。 - -```bash -git clone --recursive https://github.com/halo-dev/halo - -// 如果你在 GitHub 上已经添加了你的 ssh key,请使用以下命令进行 clone: -git clone --recursive git@github.com:halo-dev/halo.git -``` - -这里推荐使用第二种方式进行克隆,这样每次提交代码的时候,就不会提示登录 `GitHub` 了。 - -## 导入项目 - -导入项目的时候请选择 `Gradle 项目`进行导入。 - -> `IntelliJ IDEA` 在导入项目的时候请勾选 `auto import`,推荐使用 `gradle wrapper`。 - -## 运行方式 - -`Halo` 运行方式总体来讲有以下两种: - -### 直接运行 `Application` 主类(配合 IDE 运行) - -如果需要指定配置,请在 `Run/Debug Configuration` 内进行设置 `VM options`(这里推荐采用上文的[自定义配置](#%E8%87%AA%E5%AE%9A%E4%B9%89%E9%85%8D%E7%BD%AE)),例如: - -```ini --Dspring.profiles.active=dev --Dhalo.auth-enabled=false --Dhalo.production-env=false -``` - -### 采用 `gradle bootRun task` 运行(不需要 IDE) - -在项目根目录下运行以下命令: - -```bash -# 类 Unix 用户 -./gradlew bootRun - -# Windows 用户 -./gradlew.bat bootRun -``` - -如果需要手动指定配置,可添加 `--args` 参数(这里推荐采用上文的[自定义配置](#%E8%87%AA%E5%AE%9A%E4%B9%89%E9%85%8D%E7%BD%AE)),例如: - -```bash -# 类 Unix 用户 -./gradlew bootRun --args="--spring.profiles.active=dev --server.port=2333" - -# Windows 用户 -./gradlew.bat bootRun --args="--spring.profiles.active=dev --server.port=2333" -``` - -如果一切正常且没有额外指定配置,则可根据控制台的输出链接进行访问 `Halo`: - -```java -2019-06-06 16:20:52.285 INFO 1330 --- [ restartedMain] run.halo.app.listener.StartedListener : Halo started at http://127.0.0.1:8090 -2019-06-06 16:20:52.285 INFO 1330 --- [ restartedMain] run.halo.app.listener.StartedListener : Halo admin started at http://127.0.0.1:8090/admin -2019-06-06 16:20:52.285 DEBUG 1330 --- [ restartedMain] run.halo.app.listener.StartedListener : Halo doc was enable at http://127.0.0.1:8090/swagger-ui.html # 仅在开发环境才会输出 -``` - -首次运行的时候,会跳转到博客安装页面,请大家耐心填写完毕,最后正式进入`开发之旅`。 - -这里推荐一个配置: - -| key | value | -| :----- | :------------ | -| 用户名 | test | -| 昵称 | test | -| 邮箱 | test@test.com | -| 密码 | opentest | - ---- - -## 高级配置 - -### 调整启动参数(VMoptions) - -运行命令中添加 `VM options`,例如: - -```ini --Dspring.profiles.active=dev -``` - -### 调整启动参数(args) - -运行命令中添加参数,例如: - -```ini ---spring.profiles.active=dev -``` - -`IDE` 一般都会提供一个 `Run/Debug 配置`,可以添加 `VM options` 和 `参数`。以上示例可以直接应用在以`命令运行`方式上。 - -### 启用自动构建(Build project automatically) - -在开发环境下,修改代码之后,每次都需要重启应用,是一个非常耗时的操作。 - -有一个专门解决这个问题的工具,那就是 [JRebel](https://jrebel.com/),但是它的费用实在是太昂贵,作为普通的开发者很难承受这笔费用(但**不推荐**使用破解版)。 - -于是 `Halo` 最后采用了 `Spring Boot` 官方推荐的 [Developer Tools](https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-devtools.html)。 - -这里以 `IntelliJ IDEA` 为例。 - -1. 进入 `Settings` (Preferences on macOS)。 -2. 打开 `Build, Execution, Deployment > Compiler`. 启用 `Build project automatically`。 -3. 点击 `应用`。 -4. 按 `Ctrl+Shift+A` (Cmd+Shift+A on macOS)快捷键,然后搜索 `Registry`。打开之后找到 `compiler.automake.allow.when.app.running`,并启用它 (IntelliJ IDEA 15 and newer)。 - -> 来源于 - -Developer Tools 原理 - -在保存代码的时候,`IDE` 会自动为我们编译代码,`Developer Tools` 检测到代码的 `class 文件`(只能检测 `classpath` 下的 `class 文件`)的变更,会自动重启项目。注意,这里的重启速度会有质的提升,具体原因是 `Spring Boot` 提供的 `restart 技术`提供了两个 `classloaders`:`base classloader` 和 `restart classloader`。当项目重启的时候 `restart classloader` 将会被抛弃,并重启创建一个,这比 `code starts`(冷启动)快很多。当然,肯定是比不上 `JRebel` 采用的 `Reload 技术`。 - -更多细节请查阅: [Automatic Restart](https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-devtools.html#using-boot-devtools-restart) +WIP diff --git a/docs/developer-guide/plugin/prepare.md b/docs/developer-guide/plugin/prepare.md new file mode 100644 index 0000000..7233ca3 --- /dev/null +++ b/docs/developer-guide/plugin/prepare.md @@ -0,0 +1,6 @@ +--- +title: 准备工作 +description: 插件开发的准备工作 +--- + +WIP diff --git a/docs/developer-guide/theme/prepare.md b/docs/developer-guide/theme/prepare.md index 80b1686..788febe 100644 --- a/docs/developer-guide/theme/prepare.md +++ b/docs/developer-guide/theme/prepare.md @@ -3,74 +3,4 @@ title: 准备工作 description: 主题开发的环境搭建 --- -:::info -Halo 的模板引擎为 FreeMarker,建议在开发 Halo 的主题之前,先阅读一遍 FreeMarker 的相关文档:。 -::: - -## 搭建开发环境 - -> 假设你已经在本地电脑配置好了 Java 开发环境。 - -Halo 的运行可参考上述 [系统开发](/developer-guide/core/prepare),或者直接下载打包好的程序启动,如下步骤: - -1. 从 [GitHub release](https://github.com/halo-dev/halo/releases) 或者 [https://dl.halo.run](https://dl.halo.run) 下载最新的运行包。 -2. 在终端中执行 `java -jar halo.jar --spring.profiles.active=dev` - -启动完成之后,在电脑的用户目录即可看到 `halo-dev` 文件夹。 - -## 新建主题 - -1. 在 `~/halo-dev/templates/themes` 下新建一个文件夹,该文件夹就是你所新建的主题目录。 -2. 使用你熟悉的编辑器打开你所新建的主题目录,这里我们推荐使用 [Visual Studio Code](https://code.visualstudio.com),并安装 [FreeMarker](https://marketplace.visualstudio.com/items?itemName=dcortes92.FreeMarker) 扩展。 - -:::info -我们同样为 Halo 主题开发了一个 `Visual Studio Code` Snippets 扩展,以简化一些操作,但目前处于 beta 状态,有需要的可以试试 [Halo theme develop Snippets](https://marketplace.visualstudio.com/items?itemName=halo-dev.halo-theme-dev-snippets-for-vs-code)。 -::: - -## 开发约定 - -- 主题目录下必须存在 `theme.yaml(主题描述文件)`,`settings.yaml(主题配置文件)`,相关格式在后面会详细讲解。 -- 如果要开源到 GitHub 我们建议将仓库名设置为 `halo-theme-主题名`,并设置仓库的 `topic` 为 `halo` 和 `halo-theme`,这样可以方便使用者搜索。 -- 所有模板文件的后缀为 `.ftl`。 -- 主题目录需要以 `screenshot.png` 命名的预览图片,以供后台展示。 - -## 开发样板 - -> 为了让开发者更快速的上手主题的开发,我们提供了一个简单的开发样板以供参考。 - -仓库地址: - -## 目录结构 - -> 为了让开发更加规范,我们推荐使用以下的目录结构。 - -```txt -├── module // 公共模板目录 -│   ├── comment.ftl // 比如:评论模板 -│   ├── layout.ftl // 比如:布局模板 -├── source // 静态资源目录 -│   ├── css // 样式目录 -│   ├── images // 图片目录 -│   ├── js // JS 脚本目录 -│   └── plugins // 前端库目录 -├── index.ftl // 首页 -├── post.ftl // 文章页 -├── post_xxx.ftl // 自定义文章模板,如:post_diary.ftl。可在后台发布文章时选择。 -├── sheet.ftl // 自定义页面 -├── sheet_xxx.ftl // 自定义模板,如:sheet_search.ftl、sheet_author.ftl。可在后台发布页面时选择。 -├── archives.ftl // 归档页 -├── categories.ftl // 分类目录页 -├── category.ftl // 单个分类的所属文章页 -├── tags.ftl // 标签页面 -├── tag.ftl // 单个标签的所属文章页 -├── search.ftl // 搜索结果页 -├── links.ftl // 内置页面:友情链接 -├── photos.ftl // 内置页面:图库 -├── journals.ftl // 内置页面:日志 -├── 404.ftl // 404 页 -├── 500.ftl // 500 页 -├── README.md // README,一般用于主题介绍或说明 -├── screenshot.png // 主题预览图 -├── settings.yaml // 主题选项配置文件 -└── theme.yaml // 主题描述文件 -``` +WIP diff --git a/docs/getting-started/install/other/docker-compose.md b/docs/getting-started/install/docker-compose.md similarity index 64% rename from docs/getting-started/install/other/docker-compose.md rename to docs/getting-started/install/docker-compose.md index d64983c..1d87401 100644 --- a/docs/getting-started/install/other/docker-compose.md +++ b/docs/getting-started/install/docker-compose.md @@ -1,6 +1,6 @@ --- -title: 使用 Docker Compose 部署 Halo -description: 使用 Docker Compose 部署 Halo +title: 使用 Docker Compose 部署 +description: 使用 Docker Compose 部署 --- :::info @@ -12,7 +12,7 @@ description: 使用 Docker Compose 部署 Halo 1. 在系统任意位置创建一个文件夹,此文档以 `~/halo-app` 为例。 ```bash - mkdir ~/halo-app && cd ~/halo-app + mkdir ~/halo-next && cd ~/halo-next ``` :::info @@ -34,7 +34,7 @@ description: 使用 Docker Compose 部署 Halo services: halo: - image: halohub/halo:1.5.4 + image: halohub/halo-dev:next container_name: halo restart: on-failure:3 volumes: @@ -54,21 +54,21 @@ description: 使用 Docker Compose 部署 Halo ``` :::info - 您可以前往 查看最新版本镜像,我们推荐使用具体版本号的镜像,但也提供了 `latest` 标签的镜像,它始终是最新的。 + 您可以前往 查看最新版本镜像,需要注意的是,`halohub/halo-dev` 仅作为 Halo 2.0 测试期间的镜像,正式发布之后会有改动。 ::: - 2. 创建 Halo + MySQL 的实例: + 2. 创建 Halo + PostgreSQL 的实例: ```yaml {22-23,45} version: "3" services: halo_server: - image: halohub/halo:1.5.4 + image: halohub/halo-dev:next container_name: halo_server restart: on-failure:3 depends_on: - - halo_mysql + - halo_db networks: halo_network: volumes: @@ -86,9 +86,9 @@ description: 使用 Docker Compose 部署 Halo - HALO_ADMIN_PATH=admin - HALO_CACHE=memory - halo_mysql: + halo_db: image: mysql:8.0.27 - container_name: halo_mysql + container_name: halo_db restart: on-failure:3 networks: halo_network: @@ -111,78 +111,6 @@ description: 使用 Docker Compose 部署 Halo halo_network: ``` - 3. 创建 Halo + MySQL + Redis 的实例: - - ```yaml {22-23,29,49,62} - version: "3" - - services: - halo_server: - image: halohub/halo:1.5.4 - container_name: halo_server - restart: on-failure:3 - depends_on: - - halo_mysql - - halo_redis - networks: - halo_network: - volumes: - - ./:/root/.halo - - /etc/timezone:/etc/timezone:ro - - /etc/localtime:/etc/localtime:ro - ports: - - "8090:8090" - environment: - - SERVER_PORT=8090 - - SPRING_DATASOURCE_DRIVER_CLASS_NAME=com.mysql.cj.jdbc.Driver - - SPRING_DATASOURCE_URL=jdbc:mysql://halo_mysql:3306/halodb?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true - - SPRING_DATASOURCE_USERNAME=root - - SPRING_DATASOURCE_PASSWORD=o#DwN&JSa56 - - HALO_ADMIN_PATH=admin - - HALO_CACHE=redis - - SPRING_REDIS_PORT=6379 - - SPRING_REDIS_DATABASE=0 - - SPRING_REDIS_HOST=halo_redis - - SPRING_REDIS_PASSWORD=dm5fD%rvPtq - - halo_mysql: - image: mysql:8.0.27 - container_name: halo_mysql - restart: on-failure:3 - networks: - halo_network: - command: --default-authentication-plugin=mysql_native_password - --character-set-server=utf8mb4 - --collation-server=utf8mb4_general_ci - --explicit_defaults_for_timestamp=true - volumes: - - /etc/localtime:/etc/localtime:ro - - ./mysql:/var/lib/mysql - - ./mysqlBackup:/data/mysqlBackup - ports: - - "3306:3306" - environment: - # 请修改此密码,并对应修改上方 Halo 服务的 SPRING_DATASOURCE_PASSWORD 变量值 - - MYSQL_ROOT_PASSWORD=o#DwN&JSa56 - - MYSQL_DATABASE=halodb - - halo_redis: - image: redis - container_name: halo_redis - restart: on-failure:3 - networks: - halo_network: - volumes: - - ./redis/data:/data - - ./redis/logs:/logs - # 请修改此密码,并对应修改上方 Halo 服务的 SPRING_REDIS_PASSWORD 变量值 - command: redis-server --requirepass dm5fD%rvPtq - ports: - - "6379:6379" - networks: - halo_network: - ``` - 3. 启动 Halo 服务 ```bash @@ -264,17 +192,9 @@ reverse_proxy 127.0.0.1:8090 > 需要注意的是,`halo-app.archive` 文件名不一定要根据此文档命名,这里仅仅是个示例。 -3. 清空 [leveldb 或 Redis](../../config.md#缓存) 缓存(如果有使用 leveldb 或 Redis 作为缓存策略) - - ```bash - rm -rf ~/halo-app/.leveldb - - rm -rf ~/halo-app/redis - ``` - -4. 更新 Halo 服务 +5. 更新 Halo 服务 - 针对使用 `latest` 标签镜像的更新: + 针对使用 `next` 标签镜像的更新: ```bash docker-compose pull && docker-compose up -d diff --git a/docs/getting-started/install/docker.md b/docs/getting-started/install/docker.md index 27babdd..e7a3d39 100644 --- a/docs/getting-started/install/docker.md +++ b/docs/getting-started/install/docker.md @@ -1,5 +1,5 @@ --- -title: 使用 Docker 部署 Halo +title: 使用 Docker 部署 description: 使用 Docker 部署 --- @@ -9,58 +9,42 @@ description: 使用 Docker 部署 ## 使用 Docker 镜像 -Halo 在 Docker Hub 上发布的镜像为 [halohub/halo](https://hub.docker.com/r/halohub/halo) +可用的 Halo 2.0.0-alpha.1 的 Docker 镜像: -1. 创建 [工作目录](../prepare#工作目录) +- [halohub/halo-dev](https://hub.docker.com/r/halohub/halo-dev) +- [ghcr.io/halo-dev/halo-dev](https://github.com/halo-dev/halo/pkgs/container/halo-dev) -```bash -mkdir ~/.halo && cd ~/.halo -``` - -2. 下载示例配置文件到 [工作目录](../prepare#工作目录) +> 注意:以上两个镜像仅作为 Halo 2.0 测试期间的镜像,正式发布之后会更改为 `halohub/halo` 和 `ghcr.io/halo-dev/halo`。 -```bash -wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml -``` +1. 创建容器 -3. 编辑配置文件,配置数据库或者端口等,如需配置请参考 [配置参考](../config) - -```bash -vim application.yaml -``` + ```bash + docker run \ + -it -d \ + --name halo-next \ + -p 8090:8090 \ + -v ~/halo-next:/root/halo-next \ + -e HALO_EXTERNAL_URL=http://localhost:8090/ \ # 请修改外部访问链接 + -e HALO_SECURITY_INITIALIZER_SUPERADMINPASSWORD=P@88w0rd \ # 请修改管理员密码 + halohub/halo-dev:2.0.0-alpha.1 + ``` -4. 拉取最新的 Halo 镜像 + :::info + 注意:此命令默认使用自带的 H2 Database 数据库。如需使用 PostgreSQL,请参考:[使用 Docker Compose 部署](./docker-compose) + ::: -```bash -docker pull halohub/halo:1.5.4 -``` - -:::info -查看最新版本镜像: ,我们推荐使用具体版本号的镜像,但也提供了 `latest` 标签的镜像,它始终是最新的。 -::: + - **-it:** 开启输入功能并连接伪终端 + - **-d:** 后台运行容器 + - **--name:** 为容器指定一个名称 + - **-p:** 端口映射,格式为 `主机(宿主)端口:容器端口` ,可在 `application.yaml` 配置。 + - **-v:** 工作目录映射。形式为:`-v 宿主机路径:/root/halo-next`,后者不能修改。 + - **--restart:** 建议设置为 `unless-stopped`,在 Docker 启动的时候自动启动 Halo 容器。 -5. 创建容器 +1. 用浏览器访问 `$HALO_EXTERNAL_URL/console/`(外部访问链接)即可进入 Halo 管理端。 -```bash -docker run -it -d --name halo -p 8090:8090 -v ~/.halo:/root/.halo --restart=unless-stopped halohub/halo:1.5.4 -``` - -:::info -注意:此命令默认使用自带的 H2 Database 数据库。如需使用 MySQL,请参考:[使用 Docker 部署 Halo 和 MySQL](./other/docker-mysql) -::: - -- **-it:** 开启输入功能并连接伪终端 -- **-d:** 后台运行容器 -- **--name:** 为容器指定一个名称 -- **-p:** 端口映射,格式为 `主机(宿主)端口:容器端口` ,可在 `application.yaml` 配置。 -- **-v:** 工作目录映射。形式为:-v 宿主机路径:/root/.halo,后者不能修改。 -- **--restart:** 建议设置为 `unless-stopped`,在 Docker 启动的时候自动启动 Halo 容器。 - -6. 打开 `http://ip:端口号` 即可看到安装引导界面。 - -:::tip -如果需要配置域名访问,建议先配置好反向代理以及域名解析再进行初始化。如果通过 `http://ip:端口号` 的形式无法访问,请到服务器厂商后台将运行的端口号添加到安全组,如果服务器使用了 Linux 面板,请检查此 Linux 面板是否有还有安全组配置,需要同样将端口号添加到安全组。 -::: + :::tip + 如果需要配置域名访问,建议先配置好反向代理以及域名解析再进行初始化。如果通过 `http://ip:端口号` 的形式无法访问,请到服务器厂商后台将运行的端口号添加到安全组,如果服务器使用了 Linux 面板,请检查此 Linux 面板是否有还有安全组配置,需要同样将端口号添加到安全组。 + ::: ## 反向代理 diff --git a/docs/getting-started/install/linux.md b/docs/getting-started/install/linux.md index bc99751..0f2db9b 100644 --- a/docs/getting-started/install/linux.md +++ b/docs/getting-started/install/linux.md @@ -16,7 +16,7 @@ description: 在 Linux 上快速安装 Halo ### CentOS ```bash -sudo yum install java-11-openjdk -y +sudo yum install java-17-openjdk -y ``` 检查版本: @@ -28,15 +28,15 @@ java -version 如果输出以下类似内容即代表成功 ```bash -openjdk version "11.0.10" 2021-01-19 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, sharing) +openjdk version "17.0.4.1" 2022-08-12 +OpenJDK Runtime Environment Homebrew (build 17.0.4.1+1) +OpenJDK 64-Bit Server VM Homebrew (build 17.0.4.1+1, mixed mode, sharing) ``` ### Ubuntu ```bash -sudo apt-get install openjdk-11-jre -y +sudo apt-get install openjdk-17-jre -y ``` 检查版本: @@ -48,176 +48,176 @@ java -version 如果输出以下类似内容即代表成功 ```bash -openjdk version "11.0.10" 2021-01-19 -OpenJDK Runtime Environment (build 11.0.10+9-Ubuntu-0ubuntu1.20.04) -OpenJDK 64-Bit Server VM (build 11.0.10+9-Ubuntu-0ubuntu1.20.04, mixed mode) +openjdk version "17.0.4.1" 2022-08-12 +OpenJDK Runtime Environment Homebrew (build 17.0.4.1+1) +OpenJDK 64-Bit Server VM Homebrew (build 17.0.4.1+1, mixed mode, sharing) ``` ## 安装 1. 创建新的系统用户 -:::info -我们不推荐直接使用系统 root 用户来运行 Halo。如果您需要直接使用 root 用户,请跳过这一步。 -::: + :::info + 我们不推荐直接使用系统 root 用户来运行 Halo。如果您需要直接使用 root 用户,请跳过这一步。 + ::: -创建一个名为 halo 的用户(名字可以随意) + 创建一个名为 halo 的用户(名字可以随意) -```bash -useradd -m halo -``` + ```bash + useradd -m halo + ``` -给予 sudo 权限 + 给予 sudo 权限 -```bash -usermod -aG wheel halo -``` + ```bash + usermod -aG wheel halo + ``` -为 halo 用户创建密码 + 为 halo 用户创建密码 -```bash -passwd halo -``` + ```bash + passwd halo + ``` -登录到 halo 账户 + 登录到 halo 账户 -```bash -su - halo -``` + ```bash + su - halo + ``` 2. 创建存放 [运行包](../prepare#运行包) 的目录,这里以 `~/app` 为例 -```bash -mkdir ~/app && cd ~/app -``` + ```bash + mkdir ~/app && cd ~/app + ``` 3. 下载运行包 -```bash -wget https://dl.halo.run/release/halo-1.5.4.jar -O halo.jar -``` + ```bash + wget https://dl.halo.run/prerelease/halo-2.0-alpha.1.jar -O halo.jar + ``` -:::info -如果下载速度不理想,可以 [在这里](../downloads) 选择其他下载地址。 -::: + :::info + 如果下载速度不理想,可以 [在这里](../downloads) 选择其他下载地址。 + ::: 4. 创建 [工作目录](../prepare#工作目录) -```bash -mkdir ~/.halo && cd ~/.halo -``` + ```bash + mkdir ~/halo-next && cd ~/halo-next + ``` 5. 下载示例配置文件到 [工作目录](../prepare#工作目录) -```bash -wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml -``` + ```bash + wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml + ``` 6. 编辑配置文件,配置数据库或者端口等,如需配置请参考 [配置参考](../config) -```bash -vim application.yaml -``` + ```bash + vim application.yaml + ``` 7. 测试运行 Halo -```bash -cd ~/app && java -jar halo.jar -``` + ```bash + cd ~/app && java -jar halo.jar + ``` 8. 如看到类似以下日志输出,则代表启动成功。 -```bash -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 has started successfully! -``` + ```bash + 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 has started successfully! + ``` -打开 `http://ip:端口号` 即可看到安装引导界面。 + 打开 `http://ip:端口号` 即可看到安装引导界面。 -:::info -如测试启动正常,请继续看`作为服务运行`部分,第 8 步仅仅作为测试。当你关闭 ssh 连接之后,服务会停止。你可使用 CTRL+C 停止运行测试进程。 -::: + :::info + 如测试启动正常,请继续看`作为服务运行`部分,第 8 步仅仅作为测试。当你关闭 ssh 连接之后,服务会停止。你可使用 CTRL+C 停止运行测试进程。 + ::: -:::tip -如果需要配置域名访问,建议先配置好反向代理以及域名解析再进行初始化。如果通过 `http://ip: 端口号` 的形式无法访问,请到服务器厂商后台将运行的端口号添加到安全组,如果服务器使用了 Linux 面板,请检查此 Linux 面板是否有还有安全组配置,需要同样将端口号添加到安全组。 -::: + :::tip + 如果需要配置域名访问,建议先配置好反向代理以及域名解析再进行初始化。如果通过 `http://ip: 端口号` 的形式无法访问,请到服务器厂商后台将运行的端口号添加到安全组,如果服务器使用了 Linux 面板,请检查此 Linux 面板是否有还有安全组配置,需要同样将端口号添加到安全组。 + ::: ## 作为服务运行 1. 退出 halo 账户,登录到 root 账户 -> 如果当前就是 root 账户,请略过此步骤。 + > 如果当前就是 root 账户,请略过此步骤。 -```bash -exit -``` + ```bash + exit + ``` 2. 下载 Halo 官方的 halo.service 模板 -```bash -wget https://dl.halo.run/config/halo.service -O /etc/systemd/system/halo.service -``` + ```bash + wget https://dl.halo.run/config/halo.service -O /etc/systemd/system/halo.service + ``` 3. 修改 halo.service -```bash -vim /etc/systemd/system/halo.service -``` + ```bash + vim /etc/systemd/system/halo.service + ``` 4. 修改配置 -- **YOUR_JAR_PATH**:Halo 运行包的绝对路径,例如 `/home/halo/app/halo.jar`,注意:此路径不支持 `~` 符号。 -- **USER**:运行 Halo 的系统用户,如果有按照上方教程创建新的用户来运行 Halo,修改为你创建的用户名称即可。反之请删除 `User=USER`。 + - **YOUR_JAR_PATH**:Halo 运行包的绝对路径,例如 `/home/halo/app/halo.jar`,注意:此路径不支持 `~` 符号。 + - **USER**:运行 Halo 的系统用户,如果有按照上方教程创建新的用户来运行 Halo,修改为你创建的用户名称即可。反之请删除 `User=USER`。 -```ini -[Unit] -Description=Halo Service -Documentation=https://halo.run -After=network-online.target -Wants=network-online.target + ```ini + [Unit] + Description=Halo Service + Documentation=https://halo.run + After=network-online.target + Wants=network-online.target -[Service] -Type=simple -User=USER -ExecStart=/usr/bin/java -server -Xms256m -Xmx256m -jar YOUR_JAR_PATH -ExecStop=/bin/kill -s QUIT $MAINPID -Restart=always -StandOutput=syslog + [Service] + Type=simple + User=USER + ExecStart=/usr/bin/java -server -Xms256m -Xmx256m -jar YOUR_JAR_PATH + ExecStop=/bin/kill -s QUIT $MAINPID + Restart=always + StandOutput=syslog -StandError=inherit + StandError=inherit -[Install] -WantedBy=multi-user.target -``` + [Install] + WantedBy=multi-user.target + ``` -:::tip -请确保 `/usr/bin/java` 是正确无误的。建议将 `ExecStart` 中的命令复制出来运行一下,保证命令有效。 -::: + :::tip + 请确保 `/usr/bin/java` 是正确无误的。建议将 `ExecStart` 中的命令复制出来运行一下,保证命令有效。 + ::: 5. 重新加载 systemd -```bash -systemctl daemon-reload -``` + ```bash + systemctl daemon-reload + ``` 6. 运行服务 -```bash -systemctl start halo -``` + ```bash + systemctl start halo + ``` 7. 在系统启动时启动服务 -```bash -systemctl enable halo -``` + ```bash + systemctl enable halo + ``` -您可以查看服务日志检查启动状态 + 您可以查看服务日志检查启动状态 -```bash -journalctl -n 20 -u halo -``` + ```bash + journalctl -n 20 -u halo + ``` ## 反向代理 diff --git a/docs/getting-started/prepare.md b/docs/getting-started/prepare.md index d96abdc..0e95c58 100644 --- a/docs/getting-started/prepare.md +++ b/docs/getting-started/prepare.md @@ -3,6 +3,10 @@ title: 写在前面 description: 在开始前,您需要了解的事项 --- +:::warning 提示 +当前文档是 Halo 2.0 测试阶段的文档,强烈不建议尝试将 1.5 升级到 2.0 测试版,也不建议在生产环境使用,当前版本仅用于测试。我们欢迎大家在测试过程中反馈任何问题。另外,在 Halo 2.0 正式发布的时候,我们会提供完整的升级指南。 +::: + ## 环境要求 这里将讲述运行 Halo 所要求的一些软硬件的配置,我们建议您在运行或者部署之前先浏览一遍此页面。 @@ -15,7 +19,7 @@ description: 在开始前,您需要了解的事项 #### CPU -无特别要求。目前我们的 [Docker 镜像](https://hub.docker.com/r/halohub/halo) 也已经支持多平台。 +无特别要求。目前我们的 [Docker 镜像](https://hub.docker.com/r/halohub/halo-dev) 也已经支持多平台。 #### 内存 @@ -38,25 +42,12 @@ Halo 理论上可以运行在任何支持 Java 的平台。 必须在运行环境安装好 JRE,这是运行 Halo 所要求的的最低软件环境要求。如果您使用 Docker 运行 Halo,可忽略此要求。 :::info -从 1.4.3 起,版本要求为 11 以上的版本。1.4.3 以下需要 1.8 以上的版本。 +当前版本(2.0)需要 JRE 17 的版本,推荐使用 OpenJDK 17。 ::: -#### MySQL(可选) - -这并不是 Halo 必须依赖的,Halo 默认使用自带的 `H2 Database`,无需单独安装。如果 `H2 Database` 不能满足你的要求,您需要在系统内安装并运行好 MySQL。 - -具体要求: - -1. 版本:5.7 + -2. 字符集(Character Set):`utf8mb4` -3. 排序规则(Collate):`utf8mb4_bin` -4. 存储引擎:`InnoDB` - -综上,建议创建数据库采用下面的命令: +#### PostgreSQL(可选) -```bash -create database halodb character set utf8mb4 collate utf8mb4_bin; -``` +也可以使用系统自带的 H2 Database 数据库,无需安装。但不推荐在生产环境中使用 H2 Database。 #### Web 服务器(可选) @@ -89,11 +80,11 @@ create database halodb character set utf8mb4 collate utf8mb4_bin; ### 工作目录 -指 Halo 所依赖的工作目录,在 Halo 运行的时候会在系统当前用户目录下产生一个 `.halo` 的文件夹,绝对路径为 `~/.halo`。由于这个工作目录是固定的,所以上面所说的 `运行包`不限制所存放的位置,里面通常包含下列目录或文件: +指 Halo 所依赖的工作目录,在 Halo 运行的时候会在系统当前用户目录下产生一个 `.halo-next` 的文件夹,绝对路径为 `~/.halo-next`。由于这个工作目录是固定的,所以上面所说的 `运行包`不限制所存放的位置,里面通常包含下列目录或文件: -1. `db`:存放 H2 Database 的物理文件,如果您使用 MySQL 数据库,那么不会存在这个目录。 -2. `templates/themes`:里面包含用户所下载的主题。 -3. `static`:相当于网站的根目录。 +1. `db`:存放 H2 Database 的物理文件,如果你使用其他数据库,那么不会存在这个目录。 +2. `themes`:里面包含用户所安装的主题。 +2. `plugins`:里面包含用户所安装的插件。 +5. `attachments`:附件目录。 4. `logs`:运行日志目录。 -5. `upload`:附件目录。 6. `application.yaml`:配置文件。 diff --git a/docs/getting-started/upgrade.md b/docs/getting-started/upgrade.md index 395de28..618d0c4 100644 --- a/docs/getting-started/upgrade.md +++ b/docs/getting-started/upgrade.md @@ -13,53 +13,53 @@ description: 版本升级指南 1. 停止正在运行的服务 -```bash -service halo stop -``` + ```bash + service halo stop + ``` 2. 备份数据以及旧的运行包(**重要**) -```bash -cp -r ~/.halo ~/.halo.archive -``` + ```bash + cp -r ~/.halo ~/.halo.archive + ``` -```bash -mv ~/app/halo.jar ~/app/halo.jar.archive -``` + ```bash + mv ~/app/halo.jar ~/app/halo.jar.archive + ``` -> 需要注意的是,`.halo.archive` 和 `halo.jar.archive` 文件名不一定要根据此文档命名,这里仅仅是个示例。 + > 需要注意的是,`.halo.archive` 和 `halo.jar.archive` 文件名不一定要根据此文档命名,这里仅仅是个示例。 3. 清空 [leveldb](./config.md#缓存) 缓存(如果有使用 leveldb 作为缓存策略) -```bash -rm -rf ~/.halo/.leveldb -``` + ```bash + rm -rf ~/.halo/.leveldb + ``` 4. 下载最新版本的运行包 -```bash -cd ~/app && wget https://dl.halo.run/release/halo-1.5.4.jar -O halo.jar -``` + ```bash + cd ~/app && wget https://dl.halo.run/release/halo-1.5.4.jar -O halo.jar + ``` -:::info -如果下载速度不理想,可以[在这里](/getting-started/downloads)选择其他下载地址。 -::: + :::info + 如果下载速度不理想,可以[在这里](/getting-started/downloads)选择其他下载地址。 + ::: 5. 启动测试 -```bash -java -jar halo.jar -``` + ```bash + java -jar halo.jar + ``` -:::info -如测试启动正常,请继续下一步。使用 CTRL+C 停止运行测试进程。 -::: + :::info + 如测试启动正常,请继续下一步。使用 CTRL+C 停止运行测试进程。 + ::: 6. 重启服务 -```bash -service halo start -``` + ```bash + service halo start + ``` ## Docker @@ -69,51 +69,51 @@ service halo start 1. 停止并删除当前运行中的容器 -```bash -docker stop halo -``` + ```bash + docker stop halo + ``` -```bash -docker rm -f halo -``` + ```bash + docker rm -f halo + ``` -:::info -你的容器名称不一定为 `halo`,在执行前可以先执行 `docker ps -a` 查看一下。 -::: + :::info + 你的容器名称不一定为 `halo`,在执行前可以先执行 `docker ps -a` 查看一下。 + ::: 2. 备份数据(重要) -```bash -cp -r ~/.halo ~/.halo.archive -``` + ```bash + cp -r ~/.halo ~/.halo.archive + ``` -> 需要注意的是,`.halo.archive` 文件名不一定要根据此文档命名,这里仅仅是个示例。 + > 需要注意的是,`.halo.archive` 文件名不一定要根据此文档命名,这里仅仅是个示例。 3. 清空 [leveldb](./config.md#缓存) 缓存(如果有使用 leveldb 作为缓存策略) -```bash -rm -rf ~/.halo/.leveldb -``` + ```bash + rm -rf ~/.halo/.leveldb + ``` 4. 拉取最新的 Halo 镜像 -```bash -docker pull halohub/halo:1.5.4 -``` + ```bash + docker pull halohub/halo:1.5.4 + ``` -:::info -查看最新版本镜像: ,我们推荐使用具体版本号的镜像,但也提供了 `latest` 标签的镜像,它始终是最新的。 -::: + :::info + 查看最新版本镜像: ,我们推荐使用具体版本号的镜像,但也提供了 `latest` 标签的镜像,它始终是最新的。 + ::: 5. 创建容器 -```bash -docker run -it -d --name halo -p 8090:8090 -v ~/.halo:/root/.halo --restart=unless-stopped halohub/halo:1.5.4 -``` + ```bash + docker run -it -d --name halo -p 8090:8090 -v ~/.halo:/root/.halo --restart=unless-stopped halohub/halo:1.5.4 + ``` -- **-it:** 开启输入功能并连接伪终端 -- **-d:** 后台运行容器 -- **--name:** 为容器指定一个名称 -- **-p:** 端口映射,格式为 `主机(宿主)端口:容器端口` ,可在 `application.yaml` 配置。 -- **-v:** 工作目录映射。形式为:-v 宿主机路径:/root/.halo,后者不能修改。 -- **--restart:** 建议设置为 `unless-stopped`,在 Docker 启动的时候自动启动 Halo 容器。 + - **-it:** 开启输入功能并连接伪终端 + - **-d:** 后台运行容器 + - **--name:** 为容器指定一个名称 + - **-p:** 端口映射,格式为 `主机(宿主)端口:容器端口` ,可在 `application.yaml` 配置。 + - **-v:** 工作目录映射。形式为:-v 宿主机路径:/root/.halo,后者不能修改。 + - **--restart:** 建议设置为 `unless-stopped`,在 Docker 启动的时候自动启动 Halo 容器。 diff --git a/docusaurus.config.js b/docusaurus.config.js index a0c97b6..44aceac 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -34,6 +34,13 @@ const config = { showLastUpdateAuthor: true, remarkPlugins: [math, mermaid], rehypePlugins: [katex], + lastVersion: "1.5.4", + versions: { + current: { + label: "2.0.0-SNAPSHOT", + path: "2.0.0-SNAPSHOT", + }, + }, }, blog: false, theme: { diff --git a/i18n/zh-Hans/code.json b/i18n/zh-Hans/code.json index ddae5eb..8ad0312 100644 --- a/i18n/zh-Hans/code.json +++ b/i18n/zh-Hans/code.json @@ -25,6 +25,18 @@ "message": "请联系原始链接来源网站的所有者,并告知他们链接已损坏。", "description": "The 2nd paragraph of the 404 page" }, + "theme.BackToTopButton.buttonAriaLabel": { + "message": "回到顶部", + "description": "The ARIA label for the back to top button" + }, + "theme.blog.archive.title": { + "message": "历史博文", + "description": "The page & hero title of the blog archive page" + }, + "theme.blog.archive.description": { + "message": "历史博文", + "description": "The page & hero description of the blog archive page" + }, "theme.admonition.note": { "message": "备注", "description": "The default label used for the Note admonition (:::note)" @@ -45,18 +57,6 @@ "message": "警告", "description": "The default label used for the Caution admonition (:::caution)" }, - "theme.blog.archive.title": { - "message": "历史博文", - "description": "The page & hero title of the blog archive page" - }, - "theme.blog.archive.description": { - "message": "历史博文", - "description": "The page & hero description of the blog archive page" - }, - "theme.BackToTopButton.buttonAriaLabel": { - "message": "回到顶部", - "description": "The ARIA label for the back to top button" - }, "theme.blog.paginator.navAriaLabel": { "message": "博文列表分页导航", "description": "The ARIA label for the blog pagination" @@ -224,10 +224,6 @@ "message": "本页总览", "description": "The label used by the button on the collapsible TOC component" }, - "theme.blog.post.readingTime.plurals": { - "message": "阅读需 {readingTime} 分钟", - "description": "Pluralized label for \"{readingTime} min read\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, "theme.blog.post.readMore": { "message": "阅读更多", "description": "The label used in blog post item excerpts to link to full blog posts" @@ -236,6 +232,10 @@ "message": "阅读 {title} 的全文", "description": "The ARIA label for the link to full blog posts from excerpts" }, + "theme.blog.post.readingTime.plurals": { + "message": "阅读需 {readingTime} 分钟", + "description": "Pluralized label for \"{readingTime} min read\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" + }, "theme.docs.sidebar.collapseButtonTitle": { "message": "收起侧边栏", "description": "The title attribute for collapse button of doc sidebar" @@ -256,6 +256,41 @@ "message": "展开侧边栏", "description": "The ARIA label and title attribute for expand button of doc sidebar" }, + "theme.SearchPage.documentsFound.plurals": { + "message": "找到 {count} 份文件", + "description": "Pluralized label for \"{count} documents found\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" + }, + "theme.SearchPage.existingResultsTitle": { + "message": "「{query}」的搜索结果", + "description": "The search page title for non-empty query" + }, + "theme.SearchPage.emptyResultsTitle": { + "message": "在文档中搜索", + "description": "The search page title for empty query" + }, + "theme.SearchPage.inputPlaceholder": { + "message": "在此输入搜索字词", + "description": "The placeholder for search page input" + }, + "theme.SearchPage.inputLabel": { + "message": "搜索", + "description": "The ARIA label for search page input" + }, + "theme.SearchPage.algoliaLabel": { + "message": "通过 Algolia 搜索", + "description": "The ARIA label for Algolia mention" + }, + "theme.SearchPage.noResultsText": { + "message": "未找到任何结果", + "description": "The paragraph for empty search result" + }, + "theme.SearchPage.fetchingNewResults": { + "message": "正在获取新的搜索结果...", + "description": "The paragraph for fetching new search results" + }, + "theme.SearchBar.seeAll": { + "message": "查看全部 {count} 个结果" + }, "theme.SearchBar.label": { "message": "搜索", "description": "The ARIA label and placeholder for search button" @@ -352,41 +387,6 @@ "message": "搜索文档", "description": "The placeholder of the input of the DocSearch pop-up modal" }, - "theme.SearchPage.documentsFound.plurals": { - "message": "找到 {count} 份文件", - "description": "Pluralized label for \"{count} documents found\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.SearchPage.existingResultsTitle": { - "message": "「{query}」的搜索结果", - "description": "The search page title for non-empty query" - }, - "theme.SearchPage.emptyResultsTitle": { - "message": "在文档中搜索", - "description": "The search page title for empty query" - }, - "theme.SearchPage.inputPlaceholder": { - "message": "在此输入搜索字词", - "description": "The placeholder for search page input" - }, - "theme.SearchPage.inputLabel": { - "message": "搜索", - "description": "The ARIA label for search page input" - }, - "theme.SearchPage.algoliaLabel": { - "message": "通过 Algolia 搜索", - "description": "The ARIA label for Algolia mention" - }, - "theme.SearchPage.noResultsText": { - "message": "未找到任何结果", - "description": "The paragraph for empty search result" - }, - "theme.SearchPage.fetchingNewResults": { - "message": "正在获取新的搜索结果...", - "description": "The paragraph for fetching new search results" - }, - "theme.SearchBar.seeAll": { - "message": "查看全部 {count} 个结果" - }, "theme.tags.tagsPageTitle": { "message": "标签", "description": "The title of the tag list page" diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current.json b/i18n/zh-Hans/docusaurus-plugin-content-docs/current.json index dd74d1a..099b600 100644 --- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current.json +++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current.json @@ -1,6 +1,6 @@ { "version.label": { - "message": "Next", + "message": "2.0.0-SNAPSHOT", "description": "The label for version current" }, "sidebar.tutorialSidebar.category.入门": { @@ -11,14 +11,6 @@ "message": "安装指南", "description": "The label for category 安装指南 in sidebar tutorialSidebar" }, - "sidebar.tutorialSidebar.category.其他指南": { - "message": "其他指南", - "description": "The label for category 其他指南 in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.category.用户指南": { - "message": "用户指南", - "description": "The label for category 用户指南 in sidebar tutorialSidebar" - }, "sidebar.tutorialSidebar.category.开发者指南": { "message": "开发者指南", "description": "The label for category 开发者指南 in sidebar tutorialSidebar" @@ -27,6 +19,10 @@ "message": "系统开发", "description": "The label for category 系统开发 in sidebar tutorialSidebar" }, + "sidebar.tutorialSidebar.category.插件开发": { + "message": "插件开发", + "description": "The label for category 插件开发 in sidebar tutorialSidebar" + }, "sidebar.tutorialSidebar.category.主题开发": { "message": "主题开发", "description": "The label for category 主题开发 in sidebar tutorialSidebar" @@ -34,9 +30,5 @@ "sidebar.tutorialSidebar.category.参与贡献": { "message": "参与贡献", "description": "The label for category 参与贡献 in sidebar tutorialSidebar" - }, - "sidebar.tutorialSidebar.link.REST API": { - "message": "REST API", - "description": "The label for link REST API in sidebar tutorialSidebar, linking to https://api.halo.run" } } diff --git a/sidebars.js b/sidebars.js index f601766..8a9ba93 100644 --- a/sidebars.js +++ b/sidebars.js @@ -26,36 +26,25 @@ module.exports = { type: "category", label: "安装指南", items: [ - "getting-started/install/linux", + // "getting-started/install/linux", "getting-started/install/docker", - { - type: "category", - label: "其他指南", - items: [ - "getting-started/install/other/bt-panel", - "getting-started/install/other/oneinstack", - "getting-started/install/other/tencent-cloudbase", - "getting-started/install/other/docker-mysql", - "getting-started/install/other/docker-compose" - ], - }, - "getting-started/install/third-party", + // "getting-started/install/docker-compose", ], }, - "getting-started/config", - "getting-started/upgrade", - "getting-started/downloads", - ], - }, - { - type: "category", - label: "用户指南", - items: [ - "user-guide/backup-migration", - "user-guide/markdown", - "user-guide/faq", + // "getting-started/config", + // "getting-started/upgrade", + // "getting-started/downloads", ], }, + // { + // type: "category", + // label: "用户指南", + // items: [ + // "user-guide/backup-migration", + // "user-guide/markdown", + // "user-guide/faq", + // ], + // }, { type: "category", label: "开发者指南", @@ -64,28 +53,33 @@ module.exports = { type: "category", label: "系统开发", items: [ - "developer-guide/core/structure", + // "developer-guide/core/structure", "developer-guide/core/prepare", - "developer-guide/core/code-style", + // "developer-guide/core/code-style", ], }, + { + type: "category", + label: "插件开发", + items: ["developer-guide/plugin/prepare"], + }, { type: "category", label: "主题开发", items: [ "developer-guide/theme/prepare", - "developer-guide/theme/config-files", - "developer-guide/theme/global-variable", - "developer-guide/theme/public-template-tag", - "developer-guide/theme/page-variable", - "developer-guide/theme/template-tag", + // "developer-guide/theme/config-files", + // "developer-guide/theme/global-variable", + // "developer-guide/theme/public-template-tag", + // "developer-guide/theme/page-variable", + // "developer-guide/theme/template-tag", ], }, - { - type: "link", - label: "REST API", - href: "https://api.halo.run", - }, + // { + // type: "link", + // label: "REST API", + // href: "https://api.halo.run", + // }, ], }, {