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启动的时候挂载上备份的文件夹,启动后就跟原来的博客博客一模一样了,如下图
当然数据的迁移也不是很麻烦可以产考()
接下来会介绍两种数据库的搭建方式
一、建数据库
1.使用mysql
去自己的mysql建一个名为 halodb 的空数据库,然后剩下的建表啥的halo会自己搞定
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
这个文件下载下来的配置文件默认是使用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
- 如果需要自定义端口,修改 server 节点下的 port 即可。
- 默认使用的是 H2 Database 数据库,这是一种嵌入式的数据库,使用起来非常方便。需要注意的是,默认的用户名和密码为 admin 和 123456,这个是自定义的,最好将其修改,并妥善保存。
- 如果需要使用 MySQL 数据库,需要将 H2 Database 的所有相关配置都注释掉,并取消 MySQL 的相关配置。另外,MySQL 的默认数据库名为 halodb,请自行配置 MySQL 并创建数据库,以及修改配置文件中的用户名和密码。
- h2 节点为 H2 Database 的控制台配置,默认是关闭的,如需使用请将 h2.console.settings.web-allow-others 和 h2.console.enabled 设置为 true。控制台地址即为 域名/h2-console。注意:非紧急情况,不建议开启该配置。
- server.compression.enabled 为 Gzip 功能配置,如有需要请设置为 true,需要注意的是,如果你使用 Nginx 或者 Caddy 进行反向代理的话,默认是有开启 Gzip 的,所以这里可以保持默认。
- halo.admin-path 为后台管理的根路径,默认为 admin,如果你害怕别人猜出来默认的 admin(就算猜出来,对方什么都做不了),请自行设置。仅支持一级,且前后不带 /。
- 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 拉取到的才是最新的。拉取时建议带上版本号,方便后期区分
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:端口号 即可看到安装引导界面
完成引导安装,可以在控制台更改设置,添加主题等。