基于halo,docker,mysql,nginx的博客搭建🎉️

一、演示参考😄



有诸多主题供我们选择,这点很像wordpress,但是比wordpress更强,响应速度更快,接下来我们看看后台,


二、开始搭建🚀️

1、前期准备

(1)安装xshell和xftp

用来后期连接服务器(这里我就不演示了),认准这俩就行了

(2)准备云服务器

对于学生来说可以选择阿里的飞天计划或者云工开物计划,

飞天计划可以白嫖11个月的服务器操作如下,进入阿里云找到飞天计划,领取后面还能领四个月,按说明进行操作

云工开物计划高校认证之后可以,免费领一张300的券随便买一台绰绰有余了,这些操作的话自己上b站找教程,不难

没有的话买一台2g2核的够了,相同配置阿里云的3M宽带87/年,腾讯云112每年,几杯奶茶钱勉强也能接受,废话多了,买完之后开始配置了。

2、开始配置

(1)连接服务器

这是买好之后的服务器

点击重置密码

设置好密码之后用xshell连接

root账户登陆,密码是前面重置那个

连接成功

(2)环境配置

【1】安装docker和docker compose

移除旧的版本docker,移除历史镜像和容器等数据,如果之前已经安装了Docker,不移除,再次安装Docker,历史的镜像和容器都还存在(新买服务器不需要操作,这是卸载docker的操作)

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

注意!!! 这行指令会删除历史的所有数据,请酌情执行

rm -rf /var/lib/docker

可以执行一下,因为我们没有安装,所以什么都没有

我们使用rpm的存储库安装,在新主机上首次安装Docker Engine之前, 需要设置Docker存储库。之后,就可以安装和更新 存储库中的Docker。安装yum-utils软件包(提供yum-config-manager实用程序)

sudo yum install -y yum-utils

安装完成,然后设置存储库,方便以后更新

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

开始安装docker引擎

安装 Docker Engine、containerd 和 Docker Compose若要安装最新版本,请运行:

sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

输入y确认安装(这里可能连接不上,多连接两次)

如果系统提示您接受 GPG 密钥,请验证是否匹配,如果匹配,输入y请接受它。060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35,此命令安装 Docker,但不会启动 Docker。它还会创建一个组,但是,默认情况下它不会将任何用户添加到该组

安装完成后启动docker,然后通过运行镜像来验证 Docker 引擎安装是否成功

sudo systemctl restart docker

然后通过运行映像来验证 Docker 引擎安装是否成功。hello-world

sudo docker run hello-world

此命令下载测试映像并在容器中运行它。当 容器运行,它打印确认消息并退出。现在,显示成功安装并启动 Docker Engine。

再设置一下开机自启,再检查是否开机自启

sudo systemctl enable docker
sudo systemctl is-enabled docker

其他指令(可以不执行的指令,记录)

#停止
sudo systemctl stop docker
#重启
sudo systemctl restart docker
#查看状态
sudo systemctl status docker
#设置开机自启
sudo systemctl enable docker
#取消开机自启
sudo systemctl disable docker
#查看是否已经配置开机自启
sudo systemctl is-enabled docker
#重启docker
sudosystemctl restart docker

还有一点,我们已经安装了docker compose,不过是插件,后面可能执行的命令不一样,查看我们docker compose版本

 docker compose version

Docker Compose完成。

3、开始安装

【1】创建容器组

在系统任意位置创建一个文件夹,此文档以 ~/halo 为例。//halo文件夹在root目录下面,如果找不到可以打开xftp查看文件夹,具体操作如下。(!!注意:后续操作中,Halo 产生的所有数据都会保存在这个目录,请妥善保存。)

创建并进入docker-compose.yaml文件

vi docker-compose.yaml

进入编辑器页面,按i开始编辑,改完按Esc建退出,然后右键shift和:输入wq保存退出(但是我排版会乱,希望有大佬帮忙解释一下),我解决看下面,

没搞清楚这样排版为什么会乱,于是按Esc建退出,然后右键shift和:输入wq保存退出,按图打开安装的xftp,找到文件,右键记事本打开,复制黏贴修改一键解决了。

创建 Halo + MySQL 的实例:

version: "3"

services:
  halo:
    image: halohub/halo:2.11
    container_name: halo
    restart: on-failure:3
    depends_on:
      halodb:
        condition: service_healthy
    networks:
      halo_network:
    volumes:
      - ./halo2:/root/.halo2
    ports:
      - "8090:8090"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
      interval: 30s
      timeout: 5s
      retries: 5
      start_period: 30s
    command:
      - --spring.r2dbc.url=r2dbc:pool:mysql://halodb:3306/halo
      - --spring.r2dbc.username=root
      # MySQL 的密码,请保证与下方 MYSQL_ROOT_PASSWORD 的变量值一致。
      - --spring.r2dbc.password=o#DwN&JSa56
      - --spring.sql.init.platform=mysql
      # 外部访问地址,localhost修改为自己的ip地址
      - --halo.external-url=http://localhost:8090/

  halodb:
    image: mysql:8.1.0
    container_name: halodb
    restart: on-failure:3
    networks:
      halo_network:
    command: 
      - --default-authentication-plugin=caching_sha2_password
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_general_ci
      - --explicit_defaults_for_timestamp=true
    volumes:
      - ./mysql:/var/lib/mysql
      - ./mysqlBackup:/data/mysqlBackup
    ports:
      - "3306:3306"
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]
      interval: 3s
      retries: 5
      start_period: 30s
    environment:
      # 请修改此密码,并对应修改上方 Halo 服务的 SPRING_R2DBC_PASSWORD 变量值
      - MYSQL_ROOT_PASSWORD=o#DwN&JSa56
      - MYSQL_DATABASE=halo

