docker搭建halo个人博客

docker搭建halo个人博客

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到个人博客