写在开始前

平常工作生活中,我会写一些markdown的文章,用来记录工作中遇到的问题,或者写一些教程,以便将来重新遇到相同的问题,或是需要部署相同的东西时,能通过记录快速避开已经解决过的问题。

在搭博客之前,因为上海疫情原因,只能居家办公,公司的电脑又没有拿回来,导致我在公司写的一些markdown笔记没有及时同步到家里的电脑上,这时候就出现了版本冲突的问题,所以其实我只是想有一个可以远程同步功能的markdown工具。这是搭博客的原因之一。

那么另一个原因就是平常遇到很有挑战性的东西时,记录下来后很想和周围人分享,但我也不想写到一些国内的网站上,所以这就促使我搭建个人的博客网站了。自己的博客不管怎么整都无所谓,还能满足自己开心就好的条件。

于是在机缘巧合下,在github上看到halo博客,感觉颜值很能打,功能也很不错,所以决定搭一个自己的博客。感谢Ryan Wang大神开源了这么好的博客系统,也感谢所有做出贡献的开发者们。那么我们就开始搭建Halo吧。

参考资料:
Halo官网:https://halo.run
Github:https://github.com/halo-dev/halo
Halo官方文档:https://docs.halo.run

其实Halo官方教程写的非常全面,非常清晰。但我有些不同的需求,所以自己研究了一阵子,总算把自己的博客搭建成功了。

本篇文章将会介绍使用docker-compose搭建Halo博客,并连接自己的mysql数据库,redis服务端及nginx。在halo官方教程中,mysqlredis都是用docker-compose部署的。我本人是不太喜欢将有状态的服务用docker部署的,如果你跟我一样想自己部署mysqlredis,可以参考我这篇文章。
搭建halo博客关系图谱

1. 准备工作

那么我们想要搭建一个自己的博客,首先需要一台vps服务器和一个域名,当然我们可能还需要一些Linux相关的知识,不过如果你是小白,也可以跟着教程一步一步搭建,一步一步学习,其实搭建博客还是很简单的。

1.1 vps服务器

首先我们需要一台服务器来部署Halo博客,如果想知道如何购买vps,推荐一个我在购买vps时参考的博主咕咕鸽,他的博客有很多关于vps的介绍和测试,欢迎大家去看看,买到心仪的vps。本文不介绍如何购买服务器。

因为懒得备案的缘故,所以我的服务器选择的是RackNerd,主要的原因是同样价格下,RackNerd的vps给的更多一些,不管是CPU核心数还是RAM等。虽然性能并不是多好,但可以搭建更多好玩的东西,另外就是不用备案了。

服务器的操作系统,选择debian或是centos又或者是其他linux操作系统都是可以的,本文选择的是centos,因为我本人对centos更加熟悉,所以选择了它,大家可以根据自己的喜好选择。
vps系统

1.2 域名配置(可选)

另外我自己的站点用IP访问就太low了,所以需要一个域名来提高b格。我是在namesilo 购买的域名,大家也可以在网上看看好的域名网站,选择适合自己的就可以。

域名指向vps服务器

那么当我们拥有了域名后,我们就要设置域名指向我们自己的服务器了,选择增加A记录,前缀可以不填,直接使用domain.com即可,当然我们也可以设置一下CNAME,将www.domain.com指向domain.com,这样当你访问www.domain.com时,将会指向domain.com。当然你也可以设置两条A记录,两者选一种即可。

1.3 基础软件安装简单使用

先下载必要的软件

  • vim是编辑器软件,我们之后修改文件内容使用
  • net-tools用于查看网络信息的依赖包(非必需)
  • htop 查看服务器信息的软件,可以当作是top的升级版(非必需)
#安装必要软件包
#vim
yum install -y vim* net-tools

#新建一个文件,自带命令
touch xxx.config

