Halo博客搭建小记

写在前面

早先,出于练手的需要,加之有些东西不太方便写在公共平台上,于是便打算自己搭建博客来记录。当时基于多种考量,最后选择了Halo作为自己的博客系统,一年前的Halo还通过发布jar包来进行部署,这个方式也确实很方便,仅需要主机有java环境即可,简单使用nginx配置一下反代就可以迅速的部署在主机上。部署完成后,我也记录了一些东西,可惜后来由于学业压力和身体原因,就废弃了之前的内容。前段时间恰有需要,就将重建提上了日程,遂惊喜发现,Halo已全面转向使用docker部署。

这篇日志就把部署过程和踩的坑小记一下,希望能够帮到需要的人。

环境需要

本人使用的是Ubuntu 22.04,包括数据库和docker在内的应用,都来自于ubuntu的官方源。

halo官方文档要求的配置和环境如下:

硬件配置​

提示

如果你要使用服务器进行部署 Halo,需要注意的是,Halo 目前不支持市面上的云虚拟主机,请使用云服务器或者 VPS。

CPU​

无特别要求。目前我们的 Docker 镜像 也已经支持多平台。

内存​

为了获得更好的体验,我们建议至少配置 1G 的 RAM。

磁盘​

无特别要求,理论上如果不大量在服务器上传附件,Halo 对磁盘的容量要求并不是很高。但我们推荐最好使用 SSD 硬盘的服务器,能更快的运行 Halo。

网络​

Halo 目前必须在外网畅通的情况下使用,否则会导致页面异常。

软件环境​

Halo 理论上可以运行在任何支持 Docker 及 Java 的平台。

Docker​

必须在运行环境安装好 Docker 环境,目前 Halo 的默认安装运行方式均使用容器。

JRE(可选)​

目前 Halo 的默认及推荐安装方式为 Docker 容器运行,使用 jar 包运行的方式需要用户自行构建 jar 包。

信息

当前版本(2.0)需要 JRE 17 的版本,推荐使用 OpenJDK 17。

PostgreSQL(可选)​

也可以使用系统自带的 H2 Database 数据库,无需安装。但不推荐在生产环境中使用 H2 Database。

Web 服务器(可选)​

如果你部署在生产环境,那么你很可能需要进行域名绑定,这时候我们推荐使用诸如 Nginx、Caddy 之类的 Web 服务器进行反向代理。但需要注意的是,目前 Halo 不支持代理到子目录(如:halo.run/blog)。

我们这里需要三个东西就够了,运行容器的Docker,数据库,还有web服务器。

安装docker

首先安装docker,对于ubuntu,我们需要安装这几个包:

  • docker.io

  • docker-compose

  • docker-compose-v2

  • docker-doc

  • podman-docker

在你的控制台输入:

sudo apt install docker.io docker-compose docker-compose-v2 docker-doc podman-docker

等待安装完成。。。

安装和配置数据库

正如官方文档所说,你可以选择三种数据库,这里以PostgreSQL为例。

sudo apt install postgresql -y
sudo su postgres
psql
\password
CREATE DATABASE halo;

好了,现在你已经有了一个数据库了,现在我们还需要再创建一个数据库用户给halo使用。

创建一个yourname的用户,密码是password

create user yourname with password 'password';

把刚才创建的halo数据库的操作权力都授予yourname

GRANT ALL PRIVILEGES ON DATABASE halo TO yourname;

然后输入/q退出数据库的操作,然后exit退回到你的系统用户,接下来就可以拉取halo的docker镜像并启动了。

不过,在此之前,你需要修改PostgreSQL的配置文件,因为它默认是禁止从localhost登陆的。

修改 /etc/postgresql/14/main/postgresql.conf 文件第 60 行取消注释,允许本地登入数据库。

listen_addresses = 'localhost' # what IP address(es) to listen on;

然后重启服务使其生效。

sudo systemctl restart postgresql.service

拉取docker镜像和启动

按照官方文档的说法:

目前 Halo 2 并未更新 Docker 的 latest 标签镜像,主要因为 Halo 2 不兼容 1.x 版本,防止使用者误操作。我们推荐使用固定版本的标签,比如 halohub/halo:2.10 或者 halohub/halo:2.10.0。

halohub/halo:2.10:表示最新的 2.10.x 版本,即每次发布 patch 版本都会同时更新 halohub/halo:2.10 镜像。

halohub/halo:2.10.0:表示一个具体的版本。

后续文档以 halohub/halo:2.10 为例。

我们先创建一个文件夹,把这个文件夹作为之后halo工作的目录。

mkdir halo && cd halo

然后创建 docker-compose.yaml

nano docker-compose.yaml

由于我们已经配置好了外部的数据库,所以里面的内容如下:

version: "3"

services:
  halo:
    image: halohub/halo:2.10
    container_name: halo
    restart: on-failure:3
    network_mode: "host"
    volumes:
      - ./halo2:/root/.halo2
    command:
      # 修改为自己已有的 sql 配置
      - --spring.r2dbc.url=r2dbc:pool:postgresql://localhost:5432/halo
      - --spring.r2dbc.username=你刚才创建的数据库用户名
      - --spring.r2dbc.password=你对应用户的密码
      - --spring.sql.init.platform=postgresql
      # 外部访问地址,请根据实际需要修改
      - --halo.external-url=http://localhost:8090/
      # 端口号 默认8090
      - --server.port=8090

保存退出后,就可以拉取镜像并启动了。

sudo docker-compose up -d

n你可能会遇到 did not resolve to an alias and no unqualified-search registries are defined in "/etc/containers/registries.conf"这样的错误,只需要把unqualified-search-registries=["docker.io"]

添加进/etc/containers/registries.conf

通过docker-compose logs -f则可以查看启动的日志。

使用nginx配置https访问

安装nginx,卸载apache2

sudo apt install nginx

sudo apt purge apache2

sudo apt autoremove

创建nginx的配置文件

sudo nano /etc/nginx/sites-available/halo.conf

sudo cp /etc/nginx/sites-available/halo.conf /etc/nginx/sites-enabled/

upstream halo {
  server 127.0.0.1:8090;
}

server {
    listen 80;
    server_name 你的域名;
    return 301 https://$server_name$request_uri;
}

server {
  listen 443 ssl;
  server_name 你的域名;
  ssl_certificate     /home/yourname/ssl/你的域名_bundle.crt; #这俩证书文件换成你自己的
  ssl_certificate_key /home/yourname/ssl/你的域名.key;

  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;
  }
}

这时候,如果你的防火墙开启了80和443端口后,且云服务商并没有因为没备案而阻拦的话,你就可以通过

https://你的域名/console来初始化并管理后台了。

扫码_搜索联合传播样式-标准色版-lxzu.png


Halo博客搭建小记
https://minetest.top/archives/1701172030418/
作者
青雨染蓑衣
发布于
2023年11月28日
许可协议