Halo 开发者指南——项目运行、构建

news/2024/9/20 2:20:40/ 标签: Halo, Git, OpenJDK, Node.js, IDEA, pnpm, Docker

准备工作

环境要求

名词解释

工作目录

Halo 所依赖的工作目录,在 Halo 运行的时候会在系统当前用户目录下产生一个 halo-next 的文件夹,绝对路径为 ~/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 服务

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

最终控制台打印了如下信息即代表运行正常:

VITE v4.2.3  ready in 638 ms# Console 控制台服务
➜  Local:   http://localhost:3000/console/# UC 个人中心服务
➜  Local:   http://localhost:4000/uc/

请不要直接使用 UI 的运行端口(3000 / 4000)访问,会因为跨域问题导致无法正常登录,建议按照后续的步骤以 dev 的配置文件运行 Halo,在 dev 的配置文件中,我们默认代理了 UI 页面的访问地址,所以后续访问 UI 页面使用 http://localhost:8090/console​ 和 http://localhost:8090/uc​ 访问即可,代理的相关配置:

halo:console:proxy:endpoint: http://localhost:3000/enabled: trueuc:proxy:endpoint: http://localhost:4000/enabled: true

运行 Halo

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

  2. 下载预设插件(可选)

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

    • Windows
      将 Active Profiles 改为 dev,win​,如图所示:
      IDEA-Profiles-Win-68071f7bc26ca3f5be42a475597e2e3e.png" alt="IntelliJ IDEA Profiles" />​
    • macOS / Linux
      将 Active Profiles 改为 dev​,如图所示:
      IDEA-Profiles-macOS-9d5469314ee5d8703a11da404399c1b8.png" alt="IntelliJ IDEA Profiles" />​
  4. 点击 IntelliJ IDEA 的运行按钮,等待项目启动完成。

  5. 或者使用 Gradle 运行

    # macOS / Linux
    ./gradlew bootRun --args="--spring.profiles.active=dev"# Windows
    gradlew.bat bootRun --args="--spring.profiles.active=dev,win"
    
  6. 最终提供以下访问地址:

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

构建

一般情况下,为了保证版本一致性和可维护性,我们并不推荐自行构建和二次开发。

构建 Docker 镜像

一般情况下,为了保证版本一致性和可维护性,我们并不推荐自行构建和二次开发。

克隆项目

如果你已经 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/halocd halo# 切换到特定的分支或标签,请替换 <span class="katex--inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mrow><mi>b</mi><mi>r</mi><mi>a</mi><mi>n</mi><mi>c</mi><msub><mi>h</mi><mi>n</mi></msub><mi>a</mi><mi>m</mi><mi>e</mi></mrow><mi>g</mi><mi>i</mi><mi>t</mi><mi>c</mi><mi>h</mi><mi>e</mi><mi>c</mi><mi>k</mi><mi>o</mi><mi>u</mi><mi>t</mi></mrow><annotation encoding="application/x-tex">{branch_name}
git checkout </annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"><span class="mord"><span class="mord mathnormal">b</span><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="mord mathnormal">an</span><span class="mord mathnormal">c</span><span class="mord"><span class="mord mathnormal">h</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span><span class="mord mathnormal">am</span><span class="mord mathnormal">e</span></span><span class="mord mathnormal" style="margin-right:0.03588em;">g</span><span class="mord mathnormal">i</span><span class="mord mathnormal">t</span><span class="mord mathnormal">c</span><span class="mord mathnormal">h</span><span class="mord mathnormal">ec</span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span><span class="mord mathnormal">o</span><span class="mord mathnormal">u</span><span class="mord mathnormal">t</span></span></span></span></span>{branch_name}
</span></span></span>

构建 Fat Jar

构建之前需要修改 gradle.properties​ 中的 version​ 属性(推荐遵循 SemVer 规范),例如:version=2.19.0

cd path/to/halo

下载预设插件(可选):

# Windows
./gradlew.bat downloadPluginPresets# macOS / Linux
./gradlew downloadPluginPresets

构建:

# Windows
./gradlew.bat clean build -x check# macOS / Linux
./gradlew clean build -x check

