部署 Halo 个人博客

1. 环境准备

1.1 安装 Docker

  1. 安装 Docker Compose


二、部署步骤

1. 创建项目目录
mkdir ~/halo && cd ~/halo

此目录将存储所有博客数据,请勿随意删除。


2. 编写 Docker Compose 文件

创建 docker-compose.yaml,以下以 PostgreSQL 数据库为例:

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"
    environment:
      - JVM_OPTS=-Xmx256m -Xms256m
    command:
      - --spring.r2dbc.url=r2dbc:pool:postgresql://halodb/halo
      - --spring.r2dbc.username=halo
      - --spring.r2dbc.password=openpostgresql
      - --spring.sql.init.platform=postgresql
      - --halo.external-url=http://你的域名或IP:8090/

  halodb:
    image: postgres:15.4
    restart: on-failure:3
    networks:
      halo_network:
    volumes:
      - ./db:/var/lib/postgresql/data
    healthcheck:
      test: [ "CMD", "pg_isready" ]
      interval: 10s
      timeout: 5s
      retries: 5
    environment:
      - POSTGRES_PASSWORD=openpostgresql
      - POSTGRES_USER=halo
      - POSTGRES_DB=halo

networks:
  halo_network:

3. 配置说明
  • 镜像版本
    使用 registry.fit2cloud.com/halo/halo:2.20 表示最新 2.20.x 版本,可替换为固定版本如 2.20.0

  • 数据库

    • PostgreSQL 用户名为 halo,密码需与 spring.r2dbc.password 一致。

    • 数据持久化:./halo2 存储博客内容,./db 存储数据库。

  • 外部访问地址
    --halo.external-url 需改为实际访问地址(如 http://yourdomain.com)。


4. 启动服务
docker-compose up -d

实时查看日志:

docker-compose logs -f

三、访问与初始化

  1. 浏览器访问 http://IP或域名:8090/console 进入管理界面。

  2. 首次启动需初始化管理员账号、博客名称等信息。


四、更新与维护

  1. 更新版本
    修改 docker-compose.yaml 中的镜像版本,执行:

docker-compose up -d
  1. 备份数据

  • 备份 ~/halo/halo2~/halo/db 目录。

  • 推荐使用官方备份插件导出完整数据。


五、反向代理配置(可选)

通过 Nginx 或 Caddy 实现域名访问:

1. Nginx 配置示例

nginx

复制

server {
  listen 80;
  server_name yourdomain.com;
  client_max_body_size 1024m;

  location / {
    proxy_pass http://127.0.0.1:8090;
    proxy_set_header HOST $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}
2. Caddy 配置示例

复制

yourdomain.com {
  reverse_proxy 127.0.0.1:8090
}

六、常见问题

  1. 端口冲突
    修改 docker-compose.yaml 中的 8090:8090 为其他端口(如 8080:8090)。

  2. 数据库连接失败
    检查 halodb 容器的健康状态:

    bash

    复制

    docker-compose ps
  3. 域名访问异常
    确保服务器安全组放行端口,并正确配置 DNS 解析。