#使用vim编辑文件内容
vim xxx.config
# 了解以下3个命令即可简单修改文件
# 使用 i 命令,进行输入(insert)状态,可以增删了
# 使用  control C 退出输入(insert)状态
# 使用 :wq 进行保存并退出

2. 搭建及配置博客所需中间件

3.1 nginx

关于nginx的安装和配置可以查看另一篇文章部署nginx及申请TLS证书,里面有详细的nginx安装和配置教程,另外还涉及了关于域名申请证书的方法。

那么如果你已经看完了nginx的文章,那么我们就开始配置反向代理吧。我们只需要在我们配置好的domain.conf文件中增加以下内容即可。

# halo
location / {
	proxy_pass http://127.0.0.1:8090; #配置halo的端口号,要与halo的端口一致
	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;
}

设置完成后,我们重载一下nginx,等下安装完halo后就可以访问了。当然,你也可以先部署halo再配置nginx

#检查配置文件是否正确
nginx -t

#重载nginx
nginx -s reload

3.2 MySQL

关于MySQL的安装和配置,你同样可以查看另一篇文章部署MySQL,可以根据教程进行搭建,当然你也可以选择和halo官方文档上一样的方式,使用docker-compose来进行部署MySQL。不过halo不是必须需要配置MySQL数据库,你也可以使用halo内置的H2数据库

H2是一个Java编写的关系型数据库,它可以被嵌入Java应用程序中使用,或者作为一个单独的数据库服务器运行。

如果你想要使用MySQL作为halo的数据库,需要注意的是halo要求:

  • 数据库版本为MySQL 5.7+
  • 字符集为utf8mb4
  • 排序规则为utf8mb4_bin
  • 数据库引擎为InnoDB

当我们已经部署好MySQL后,我们需要准备好MySQL数据库的用户名,密码及端口号,让halo连接我们自己的数据库。

root #用户名

123456 #密码

3306 #端口号

halo只需要我们建一个数据库即可,无需建表,halo将会自己创建数据库表。所以我们需要先创建一个数据库给halo,可以使用navicat创建数据库,也可以链接MySQL客户端使用sql命令进行创建。

3.2.1 Navicat创建数据库

连接自己的数据库后,右键数据库,点击新建数据库即可。
Navicat创建数据库

数据库名设置为halodb,字符集设置为utf8mb4,排序规则设置为utf8mb4_bin,点击确定创建即可。
Navicat新建数据库

3.2.2 命令行创建数据库

  • 登录MySQL数据库
#登录数据库,输入密码回车进入
mysql -uroot -p
  • 创建数据
--参考创建数据的语法
CREATE DATABASE [IF NOT EXISTS] <数据库名> [[DEFAULT] CHARACTER SET <字符集名>]  [[DEFAULT] COLLATE <校对规则名>];

--创建halo数据库
CREATE DATABASE IF NOT EXISTS halodb DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE 
utf8mb4_bin;

3.3 Redis

安装和配置Redis,你可以参考部署Redis这篇文章。或者你也可以选择和halo官方文档上一样的方式使用docker-compose来部署RedisRedis不是halo必备的中间件,你可以选择不配置Redis,使用其他的缓存方式即可。

halo支持三种缓存策略:

  • memory 将数据缓存至内存,重启服务缓存将清空。
  • level 将数据缓存至本地,重启服务不会清空缓存。
  • redis 将数据缓存至 Redis,重启服务不会清空缓存,如需分布式部署 Halo,请选用此种缓存方式。

如果我们配置了Redis,我们需要准备好Redis数据库的密码及端口号,让halo连接我们自己的redis数据库。

123456 #密码

6379 #端口号

3. docker-compose部署Halo

关于dockerdocker-compose的安装,可以查看另一篇文章部署docker及docker-compose,里面有详细的教程,欢迎参考。如果你不想使用docker来部署Halo,可以参考halo官方文档 的其他部署方式。

我们先创建一个存放halo文件的目录,将来halo产生的数据都会在这个目录中,也方便管理和备份。