构建完成之后,在 Halo 项目下产生的 application/build/libs/halo-${version}.jar​ 即为构建完成的文件。

最终部署文档可参考:使用 JAR 文件部署。

构建 Docker 镜像

在此之前,请确认已经构建好了 Fat Jar。

cd path/to/halo
# 请替换 <span class="katex--inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mrow><mi>t</mi><mi>a</mi><msub><mi>g</mi><mi>n</mi></msub><mi>a</mi><mi>m</mi><mi>e</mi></mrow><mi>d</mi><mi>o</mi><mi>c</mi><mi>k</mi><mi>e</mi><mi>r</mi><mi>b</mi><mi>u</mi><mi>i</mi><mi>l</mi><mi>d</mi><mo>−</mo><mi>t</mi><mi>h</mi><mi>a</mi><mi>l</mi><mi>o</mi><mo>−</mo><mi>d</mi><mi>e</mi><mi>v</mi><mi mathvariant="normal">/</mi><mi>h</mi><mi>a</mi><mi>l</mi><mi>o</mi><mo>:</mo></mrow><annotation encoding="application/x-tex">{tag_name}
docker build -t halo-dev/halo:</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"><span class="mord"><span class="mord mathnormal">t</span><span class="mord mathnormal">a</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">g</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span><span class="mord mathnormal">am</span><span class="mord mathnormal">e</span></span><span class="mord mathnormal">d</span><span class="mord mathnormal">oc</span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span><span class="mord mathnormal" style="margin-right:0.02778em;">er</span><span class="mord mathnormal">b</span><span class="mord mathnormal">u</span><span class="mord mathnormal">i</span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mord mathnormal">d</span><span class="mspace" style="margin-right:0.2222em;"><span class="mbin"></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="base"><span class="strut" style="height:0.7778em;vertical-align:-0.0833em;"><span class="mord mathnormal">t</span><span class="mord mathnormal">ha</span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mord mathnormal">o</span><span class="mspace" style="margin-right:0.2222em;"><span class="mbin"></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"><span class="mord mathnormal">d</span><span class="mord mathnormal">e</span><span class="mord mathnormal" style="margin-right:0.03588em;">v</span><span class="mord">/</span><span class="mord mathnormal">ha</span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mord mathnormal">o</span><span class="mspace" style="margin-right:0.2778em;"><span class="mrel">:</span></span></span></span></span>{tag_name} .
</span></span></span></span></span></span></span></span></span></span>
# 插件构建完成的版本
docker images | grep halo

最终部署文档可参考:使用 Docker Compose 部署。

在此之前,请确认已经构建好了 Fat Jar。

cd path/to/halo
# 请替换 <span class="katex--inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mrow><mi>t</mi><mi>a</mi><msub><mi>g</mi><mi>n</mi></msub><mi>a</mi><mi>m</mi><mi>e</mi></mrow><mi>d</mi><mi>o</mi><mi>c</mi><mi>k</mi><mi>e</mi><mi>r</mi><mi>b</mi><mi>u</mi><mi>i</mi><mi>l</mi><mi>d</mi><mo>−</mo><mi>t</mi><mi>h</mi><mi>a</mi><mi>l</mi><mi>o</mi><mo>−</mo><mi>d</mi><mi>e</mi><mi>v</mi><mi mathvariant="normal">/</mi><mi>h</mi><mi>a</mi><mi>l</mi><mi>o</mi><mo>:</mo></mrow><annotation encoding="application/x-tex">{tag_name}
docker build -t halo-dev/halo:</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"><span class="mord"><span class="mord mathnormal">t</span><span class="mord mathnormal">a</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em;">g</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span><span class="mord mathnormal">am</span><span class="mord mathnormal">e</span></span><span class="mord mathnormal">d</span><span class="mord mathnormal">oc</span><span class="mord mathnormal" style="margin-right:0.03148em;">k</span><span class="mord mathnormal" style="margin-right:0.02778em;">er</span><span class="mord mathnormal">b</span><span class="mord mathnormal">u</span><span class="mord mathnormal">i</span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mord mathnormal">d</span><span class="mspace" style="margin-right:0.2222em;"><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="base"><span class="strut" style="height:0.7778em;vertical-align:-0.0833em;"><span class="mord mathnormal">t</span><span class="mord mathnormal">ha</span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mord mathnormal">o</span><span class="mspace" style="margin-right:0.2222em;"><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"><span class="mord mathnormal">d</span><span class="mord mathnormal">e</span><span class="mord mathnormal" style="margin-right:0.03588em;">v</span><span class="mord">/</span><span class="mord mathnormal">ha</span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mord mathnormal">o</span><span class="mspace" style="margin-right:0.2778em;"><span class="mrel">:</span></span></span></span></span>{tag_name} .
</span></span></span></span></span></span></span></span></span></span>
# 插件构建完成的版本
docker images | grep halo

