使用 Halo 和 Docker Compose 快速构建个人网站

引言

在当今数字化时代,拥有一个个人网站已经成为展示自我、分享知识和建立个人品牌的重要方式。Halo 是一个现代化的开源博客系统,基于 Java 开发,功能强大且易于扩展。结合 Docker Compose,我们可以快速搭建一个稳定、高效的个人网站。本文将详细介绍如何使用 Halo 和 Docker Compose 快速构建个人网站。

1. 什么是 Halo?

Halo 是一个基于 Java 的开源博客系统,具有以下特点:

轻量级:占用资源少,启动速度快。

易于扩展:支持插件和主题扩展,满足个性化需求。

现代化设计:前后端分离,界面简洁美观。

多用户支持:适合个人博客或团队协作。

Halo源码仓库: GitHub - halo-dev/halo: 强大易用的开源建站工具。

Halo后台管理界面

2. 为什么选择 Docker Compose?

Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。通过一个 docker-compose.yml 文件,我们可以轻松管理 Halo 及其依赖的数据库(如 MySQL 或 PostgreSQL),实现一键部署。

3. 准备工作

在开始之前,确保你的系统已经安装以下工具:

Docker:用于运行容器。

Docker Compose:用于管理多容器应用。

官方文档: Ubuntu | Docker Docs

1.设置docker存储库:

# 基于Ubuntu系统安装Docker引擎
# 卸载所有冲突软件包
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done

# 更新本地的软件包列表
sudo apt-get update 

# 安装必要的依赖项,包括 ca-certificates 和 curl
sudo apt-get install ca-certificates curl
# 创建 /etc/apt/keyrings 目录,该目录用于存储 Docker 的 GPG 密钥
sudo install -m 0755 -d /etc/apt/keyrings
# 从 Docker 官方网站下载 GPG 密钥并将其保存到 /etc/apt/keyrings/docker.asc 文件中。
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
# 更改密钥文件的权限以确保只有管理员可以访问它
sudo chmod a+r /etc/apt/keyrings/docker.asc
 
# Add the repository to Apt sources:
# 将 Docker APT 源添加到系统中,并保存在 /etc/apt/sources.list.d/ 目录下的 docker.list 文件中。
# 此命令会自动检测系统架构和发行版名称,并使用它们来构建正确的源地址。
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] 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

2.安装docker和docker-compose插件:

# 安装相关软件包
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 显示版本信息
apt-cache madison docker-ce | awk '{ print $3 }'

# 定义一个变量接收安装docker的版本
VERSION_STRING=5:25.0.2-1~ubuntu.22.04~jammy
# 此命令会根据指定变量的docker版本安装相关docker软件
sudo apt-get install docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING containerd.io docker-buildx-plugin docker-compose-plugin

# 查看docker状态
systemctl status docker

# 测试
docker run hello-world

4. 编写 docker-compose.yml 文件

以下是一个简单的 docker-compose.yml 文件示例,用于部署 Halo 和 MySQL 数据库:

version: "3"

services:
  halo:
    image: registry.fit2cloud.com/halo/halo:2.20
    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
    environment:
      # JVM 参数,默认为 -Xmx256m -Xms256m,可以根据实际情况做调整,置空表示不添加 JVM 参数
      - JVM_OPTS=-Xmx256m -Xms256m
    command:
      - --spring.r2dbc.url=r2dbc:pool:mysql://halodb:3306/halo
      - --spring.r2dbc.username=root
      # MySQL 的密码,请保证与下方 MYSQL_ROOT_PASSWORD 的变量值一致。
      - --spring.r2dbc.password=t04241003+ #DwN&JSa56
      - --spring.sql.init.platform=mysql
      # 外部访问地址,请根据实际需要修改
      - --halo.external-url=http://localhost:8090/

  halodb:
    image: mysql:8.1.0
    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
    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=t04241003+ #DwN&JSa56
      - MYSQL_DATABASE=halo

networks:
  halo_network:

5. 启动 Halo 服务

在终端中运行以下命令启动服务:

# 创建halo目录
mkdir ~/halo

# 将编写好的yml文件放到目录下,运行以下命令部署服务
docker-compose up -d

访问 http://localhost:8090,你将看到 Halo 的安装页面系统初始化。

6. 配置 Halo

按照安装页面的提示,完成数据库配置和管理员账户设置。完成后,你就可以开始使用 Halo 创建文章、管理内容和自定义主题了。

后台管理界面:

Halo应用市场有许多免费的主题和插件进行选择

7. 总结

通过 Halo 和 Docker Compose,我们可以快速搭建一个功能强大、易于管理的个人网站。无论是技术爱好者还是内容创作者,Halo 都是一个值得尝试的博客系统。希望本文能帮助你顺利构建自己的个人网站!

我的个人博客网站:Guhe - 学享站

参考链接

Halo 官方文档

Docker 官方文档

Docker Compose 官方文档

希望这篇博客对你有帮助!如果有其他问题,欢迎随时提问!