一款基于SpringBoot的优秀开源博客系统:Halo

传送门:Halo 官网

我是小白,今年大一,刚刚脱离了数理化苦海的我,发现对学习计算机有着浓厚的兴趣,学的过程中发现了很多有意思的东西,比如刚刚接触的开源操作系统 Linux,对于从小接触 Windows 的我,以为操作系统等于 Windows,Windows 就是唯一的操作系统

同时解锁了另一个属性就是“折腾”,喜欢去找开源的好用的软件来替代正在使用的软件,当然这个过程中也让我发现了不少非常实用的工具,比如做笔记用的 Typora,加密小电影用的 VeraCrypt

随着整理的笔记越来越多,记录的资料越来越多,就想找个地方与其他人分享,需求是搭建属于自己的博客系统

当然现在优秀的开源博客系统有很多,选择也很多,如 HexoVuePress 等,最后选择了基于 SpringBoot 开发的 Halo,它的源码也不是很复杂,但是代码非常的规范,对于 Java 开发者,特别是 Java 初学者,有很多值得学习的地方

image-20210601175058401

作为一个 SpringBoot 应用,Halo 的部署有多简单呢,让它运行起来只需要两行命令:

这种方式运行的前提是机器配置好了 JDK 等必要环境

$ wget https://dl.halo.run/release/halo-1.4.8.jar
$ java -jar halo-1.4.8.jar
复制代码

当然最方便的部署方式还是 Docker

$ docker pull halohub/halo:latest
$ docker run -it -d --name halo -p 8090:8090 -v ~/.halo:/root/.halo halohub/halo:latest
复制代码

使用 halo 还有一个非常方便的地方,它的所有用户自定义的配置、主题等东西都放在 ~/.halo 目录里,当你要迁移博客,只需要备份这个文件夹,重新运行上述命令,你的一切配置、附件、主题等都回来了,所以说迁移能力是很高的,后台管理系统也提供了备份与恢复的功能,原理是一样的

一些图效果:

image-20210602203700229

image-20210603091646157

如何部署

推荐使用 Docker 的方式进行部署,简单操作,方便快捷

除此之外Halo 还支持一键部署到 腾讯云 CloudBase | Halo Documents,不过这个我没有尝试过,不做推荐,感兴趣的同学可以自己尝试用这种方式部署

Halo 作为一个基于 SpringBoot 的动态博客系统,没有服务器资源是没法跑起来的,像 Hexo、VuePress 这类静态页面型的博客系统,是可以部署到 GitPage,GiteePage 等托管服务上的,不仅没有服务器的支出,也没有运维的时间成本,所以具体怎么选择还是要看个人

步骤

1. 服务器租赁

部署博客系统,首先需要一台有外网 IP 的服务器,这样别人才能访问到你的博客

当然也有其他选择,比如部署在本机,然后打开内网穿透,再购买域名进行反向代理,别人也是可以访问到的,但是你的机器一关机就莫得了

可以选择的服务器有很多,华为云、腾讯云、阿里云都是可以的,如何租赁和购买域名这里就不赘述了

假设你已经有一台云服务器了,IP 是 1.2.3.4,并且通过 SSH 工具连上去了,顺便推荐一款 Windows 上的 SSH 工具:Termius,如果你是 Mac/Linux,直接使用终端更方便

2. Docker 环境配置

不同的 Linux 发行系列的操作命令不太一样,假设你购买的服务器运行的是 Centos7

一定要记得开放服务器的防火墙端口,Halo 默认运行在 8090,如果使用域名访问,记得开放80,如果你要配置 Https 记得开发 443

如果在虚拟机上运行,开放端口与 SeLinux 的处理也是必不可少的,这两者都会导致服务启动后无法访问页面

添加软件源并安装 Docker

$ curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
$ yum install docker-ce
复制代码

执行这两条命令后就可以正式部署了

$ docker pull halohub/halo:latest
$ docker run -it -d --name halo -p 8090:8090 -v ~/.halo:/root/.halo halohub/halo:latest
复制代码

等待一段时间,等服务正式启动完成就可以访问了

前面假设这台服务器的外网 IP 是 1.2.3.4,那么打开浏览器,输入 1.2.3.4:8090 就可以打开初始化页面了,根据提示进行初始化后就可以愉快的使用了

3. 配置自定义域名

假设购买的域名是 www.abc.com,此时要做的重要一步是域名解析,这一步是在 DNS 服务器里面注册你域名和 IP 的映射关系,当用户使用浏览器访问域名地址时,DNS 服务器会解析到实际的 IP 地址

教程传送门 -> 域名解析设置

4. 设置反向代理

反向代理可以选择 NginxCaddy,这里选择使用 Nginx

安装 && 启动

$ yum install nginx
$ systemctl enable nginx
$ systemctl start nginx
复制代码

添加自定义配置 vim /etc/nginx/conf.d/halo.conf

只需要修改注释掉的两行即可

upstream halo {
  server 127.0.0.1:8090;
}
server {
  listen 80;
  listen [::]:80;
  server_name www.abc.com;         # 自己购买的域名
  client_max_body_size 1024m;
  location / {
    proxy_pass http://halo;    # 这个halo 就是上面 upstream 的值,实际上是 http://127.0.0.1:8090
    proxy_set_header HOST $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}
复制代码

也可以把这一段直接加到 /etc/nginx/nginx.conf

image-20210603114317754

重启 Nginx

$ systemctl restart nginx
复制代码

访问 www.abc.com 即可正常访问 Halo

如果本文对你有帮助,或者对本文有疑惑、建议等,欢迎留言评论