halo官方网址:https://halo.run
halo官方接口文档:https://api.halo.run
参考官方教程:https://halo.run/archives/install-with-docker.html
作者博客:https://ryanc.cc
基本环境为centos7,已安装docker,mysql
建议直接跳到本文 2.x进行搭建
1.建数据库
去自己的mysql建一个名为 halodb 的空数据库,然后剩下的建表啥的halo会自己搞定
2.安装 Halo
2.1 下载配置文件,要先拿一块地方作为运行时使用的目录,也是文件作为文件上传保存的地址,我这里把目录设在/data/halo下
# 下载配置文件到 /data/halo 目录
curl -o /data/halo/application.yaml --create-dirs https://dl.halo.run/config/application-template.yaml
然后修改配置文件,个人比较习惯用nano=。=
nano /data/halo/application.yaml
下载下来的配置文件默认是使用H2 Database的,把它改成自己实际使用的,我用的是mysql,配置文件换成mysql,然后修改数据库url和用户名密码,其他的注释掉,端口用默认的8090,可根据自己需要修改,改完如下
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
2.2 拉取镜像文件、运行
sudo docker pull ruibaby/halo
创建容器并运行,注意这个-v后面的,代表/data/halo文件夹挂载到容器中的/root/.halo,刚刚我们把application.yaml放在 /data/halo 了,所以这里也要用刚自己创建的文件夹,这样halo就会使用我们自己配置的配置文件了
docker run --rm -it -d --name halo -p 8090:8090 -v /data/halo:/root/.halo ruibaby/halo
--rm 系统崩了会自动删除容器
然后用自己服务器ip:8090就可以访问了
第一次访会设置用户密码啥的进行初始化
2.x Extra 优化
经过测试,以及看官方文档,发现不修改配置文件才是最优解,即不使用自建mysql,而是使用内嵌的H2数据库,理由如下:
- halo可实现数据备份,但自建mysql未来更换服务器,数据备份会比较麻烦,H2备份的话直接导入就可以了,mysql的话需要导出数据表,同时还得备份数据
- 用内嵌的H2数据库的话,可以选择整站备份,然后在新服务器把导出的压缩文件解压,docker启动的时候挂载上备份的文件夹,启动后就跟原来的博客博客一模一样了,如下图
- 由于我的mysql跑在docker中,占用内存较大(400m+...学生机...心疼),而且不太稳定,而H2对halo来说几乎没多大的内存开销(200m+),还不需要再跑个mysql他不香吗~
因此决定,换!现在跑下面的三条命令就可以了~
# 下载配置文件到 /data/halo 目录
curl -o /data/halo/application.yaml --create-dirs https://dl.halo.run/config/application-template.yaml
sudo docker pull ruibaby/halo
docker run --rm -it -d --name halo -p 8090:8090 -v /data/halo:/root/.halo ruibaby/halo
如果希望服务器重启后容器也能重启,可以加上下面的选项,上面的--rm需要去掉
# 第一次启动容器,加上--restart=always
docker run --restart=always
# 容器已启动,就用update
docker update --restart=always <CONTAINER ID>
放一个我实际使用的启动命令
docker run -itd --name halo -p 8090:8090 -v /data/halo:/root/.halo --restart=always ruibaby/halo
3 nginx和ssl配置
参考我另一篇文章:
docker安装nginx并配置SSL到个人博客