#创建halo的目录,之后我们将docker-compose.yaml文件也放在这个目录中
mkdir /data/halo && cd /data/halo

要使用docker来部署halo,我们需要先写一个docker-compose配置文件,halo官方文档 上的docker-compose配置文件没有连接自己的中间件的方式,但是我们其实可以从中窥探一二。我们可以将文档上创建Halo + MySQL + Redis 的实例yaml文件拿下来修改一下即可。
创建Halo+MySQL+Redis的实例

我们将配置文件内容拷贝下来,修改一下以使用我们自己搭建的中间件。

version: "3"  
  
services:
  halo: #halo的服务名,这个名字可以使用docker-compose命令
    image: halohub/halo:1.5.3 #halo的镜像,也可以选择latest最新版,不指定版本
    container_name: halo #容器名
    restart: unless-stopped #重启方式:除非手动停止
    network_mode: "bridge" #桥接模式,使用docker0
    
    #挂载文件目录和时间文件
    #挂载时间文件时,可能会报错,因为在centos7.9中,timezone是一个目录,所以我们在timezone里新建一个文件,也叫timezone,让容器挂载。
    #运行这个命令 echo 'Asia/Shanghai' > /etc/timezone/timezone #将时区写入timezone
    volumes:
      - /data/halo:/root/.halo
      - /etc/timezone/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "8090:8090" #宿主机端口:容器端口号
    environment:
      - SERVER_PORT=8090 #halo端口号,如要修改,上面ports也需要同步修改
      - SPRING_DATASOURCE_DRIVER_CLASS_NAME=com.mysql.cj.jdbc.Driver #halo使用的数据驱动,指定为mysql
      - SPRING_DATASOURCE_URL=jdbc:mysql://domain.com:3306/halodb?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true #设置数据库链接字符串,切记字符编码设置为utf8,如果根据文档设置成数据库指定的utf8mb4会报错无法启动起来。domain.com换成你的公网IP地址,因为在容器中无法访问宿主机的127.0.0.1
      - SPRING_DATASOURCE_USERNAME=root #mysql用户名
      - SPRING_DATASOURCE_PASSWORD=123456 #mysqlmima
      - HALO_ADMIN_PATH=admin #halo后台管理的路径,你可以访问domain.com/admin进入
      - HALO_CACHE=redis #缓存策略 上面配置redis中间件时已说明了halo有三种方式设置,添入即可,如果不使用redis无需下面的配置
      - SPRING_REDIS_PORT=6379 #redis的端口
      - SPRING_REDIS_DATABASE=0 #使用redis数据库的第几个库
      - SPRING_REDIS_HOST=domain.com #输入你的公网IP地址,因为在容器中无法访问宿主机的127.0.0.1
      - SPRING_REDIS_PASSWORD=123456 #redis的密码


	  - MAX_UPLOAD_SIZE=10m #限制上传文件的大小

      #下面可以配置jvm的内容限制
      # - JVM_XMS=512m
      # - JVM_XMX=512m

配置好docker-compose.yaml文件后,我们保存退出,然后就可以开始部署了。

#部署halo,当前目录需要存在docker-compose文件才可以运行
docker-compose up -d 

部署完成后,我们访问我们的域名:domain.com,看看是不是已经成功进入halo了。如果没有启动起来也没有关系,检查前面的步骤看看是不是哪里没有注意,只要步骤对了,那么一定是可以运行起来的。
willxup.top首页

4. 总结

到这里,halo就已经搭建完成了。如果各位觉得halo不错,请到halo的github点个star🌟,如果使用中有什么问题,也可以去halo论坛,看看能不能找到解决办法。希望看到这篇文章的每个人都可以搭建一个属于自己的博客。

文章作者: Willxup
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Willxup
Linux Linux CentOS Nginx MySQL Redis Halo Docker docker-compose
喜欢就支持一下吧