环境准备

需要装的一些东西

以上环境是必须要装的,由于我还没学明白docker,所以这里就不提了。

目录结构

以下是Halo在运行时所产生目录(halo-next)的解释

  1. db:存放 H2 Database 的物理文件,如果你使用其他数据库,那么不会存在这个目录。

  2. themes:里面包含用户所安装的主题。

  3. plugins:里面包含用户所安装的插件。

  4. attachments:附件目录。

  5. logs:运行日志目录。

启动开发环境

想要完整的运行Halo,目前需要三个部分:

  1. Halo 主项目(halo-dev/halo

  2. UI,包括 Console 控制台和 UC 个人中心(托管在 Halo 主项目)

  3. 主题(Halo 主项目内已包含默认主题)

从 Halo 2.11 开始,Halo 项目的 ui 目录同时包含了 Console(管理控制台)和 UC(个人中心),以下统称为 UI。

当前 Halo 主项目并不会将 UI 的构建资源托管到 Git 版本控制,所以在开发环境是需要同时运行 UI 项目的。当然,在我们的最终发布版本的时候会在 CI 中自动构建 UI 到 Halo 主项目。

也就是说我们只需要克隆主项目就好了

克隆项目

如果你fork了官方的库,就需要将halo-dev替换为你的Github用户名

git clone https://github.com/halo-dev/halo

# 或者使用 ssh 的方式 clone(推荐)
# git clone git@github.com:halo-dev/halo.git

# 或者使用 GitHub CLI 克隆(推荐)
# gh repo clone halo-dev/halo 

# 或者使用 GitHub CLI Fork(推荐)
# gh repo fork halo-dev/halo

运行UI服务

打开任意的终端并进入Halo项目的根目录,执行以下命令

cd path/to/halo/ui
pnpm install
pnpm build:packages
pnpm dev

如果终端打印了以下信息则代表运行正常(注意,这个过程最好关闭代理,我之前就是因为开着代理死活down不下来):

VITE v4.2.3  ready in 638 ms

# Console 控制台服务
➜  Local:   http://localhost:3000/console/

# UC 个人中心服务
➜  Local:   http://localhost:4000/uc/

目前不要急着使用3000/4000端口访问,会出现跨域问题,看之后的配置再说

跨域”是指在不同的域(Domain)之间进行资源访问或数据交换的操作。域通常指的是网络中网站或服务器的标识,通常由协议、域名和端口组成,例如 https://example.com

跨域的常见场景:

  1. 浏览器的跨域问题

    • 当一个网页的脚本(如 JavaScript)试图访问与当前页面不同域的资源时,就会触发浏览器的跨域安全限制。这种限制叫做 同源策略(Same-Origin Policy),它限制了不同源的网页之间的脚本访问,以防止恶意操作。

    • 例如,假设你在访问 https://example.com,如果它的 JavaScript 脚本尝试通过 XMLHttpRequestfetch 请求访问 https://anotherdomain.com,浏览器默认会阻止这种请求,认为这是跨域操作。

  2. 跨域请求(CORS)

    • CORS(Cross-Origin Resource Sharing) 是一种机制,它允许浏览器向不同域的服务器发起请求,并通过响应中的特定头部信息来决定是否允许跨域访问。CORS 是一种标准化的跨域解决方案。

    • 举个例子,如果 https://example.com 的网页向 https://anotherdomain.com 发起 API 请求,anotherdomain.com 的服务器可以通过设置响应头(如 Access-Control-Allow-Origin)来允许跨域请求。

  3. 跨域数据传输

    • 在 Web 开发中,跨域常用于不同站点间的数据交互。例如,当你的前端网页和后端 API 在不同的服务器上时,前端和后端之间的请求就会涉及跨域问题。

  4. 跨域框架或技术

    • 一些常见的跨域技术包括 JSONP(跨域请求 JSON 数据的旧技术)、WebSocket(用于跨域实时通信)和跨域代理等。

总结:

“跨域”主要指的是跨越不同的网络域进行的资源访问或数据交换。由于浏览器的同源策略,这种跨域请求可能会受到限制,需要使用 CORS、代理等方式来解决。

运行Halo后台

  1. 在 IntelliJ IDEA 中打开 Halo 项目,等待 Gradle 初始化和依赖下载完成。

如果你的Gradle像我一样干什么都很慢的话可以参考一下我这篇换源

https://f10atingheart.xyz/archives/solve-gradle-network-problem

或者参考这篇直接让Gradle走代理

https://f10atingheart.xyz/archives/set-proxy-for-gradle
  1. 下载预设插件(可选)

# Windows
./gradlew.bat downloadPluginPresets

# macOS / Linux
./gradlew downloadPluginPresets
  1. 修改 IntelliJ IDEA 的运行配置

  • Windows

    将 Active Profiles 改为 dev,win

  1. 点击IDEA的▶️运行按钮,等待启动完成

  2. 或者你也可以使用gradle启动

# macOS / Linux
./gradlew bootRun --args="--spring.profiles.active=dev"

# Windows
gradlew.bat bootRun --args="--spring.profiles.active=dev,win"
  1. 最终会提供以下几个网址

网站首页:http://localhost:8090
Console 控制台:http://localhost:8090/console
UC 个人中心:http://localhost:8090/uc

一个还在寻找自己的三流开发者