变更

halo2.4及以上版本的构建方法发生了变更,请转至halo2.6 从源码构建jar包查看。

前言

halo2.0开始,halo官方不再提供jar包,仅提供docker部署方式。

docker部署固然方便,但没有jar包也是遗憾。

本文以halo官方文档为基础,结合我自己的经历,记录构建halo 2.2版本jar的经历。

环境准备

  • archlinux
  • git
  • openjdk 17
  • node.js 18 (官方文档为18,arch仓库为19)
  • pnpm 7

pnpm安装方法请前往官网查看。

克隆仓库

假设文件保存位置在~/

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

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

构建Console

cd ~/console

# 使用git tag命令查看最新的tag
git tag --column

# 切换到指定的tag,此处以2.2.0为例
git checkout v2.2.0

pnpm install

pnpm build:packages

pnpm build

执行命令的过程中可能有警告信息,忽略即可。

执行完上述所有命令后,进入console目录下产生的dist目录

cd dist

将该文件夹下的所有内容复制到~/halo/src/main/resources/console

mkdir -p ~/halo/src/main/resources/console

mv ./* ~/halo/src/main/resources/console

构建jar包

cd ~/halo/src/main/resources

配置相关问题

如无意外,在此文件夹下,有很多以application-*.yaml为形式的文件。其中的application.yaml文件(注意没有任何后缀)就是halo 1.x放置在工作文件夹下的配置文件。

若以源代码构建jar包的方式运行halo 2.x,该文件必须在构建jar包前就编写好。否则后期即使将它复制到halo的工作目录下,halo也不会读取配置,而是根据构建时的文件决定配置。

注意,halo 1.xhalo 2.x的配置文件不通用,数据库同样不通用不能直接替换。

根据halo官方Docker Compose部署方法的配置来看,创建数据库方式也稍有不同。

mariadb为例,执行create database your_database_name character set utf8mb4 collate utf8mb4_general_ci;创建数据库。将your_database_name修改为你的数据库名称。

编辑application.yaml,以下是mariadb的配置示例

server:
  port: 8090 # 修改为你的端口
  compression:
    enabled: true
  error:
    whitelabel:
        enabled: false
spring:
  output:
    ansi:
      enabled: detect
  r2dbc:
    url: r2dbc:pool:mariadb://localhost:3306/your_database_name # 修改为你的数据库名称
    username: your_username # 修改为你的用户名
    password: your_password # 修改为你的密码
  sql:
    init:
      mode: always
      platform: mysql
  codec:
    max-in-memory-size: 10MB
  messages:
    basename: config.i18n.messages
  web:
    resources:
      cache:
        cachecontrol:
          max-age: 365d

halo:
  external-url: http://your_url:${server.port} # 修改为你的地址
  work-dir: ${user.home}/.halo2
  plugin:
    plugins-root: ${halo.work-dir}/plugins
  attachment:
    resource-mappings:
      - pathPattern: /upload/**
        locations:
          - migrate-from-1.x

springdoc:
  api-docs:
    enabled: false

logging:
  file:
    name: ${halo.work-dir}/logs/halo.log
  logback:
    rollingpolicy:
      max-file-size: 10MB
      total-size-cap: 1GB
      max-history: 0

management:
  endpoints:
    web:
      exposure:
          include: ["health", "info", "startup", "globalinfo"]
  endpoint:
    health:
      probes:
        enabled: true
  info:
    java:
      enabled: true
    os:
      enabled: true

若你要使用其他数据库,参照当前目录下别的配置文件修改即可。默认配置文件不做任何修改,则是使用H2数据库。配置文件中的所有路径也可以更改为绝对路径。

开始构建

cd ~/halo

git tag --column

# 这两句命令同构建Console一样

git checkout v2.2.0

vim gradle.properties
# 构建之前需要修改 gradle.properties 中的 version 为当前 tag 的版本号。
# 如:version=2.2.0

./gradlew clean build -x check -x jar

构建完成之后,构建完成的文件在~/halo/build/libs目录下。

其他问题

用户名与密码

构建完成后初次运行,后台默认用户名是admin,默认密码则随机生成,需要到halo日志中寻找。

如图所示,密码一般在倒数几行日志中可以找到。

频繁的报错

情况类似GitHub上这些Issues

https://github.com/halo-dev/halo/issues/3252

https://github.com/halo-dev/halo/issues/3222

但貌似都不影响使用。