networks:
  halo_network:

然后保存退出

#退出到根目录
cd /
#进入halo文件夹
cd root/halo
#因为我们安装的docker-compose-plugin,用这条命令然后运行
docker compose up -d     # -d 表示后台运行
#如果是手动下载安装用这条命令
docker-compose up -d     # -d 表示后台运行

出现下面三个running表示完成,下次再启动只有两个,因为第一次是要拉取halo镜像,

到这里就创建好了,拉取到了halo2.11版本镜像,创建了数据库,但是你会发现还是进不去,进服务器把要用的端口打开

【2】检查端口

先来到云服务器界面,点击实例id进入,把我们配置ymal文件要用的端口打开

ok,再可以查看你虚拟机上面的端口有没有打开,这两个端口不一样,两层防火墙,后面等我学会再记下来

# 查看端口号
lsof -i:81
# 打开防火墙
systemctl start firewalld.service

可以看到81端口没反应,防火墙是关闭的

#打开要用的端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --zone=public --add-port=8090/tcp --permanent
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --add-port=22/tcp --permanent
firewall-cmd --zone=public --add-port=81/tcp --permanent

配置完成,再来到云服务器界面,点击重启,服务器重启配置的防火墙才能生效,

然后xshell连接,进入halo文件夹,因为docker我们开始设置了开机自启,现在只需要运行docker compose命令就行

cd halo
docker compose up -d

便完成配置了

我们来到自己电脑浏览器输入http://ip地址:8090(自己服务器的ip地址)

注意http不是https,我们还没有进入后台配置域名和ssl证书,还有英文下的:

我们就可以进入后台

【3】初始化

如果出现这个初始化界面,恭喜你搭建成功了

然后注册,用户名和密码一定要记得,初始化有一定时间

然后登陆来到系统后台

点击左上角halo,来到主页(这个时候我们初始化了主页,所以后期登陆ip:8090就能来到主页,ip:8090/consol可以来到到后台登陆页)

在应用市场能找到许多主题和插件,有很多大佬在维护,基本都是可以白嫖的,可以根据自己喜好设置不一样博客,这就是hale生态的迷人之处

通过主题管理设置和切换,使用自己喜欢的主题

到这里我们就安装完了,我们这里只能通过ip访问,如果要通过域名访问接着看下面

三、域名配置

1、安装 Nginx Proxy Manager

与 Nginx Proxy Manager 配合使用Halo 部署,顾名思义,Nginx Proxy Manager 就是一个 Nginx 的代理管理器,它最大的特点是简单方便。

即使是没有 Nginx 基础的小伙伴,也能轻松地用它来完成反向代理的操作,而且因为自带面板,操作极其简单,非常适合配合 docker 搭建的应用使用。

Nginx Proxy Manager 后台还可以一键申请 SSL 证书,并且会自动续期,方便省心。

下面可以参考如何用 Nginx Proxy Manger 来配合 Halo,实现反向代理和 HTTPS 访问。如果你的域名已经备案可以直接用这个方式,参考官网与 Nginx Proxy Manager 配合使用 | Halo 文档

2、利用nginx反向代理

这是nginx的官网https://nginx.org/en/linux_packages.html找到对应该版本下载,这里我们选择RHEL and derivatives下载安装

当显示便是安装完成进到nginx的根目录启动nginx

cd etc/nginx     
nginx         //直接运行

当访问域名时出现

便说明nginx启动成功,开始配置nginx代理文件,来到nginx根目录记事本打开nginx.conf

include /etc/nginx/conf.d/*.conf;意思会扫描nginx下的所有.conf文件,那么我们新起一个halo.conf文件进行配置,代码大概这样

server {
  listen 80;
  listen [::]:80;
  server_name yourname.com;
  client_max_body_size 1024m;

  location / {
    proxy_pass 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;
  }
}

这里我们监听80端口监听80端口,当访问yourname.com(你的域名)的时候访问80端口,然后转发给本地的8090端口,相当于访问8090端口是,这就是相当于反向把8090的端口代理给80端口,然后保存退出。在nginx的根目录下重置配置文件

nginx -s reload    //重置nginx配置文件

四、后记

为什么选择halo

博客的框架选择有很多种,我在去年的时候玩过wordpress,确实,wordpress能够使小白也能够轻易上手,证明 WordPress 的市场定位是很成功!我只能说这是重量级,功能强大的框架,只要服务器配置足够,那么 WordPress 能够实现许多功能,一些网站都是直接使用 WordPress 来搭建,因为它足够强大💪,也正因为过于强大,所以对于服务器的要求更高(穷),运行速度太慢了,个人体验感不是很好。

后面我又在找,从solo找到bolo找到最近很火的astro再找到halo,当然没有踩的意思,对于各位开源者我也是非常敬佩。开始想用astro,不过在我电脑上安装一直报错,显示版本过高,但是官网要求18.14.1版本。没找到解决的办法,这个时候有大佬推荐我用halo。

我看了些资料,根据很符合我的审美,是我心里想搭建的博客,那就开始干了,找了各种教程搭建,就是搭不起来(当然也可能我太菜),最后实在恼火了,决定自己去看官网(Halo 建站 - 强大易用的开源建站工具)教程干,一步步搭建起来了,很开心搭建起来了,小白一路走过来懂小白的难处,这篇笔记记录了我搭站的历程(3-4天找资料建站,3-4个小时整理的文章),希望对你有点帮助❤️。

如果你遇到了什么问题可以给我留言,如果这篇文章对你有帮助的话点个赞不过分吧😄