Halo Blog 搭建笔记

前言

号称好久之前就要开始自己搭个个人 blog 系统的,却迟迟因为各种原因,一直没有付诸于行动。

想写的东西有很多,却也迟迟没有整理出对外可以分享的东西。 不想写些流水,不想将就。

但是世界上本没有完美之物,这才是进化被需要的本质所在

好了,前言废话结束,直接进入正篇。

系统选型

按照程序员的思维,搭建之前肯定需要技术选型。 放狗搜索了一阵子,综合对比下来,选择了 Halo 这个 blog 开源系统。 选择它有四个核心因素,分别是:功能相对比较完备,系统皮肤做得不错,开源,Java 代码编写,插件也相对比较丰富。

其他的一些开源 blog 产品,要不皮肤做得差,要不维护更新不太频繁。 当然如果有你觉得更好的blog,也可以帮忙推荐下。

环境搭建

四大问题

主要参考官方文档,但是官方文档的安装还是挺有门槛的,非程序员出身一般都搞不定。我当时买的是腾讯云主机,在根据Halo官方文档安装时,主要遇到如下几个问题:

  1. 默认的 【Docker部署】 方式需要使用 H2 Database 数据库。但是作为一个长期运营的平台,H2 肯定不行,所以只能选择【DockerCompose部署】方式

  2. 腾讯云 Linux 发行版软件仓库中的 Docker 版本过旧,默认的 docker 版本较低,与 halo 的compose.yml 不兼容。

  3. 腾讯云主机访问跨境网络不太稳定,如果需要从 github 上安装相关软件,则经常会下载失败。

  4. 官方文档说的 Nginx Proxy Manager 并不好用,无法帮我生成 https 证书(反向代理还是比较 work 的)。

关键步骤

安装 docker

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

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

安装成功后的版本

lighthouse@VM-4-3-ubuntu:~$ docker compose version
Docker Compose version v2.21.0
lighthouse@VM-4-3-ubuntu:~$ docker --version
Docker version 24.0.7, build afdd53b

修改compose.yml

主要是修改这两处数据库密码:

- --spring.r2dbc.password=o#DwN&JSa56
- MYSQL_ROOT_PASSWORD=o#DwN&JSa56

完整的 yam 格式如下:

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
      # 外部访问地址,请根据实际需要修改
      - --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:

安装Nginx

这里需要先说明一下,我的测试联调步骤:

  • 测试 java serverr 能否正常访问

  • 测试 http+nginx 协议访问网站

  • 测试 https++nginx 协议访问网站

官方文档推荐安装 NPM(Nginx Proxy Manager) (https://docs.halo.run/getting-started/install/other/nginxproxymanager) 但是我发现成功安装后,通过 http+nginx 协议能够正常访问网站,但是 https 证书无法安装成功,NPM 各种报错。

这里附一下常用的命令

sudo docker pull halohub/halo:2.11

vi compose.yaml

sudo docker compose up -d

sudo docker compose down

wget http://127.0.0.1:8090/console  (看看Java server 能否正常工作)

另外,记得最后需要关闭在外网测试使用的一些端口,比如 8090 81 端口 。

Https证书

因为 NPM 报错了,所以我根据了它的报错信息,发现它也是封装了certbot 这种工具。然后我就决定索性绕过 NPM,直接使用certbot来安装了。

根据官网 https://certbot.eff.org/ 介绍,选择对应的反向代理和操作系统版本,进行安装就基本可以了。

这里有个点需要注意,就是配置自动更新证书。根据 https://www.digitalocean.com/community/tutorials/how-to-use-certbot-standalone-mode-to-retrieve-let-s-encrypt-ssl-certificates-on-ubuntu-20-04#step-4-handling-certbot-automatic-renewals 的介绍,我们需要在系统重启后或者证书更新后,重新触发 nginx 等反向代理去刷新配置。在 numnan.com.conf 这个文件最后,加上这句话

renew_hook = systemctl reload nginx    # 
cd /etc/letsencrypt/renewal
lighthouse@VM-4-3-ubuntu:/etc/letsencrypt/renewal$ ls  ## 显示结果根据你的域名而定
numnan.com.conf
lighthouse@VM-4-3-ubuntu:/etc/letsencrypt/renewal$ vi numnan.com.conf 
lighthouse@VM-4-3-ubuntu:/etc/letsencrypt/renewal$ sudo vi numnan.com.conf 
lighthouse@VM-4-3-ubuntu:/etc/letsencrypt/renewal$ sudo certbot renew --dry-run # 执行没有报错信息即可

附录

  1. 【Halo 官方文档链接】

  2. 【Ubuntu 系统安装 docker】

  3. 【CerBot 自动更新 https 证书】

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,784评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,745评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,702评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,229评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,245评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,376评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,798评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,471评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,655评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,485评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,535评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,235评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,793评论 3 304
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,863评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,096评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,654评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,233评论 2 341

推荐阅读更多精彩内容