最终部署文档可参考:使用 Docker Compose 部署。


原文链接:https://docs.halo.run/category/系统开发


http://www.ppmy.cn/news/1527843.html

相关文章

钻机、塔吊等大型工程设备,如何远程维护、实时采集运行数据?

在建筑和工程领域&#xff0c;重型设备的应用不可或缺&#xff0c;无论是在道路与桥梁建设、高层建筑施工&#xff0c;还是在风电、石油等能源项目的开发中&#xff0c;都会用到塔吊、钻机等大型机械工程设备。 随着数字化升级、工业4.0成为行业发展趋势&#xff0c;为了进一步…

MacOS安装homebrew,jEnv,多版本JDK

1 安装homebrew homebrew官网 根据官网提示&#xff0c;运行安装命令 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"安装后&#xff0c;bash会提示执行两条命令 (echo; echo eval "$(/opt/homebrew/b…

海外问卷调查是做什么的,适合什么人做

疫情结束后的市场大环境萧条&#xff0c;特别是实体经济&#xff0c;许多中小微企业要么倒闭&#xff0c;要么垂死挣扎&#xff0c;等待重生。于是有一些老板&#xff0c;就转型做起了互联网生意。 抖音这几年的直播带货、短视频带货等等飞速崛起&#xff0c;成就了多少百万富…

如何用站群服务器做抢购秒杀平台

随着各种电商购物节的开幕&#xff0c;全球外贸、直播电商抢购活动愈发火热&#xff0c;外贸行业容纳了海量的公司、组织和个人。为了营销&#xff0c;人们使用海外站群服务器抢货的做法已经不再稀奇&#xff0c;因为使用海外站群服务器操作抢购秒杀商品&#xff0c;可以拥有多…

爬坑--docker构建容器ssh连接容器环境变量会发生变化

问题 通过 Dockerfile 语句在镜像中安装了 openssh, 但是在创建容器之后, 通过 docker exec -it 容器 bash 和通过远程 ssh, 会发现两边终端的 PATH 不一致, ssh 连接明显缺少一些东西. 解决方案 在 Dockerfile 最后添加: RUN echo "export PATH${PATH}" >>…

适合博客的组件库

在选择适合博客的组件库时&#xff0c;需要考虑博客的主题、内容类型以及预期的用户体验。以下是一些推荐的组件库&#xff0c;它们各自具有独特的特点和优势&#xff0c;能够帮助你提升博客的视觉效果和用户体验&#xff1a; React Markdown&#xff1a;非常适合技术博客和教…

图新地球-将地图上大量的地标点批量输出坐标到csv文件【kml转excel】

0.序 有很多用户需要在卫星影像、或者无人机航测影像、倾斜模型上去标记一些地物的位置&#xff08;如电线杆塔、重点单位、下水盖等&#xff09; 标记的位置最终又需要提交坐标文本文件给上级单位或者其他部门使用&#xff0c;甚至需要转为平面直角坐标。 本文的重点是通过of…

福利:kafka--生产者消费者

kafka是一个分布式流媒体平台&#xff0c;类似于消息队列或企业消息传递系统 案例一&#xff1a;生产者--消费者 1.导入依赖 <dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId></dependency> 2…

小琳AI课堂:强化学习初阶

