侧边栏壁纸
  • 累计撰写 27 篇文章
  • 累计创建 42 个标签
  • 累计收到 34 条评论

目 录CONTENT

文章目录

搭建个人博客系统 (Halo)

miykah
2023-06-29 / 5 评论 / 7 点赞 / 514 阅读 / 9004 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2023-12-23,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

Halo 是一个强大易用的开源建站工具,适合用来搭建个人博客,有后台管理系统,并且有丰富的主题和插件可以选择,目前在 Github 上已经快 30k stars。

本篇记录并分享一下自己部署 Halo 的过程。本篇参考 Halo 官方文档

如果使用 1Panel 的小伙伴,可以直接在应用商店一键安装 Halo。我后来迁移过一次 Halo,就是使用 1Panel 面板一键安装的。本篇也会记录一下迁移过程。

先看效果

Halo博客效果预览

安装 Docker && Docker-Compose

部署方式使用 Halo 文档中的 Docker Compose 部署方式

安装 Docker

  1. 如果有旧版本 Docker,想重新安装,需要先卸载

    sudo yum remove docker \
                      docker-client \
                      docker-client-latest \
                      docker-common \
                      docker-latest \
                      docker-latest-logrotate \
                      docker-logrotate \
                      docker-engine
  1. 安装相关依赖

    sudo yum install -y yum-utils device-mapper-persistent-data lvm2
  1. 添加 Docker 软件源

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

    国内服务器可以使用阿里镜像源:

    sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  2. 安装 Docker

    sudo yum install -y docker-ce
  3. 启动 Docker 服务

    sudo systemctl start docker
  4. 设置开启自动启动 Docker 服务

    sudo systemctl enable docker
  5. 测试是否安装成功,安装成功会显示详细信息

    docker version

安装 Docker-Compose

  1. 执行以下命令下载 Docker Compose 的二进制文件:

    sudo curl -SL https://github.com/docker/compose/releases/download/v2.23.3/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
  2. 添加执行权限

    sudo chmod +x /usr/local/bin/docker-compose
  3. 测试是否安装成功

    docker-compose --version

创建容器组

  1. 我在 /opt 目录下创建文件夹

    mkdir /opt/blog/halo
    cd /opt/blog/halo
  2. 创建docker-compose.yaml 文件,内容如下

    我这里选择了使用已有外部数据库的方式进行部署,需要先在 Mysql 中创建好下面所需要的数据库。

    官方文档还有其他三种方式可以参考。

    version: "3"
    ​
    services:
      halo:
        image: halohub/halo:2.11
        container_name: halo
        restart: on-failure:3
        network_mode: "host"
        volumes:
          - ./:/root/.halo2
        command:
          # 修改为自己已有的 MySQL 配置
          - --spring.r2dbc.url=r2dbc:pool:mysql://***.***.***.***:3306/halo  # 需要现在这个外部数据库建好halo数据库
          - --spring.r2dbc.username=root
          - --spring.r2dbc.password=*********
          - --spring.sql.init.platform=mysql
          # 外部访问地址,请根据实际需要修改
          - --halo.external-url=http://ip:8090/ 
          # 初始化的超级管理员用户名
          - --halo.security.initializer.superadminusername=admin
          # 初始化的超级管理员密码
          - --halo.security.initializer.superadminpassword=admin
          # 端口号 默认8090
          - --server.port=8090
  3. 启动 Halo 服务

    docker-compose up -d

    实时查看日志:

    docker-compose logs -f
  4. 用浏览器访问 /console 即可进入 Halo 管理页面,用户名和密码为在 docker-compose.yaml 文件中设置的 superadminusernamesuperadminpassword

配置域名

准备为博客配置 blog.miykah.top 域名,需要将域名解析到 ip:8090

  1. 将域名解析到服务器 ip

  2. 配置 nginx 反向代理

    upstream halo {
      server 127.0.0.1:8090;
    }
    server {
      listen 80;
      listen [::]:80;
      server_name blog.miykah.top;  # 域名
      client_max_body_size 1024m;
      location / {
        proxy_pass http://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;
      }
    }
  3. 此时就可以使用域名访问博客

配置 SSL 证书,使用 HTTPS

  1. 在云服务器厂商申请 SSL 证书(通常有免费的)

  2. 下载证书文件保存到服务器。我这里存放在 /opt/cert 文件夹中。将.key.pem 文件保存在服务器

  3. 修改nginx.conf

    参考 https://cloud.tencent.com/developer/article/1953367

    server {
        listen 80; #侦听80端口,如果强制所有的访问都必须是HTTPs的,这行需要注销掉
        listen 443 ssl; #侦听443端口,用于SSL
        server_name blog.miykah.top;  # 自己的域名
    ​
        #配置 ssl
        ssl_certificate     /opt/cert/blog.miykah.top_bundle.pem;  # pem文件的径
        ssl_certificate_key  /opt/cert/blog.miykah.top.key; # key文件的路径
    ​
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;
    ​
        client_max_body_size 1024m;
    ​
        location / {
            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;
            proxy_pass http://127.0.0.1:8090;
        }
    }
  4. 重载 nginx 配置

    nginx -s reload

博客版本升级

  1. 停止运行中的容器组

    cd ~/halo && docker-compose down
  2. 备份数据(重要)

    cp -r ~/halo ~/halo.archive

    需要注意的是,halo.archive 文件名不一定要根据此文档命名,这里仅仅是个示例。

  3. 更新 Halo 服务

    修改 docker-compose.yaml 中配置的镜像版本。

    services:
      halo:
        image: halohub/halo:2.11.2
        container_name: halo
    docker-compose pull halo
    docker-compose up -d

博客迁移

更新于2023.12.14

由于更换服务器,博客需要迁移,同时新服务器使用了 1Panel 面板,其高度集成了 Halo 博客,可以在应用商店一键安装。这里记录一下迁移过程。非常简单,其实就是备份原博客,安装新的 Halo,然后导入文件进行恢复即可。

原 Halo 博客备份

在原 Halo 博客控制台,创建备份,并下载保存。

备份

1Panel 安装 Halo

在 1Panel 商店安装 Halo,自行修改下面需要修改的信息。

1Panel商店Halo安装界面

恢复备份

安装完成后,进入新的 Halo 博客控制台(ip:port/console),找到备份,上传备份文件,等待恢复即可。

官方文档相关提示:

在恢复前,需要了解以下几点:

  • 恢复不限制部署方式,也不限制数据库,也就是说新站点的部署方式和数据库类型可以和备份的站点不同。

  • 恢复过程可能会持续较长时间,期间请勿刷新页面。

  • 在恢复的过程中,虽然已有的数据不会被清理掉,但如果有冲突的数据将被覆盖。

  • 恢复完成之后会提示停止运行 Halo,停止之后可能需要手动运行。

7

评论区