1.概述

Halo 是一款强大易用的开源建站工具,从个人博客、知识库,到企业官网、在线商城,Halo 都能轻松实现,一站式满足多样化建站需求。

2.搭建流程

halo支持多种部署方式(docker-compose,docker,1panel等)以及多种镜像版本,这里采用的是docker-compose部署方式+社区版(免费)进行博客搭建

2.1 安装docker docker-compose

2.2 创建Halo容器

在系统任意位置创建一个文件夹,此文档以 ~/halo 为例

mkdir ~/halo && cd ~/halo

创建 docker-compose.yaml(采用Halo+PostgreSQL)

version: "3"

services:
  halo:
    image: registry.fit2cloud.com/halo/halo-pro:2.23
    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:postgresql://halodb/halo
      - --spring.r2dbc.username=halo
      # PostgreSQL 的密码,请保证与下方 POSTGRES_PASSWORD 的变量值一致。
      - --spring.r2dbc.password=openpostgresql
      - --spring.sql.init.platform=postgresql
      # 外部访问地址,请根据实际需要修改
      - --halo.external-url=http://localhost: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
      - PGUSER=halo

networks:
  halo_network:

启动Halo服务

docker compose up -d

2.3 nginx反向代理

Halo镜像起来后已经可以通过服务器ip+port的方式访问(默认8090端口),但是一般情况下个人博客都希望通过域名进行访问,这里就需要配置nginx的反代,将ip+端口的访问模式代理到域名+端口。参考文章:https://developer.aliyun.com/article/1244799 这里以腾讯云服务器+宝塔为例: 安装nginx image.png 点击“设置”,可以在“配置修改”处找到nginx的conf文件目录 image.png cd到该目录下创建halo.conf配置文件,内容可以参考下面

upstream halo {
  server 127.0.0.1:8090;
}
server {
  listen 80;
  listen [::]:80;
  server_name blog.example.com;
  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;
  }
}

server_name处就填写自己想代理到的域名,例如blog.example.com、www.example.com 添加完成后

# 检查配置是否有误
sudo nginx -t

# 重载 Nginx 配置
sudo nginx -s reload

访问conf中配置的域名+端口就可以进入到halo的初始化界面 image.png 修改外部访问地址,否则可能会出现只能访问http://域名+端口/console路由的问题 image.png

3.https配置

3.1 ssl证书申请

一般云厂商可以申请免费的ssl证书,这里以腾讯云为例 image.png 申请完后证书下发了就可以上传到服务器/nginx/cert目录下