大家好&#xff0c;这里是小琳AI课堂。今天我们来聊聊强化学习&#xff0c;一种让机器通过“实践”学习的方法。&#x1f916; 强化学习&#xff0c;听起来就像是给机器装上了成长的心智。想象一下&#xff0c;有个小机器人在迷宫里探险&#xff0c;它要找到出口。每次尝试走一…

6年前倒闭的机器人独角兽,再次杀入AGV市场

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》 在科技创新的浪潮中&#xff0c;一个曾经辉煌又迅速陨落的企业正悄然重生&#xff0c;引发业界广泛关注。 曾经的协作机器人鼻祖Rethink Robotic…

专业学习|GERT网络概览(学习资源、原理介绍、变体介绍)

一、GERT 网络概览 GERT(Graphical Evaluation Review Technique&#xff0c;图示评审技术)是一种结合流线图理论(Flow Graphical Theory)、矩母函数(Moment Generating Function)、计划评审技术(Program Evaluation Review Technique)解决随机网络问题的方法&#xff0c;描述各…

leetcode41. 缺失的第一个正数,原地哈希表

leetcode41. 缺失的第一个正数 给你一个未排序的整数数组 nums &#xff0c;请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,0] 输出&#xff1a;3 解释&#xf…

【高等数学学习记录】数列的极限

【高等数学&学习记录】数列的极限 从事测绘工作多年&#xff0c;深刻感受到基础知识的重要及自身在这方面的短板。 为此&#xff0c;打算重温测绘工作所需基础知识。练好基本功&#xff0c;为测绘工作赋能。 1 知识点 1.1 数列极限的定义 设 { x n } \lbrace x_n \rbrace…

将有序数组——>二叉搜索树

给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵平衡二叉搜索树。 示例 1&#xff1a; 输入&#xff1a;nums [-10,-3,0,5,9] 输出&#xff1a;[0,-3,9,-10,null,5] 解释&#xff1a;[0,-10,5,null,-3,null,9] 也将被视为正确答案…

光芯片版图绘制软件测评

光芯片版图绘制软件测评 正文KLayout优点缺点IPKISS优点缺点PIC Studio优点缺点GDSFactory优点缺点正文 KLayout KLayout 是光芯片版图绘制软件的最底层软件。市面上的大多数版图绘制软件都是围绕这一软件展开的。版图绘制软件最终生成的文件均以 .gds 结尾。 优点 免费可以…

【西电电装实习】6. 手装无人机的蓝牙断连debug

文章目录 前言零、闪灯状态零零、翻滚角&#xff0c;俯仰角&#xff0c;偏航角一、问题描述二、现象解释三、解决方案参考文献 前言 在 西电无人机电装实习 时遇到的问题使用蓝牙芯片 CH582F。沁恒的蓝牙芯片CH582F是一款集成了BLE&#xff08;Bluetooth Low Energy&#xff0…

基于微信小程序的健身房管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 基于微信小程序JavaSpringBootVueMySQL的健…

Linux上使用touch修改文件时间属性的限制

缘由 在Linux上我想多个进程对于同一个文件进行访问和修改&#xff0c;并且根据文件的最后修改时间来判断时间是否需要更新缓存中的文件&#xff0c;这样能够达到减少每次加载文件时间的损耗。 尝试的做法 每当我修改文件后&#xff0c;为了确保文件的最后修改时间的属性生效…

QUIC的丢包处理

QUIC的重试数据包&#xff08;Retry Packet&#xff09;为什么会触发重启另一个连接 安全性考量 防止重放攻击 重试数据包&#xff08;Retry Packet&#xff09;是在初始握手过程中由服务端发送给客户端&#xff0c;用于验证客户端的IP地址&#xff0c;以防止重放攻击。 在一…

Java 23 的12 个新特性!!

Java 23 来啦&#xff01;和 Java 22 一样&#xff0c;这也是一个非 LTS&#xff08;长期支持&#xff09;版本&#xff0c;Oracle 仅提供六个月的支持。下一个长期支持版是 Java 25&#xff0c;预计明年 9 月份发布。 Java 23 一共有 12 个新特性&#xff01; 有同学表示&…