halo 博客是一个动态的博客框架,其实现了应用与用户配置相分离。在服务器上部署时,即使是小白也能够通过一条命令快速部署成功,而主题等前端页面,则是可以直接脱离后端进行自行定制,而前端也可以调用后端的 API 实现一些复杂的功能。

halo官方网址:https://halo.run
halo官方接口文档:https://api.halo.run
参考官方教程:https://docs.halo.run/getting-started/install/docker

halo只需要由java的环境就可以运行,但需要注意的是halo从 1.4.3 起,版本要求为 11 以上的版本。1.4.3 以下需要 1.8 以上的版本。
因为服务器装的是1.8版本的jdk还想跑一些其他的java程序,如果直接在服务器上安装的话可能会出现未知的错误所以使用docker安装直接一步到位。

基本环境为centos7,在安装之前需要已安装好docker,数据保存支持mysql和H2数据库看个人需求选择

根据官方文档一些给出一些建议参考
关于h2和mysql的优缺点:
使用 H2 的优劣:
优点:
能更快的完成 Halo 的搭建。
无需单独安装 H2,数据库随着 Halo 的启动而创建。
比 MySQL 更节省资源占用,尤其是你的服务器配置不佳的情况下。
性能方面与 MySQL 基本无异(对于这种小型应用),实测 1000 篇文章的情况下,毫无压力。
不会因为某个配置不对而导致 Halo 无法正常使用,没有乱七八糟的问题。
更符合 Halo 数据架构的特点,所有数据(数据库物理文件,主题文件,上传的附件,日志等)均放在 ~/.halo 文件夹内,所以备份迁移极其方便。
如上所述,目前所有备份相关的功能均针对 H2。MySQL 的备份暂无计划。

缺点:
管理不方便,虽然有在线的控制台,但是并不好用。

使用 MySQL 的优劣:
优点:
管理方便,你可以开启远程连接,在自己电脑即可管理数据库。不过目前halo已经做了一些 开发者功能,似乎也没必要怎么管理。

缺点(仅针对于 Halo):
部署麻烦,还需要单独跑一个 MySQL,不能做到 Halo 开箱即用。
占用内存,尤其是你服务器内存不够的情况下,宛如雪上加霜。当然,服务器强壮的话可无视。
版本太多,当你安装了一个 Halo 不支持的版本(目前支持 5.7+)的时候,可能会无法正常使用,甚至无法正常启动。
配置繁琐,你可能需要配置如字符集这样的东西,对新手来说极不友好。(字符集 utf8mb4 collate utf8mb4_bin)
备份迁移麻烦,你不但需要备份 ~/.halo,还需要导出数据库脚本。
目前暂不支持后台备份 MySQL 数据。(重要)

halo可实现数据备份,但自建mysql未来更换服务器,数据备份会比较麻烦,H2备份的话直接导入就可以了,mysql的话需要导出数据表,同时还得备份数据
用内嵌的H2数据库的话,可以选择整站备份,然后在新服务器把导出的压缩文件解压,docker启动的时候挂载上备份的文件夹,启动后就跟原来的博客博客一模一样了,如下图
image.png

当然数据的迁移也不是很麻烦可以产考()
接下来会介绍两种数据库的搭建方式

一、建数据库

1.使用mysql
去自己的mysql建一个名为 halodb 的空数据库,然后剩下的建表啥的halo会自己搞定
image.png

2.使用默认的H2数据库
不用管

二、配置 Halo需要的文件

下载配置文件,要先拿一块地方作为运行时使用的目录,也是文件作为文件上传保存的地址,我这里把目录设在/opt/docker/halo

# 下载配置文件到 /opt/docker/halo 目录
curl -o /opt/docker/halo/application.yaml --create-dirs https://dl.halo.run/config/application-template.yaml

# 也可以切换到要存放文件的目录直接下载
wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml

image.png
image.png
这个文件下载下来的配置文件默认是使用H2 Database的,把它改成自己实际使用的,修改数据库url和用户名密码,不用的数据库连接信息注释掉

server:
  port: 8090
spring:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    # H2 Database 配置,如果你需要使用 MySQL,请注释掉该配置并取消注释 MySQL 的配置。
    #driver-class-name: org.h2.Driver
    #url: jdbc:h2:file:~/.halo/db/halo
    #username: admin
    #password: 123456

    # MySQL 配置,如果你需要使用 H2Database,请注释掉该配置并取消注释上方 H2Database 的配置。
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://xx.xx.xx.xx:3306/halodb?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
    username: root
    password: root
    
  # H2 Database 的控制台相关配置,如果你使用的是 MySQL ,请注释掉下方内容。
#  h2:
#    console:
#      settings:
#        web-allow-others: false
#      path: /h2-console
#      enabled: false
  1. 如果需要自定义端口,修改 server 节点下的 port 即可。
  2. 默认使用的是 H2 Database 数据库,这是一种嵌入式的数据库,使用起来非常方便。需要注意的是,默认的用户名和密码为 admin 和 123456,这个是自定义的,最好将其修改,并妥善保存。
  3. 如果需要使用 MySQL 数据库,需要将 H2 Database 的所有相关配置都注释掉,并取消 MySQL 的相关配置。另外,MySQL 的默认数据库名为 halodb,请自行配置 MySQL 并创建数据库,以及修改配置文件中的用户名和密码。
  4. h2 节点为 H2 Database 的控制台配置,默认是关闭的,如需使用请将 h2.console.settings.web-allow-others 和 h2.console.enabled 设置为 true。控制台地址即为 域名/h2-console。注意:非紧急情况,不建议开启该配置。
  5. server.compression.enabled 为 Gzip 功能配置,如有需要请设置为 true,需要注意的是,如果你使用 Nginx 或者 Caddy 进行反向代理的话,默认是有开启 Gzip 的,所以这里可以保持默认。
  6. halo.admin-path 为后台管理的根路径,默认为 admin,如果你害怕别人猜出来默认的 admin(就算猜出来,对方什么都做不了),请自行设置。仅支持一级,且前后不带 /。
  7. halo.cache 为系统缓存形式的配置,可选 memory 和 level,默认为 memory,将数据缓存到内存,使用该方式的话,重启应用会导致缓存清空。如果选择 level,则会将数据缓存到磁盘,重启不会清空缓存。如不知道如何选择,建议默认。

三、拉取镜像并启动

1.拉取halo镜像

docker pull halohub/halo:1.5.3

从 1.4.3 开始,Docker 镜像已经转移到 halohub 组织,不再是 ruibaby/halo
ruibaby/halo:latest 是老仓库,已经不再更新,halohub/halo 拉取到的才是最新的。拉取时建议带上版本号,方便后期区分
image.png

2.启动容器并挂载文件

docker run -it -d --name halo -p 8090:8090 -v /opt/docer/halo:/root/.halo --restart=unless-stopped halohub/halo:1.5.3

-it: 开启输入功能并连接伪终端
-d: 后台运行容器
–name: 为容器指定一个名称
-p: 端口映射,格式为 主机(宿主)端口:容器端口 ,可在 application.yaml 配置。
-v: 工作目录映射。形式为:-v 宿主机路径:/root/.halo,后者不能修改。
–restart: 建议设置为 unless-stopped,在 Docker 启动的时候自动启动 Halo 容器

创建成功后悔返回一串字符串,打开 http://ip:端口号 即可看到安装引导界面
完成引导安装,可以在控制台更改设置,添加主题等。
image.png