初次搭建博客Halo
安装halo
halo
halo是一个快速构建博客的搭建平台,而不需要个人深入掌握编程语言。采用reactive反应式编程+r2db+springBoot作为后端,vuejs作为博客前端和控制台界面。主题和插件以热插拔的方式提供自定义使用。
构建博客时会同时需要创建数据库,默认的H2,也可以配置连接使用外部数据库,2.11版本自带个人中心,用户注册,用户消息等需要存储信息的功能。
2.11好像暂时没seo优化,在插件商店有个seo搜索引擎推送插件,官方社区已提上日程,没提也要提。后续了解
不能用云虚拟主机,最起码用轻量应用服务器,只要可以装docker就行。
hexo
hexo是一款基于Node.js的静态博客框架,依赖少易于安装使用,可以方便的生成静态网页托管在GitHub和Coding上(在github中创建同名仓库,使用http://用户.github.io 让github作为服务器,gitee同理)。但是网络流量和各种配置受限,优点是免费。
nodejs在本地构建生成release就是最终版界面,然后上传到服务器上。轻量,只有html/css/js就是快。
hexo博主大部分推荐评论功能使用twikoo,需要相应配置MongoDB数据库。
hexo的信息存储功能使用第三方系统,如百度统计在页脚插入js分析网站请求和停留时间。如评论直接使用valine系统。
有seo优化
WordPress,Typecho,LAMP都是基于php的,不了解了
选择halo
本人是java技术路线
博客会用到数据存储,希望多个功能存储在一个数据库实例,方便备份。如博客用户信息,评论信息,Umami网站流量数据分析。halo创建同时使用了自有的阿里云RDS Mysql。
没深入研究hexo,可能存在Umami(网站流量分析)的数据存在PostgreSql,twikoo(评论功能)的数据存在MongoDB,其他插件数据存在第三方系统。
halo代码激进,学习一下reactive,本身接触过Spring Webflux
安装方式
安装方式有很多Docker /1Panel/Helm/Podman/,有官方文档
https://docs.halo.run/category/%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97
我选择Docker Compose方式安装,搭配自己已有的Nginx和Mysql。

官方Docker部署方式:

如果你要用到Nginx和数据库,推荐使用官方的Docker Compose + Nginx Proxy Manager方式,官方有文档,先用Docker Compose创建halo和mysql,再创建Nginx Proxy Manager

安装要求
内存
为了获得更好的体验,我们建议至少配置 1G 的 RAM。
Docker
必须在运行环境安装好 Docker 环境,目前 Halo 的默认安装运行方式均使用容器。
JRE(可选)
目前 Halo 的默认及推荐安装方式为 Docker 容器运行,使用 jar 包运行的方式需要用户自行构建 jar 包。
当前版本(2.0)需要 JRE 17 的版本,推荐使用 OpenJDK 17。
数据库(可选)
也可以使用系统自带的 H2 Database 数据库,无需安装。但不推荐在生产环境中使用 H2 Database。
Web 服务器(可选)
如果你部署在生产环境,那么你很可能需要进行域名绑定,这时候我们推荐使用诸如 Nginx、Caddy 之类的 Web 服务器进行反向代理。但需要注意的是,目前 Halo 不支持代理到子目录(如:halo.run/blog)。
工作目录
指 Halo 所依赖的工作目录,在 Halo 运行的时候会在系统当前用户目录下产生一个 .halo2 的文件夹,绝对路径为 ~/.halo2。由于这个工作目录是固定的,所以上面所说的 运行包不限制所存放的位置,里面通常包含下列目录或文件:
db:存放 H2 Database 的物理文件,如果你使用其他数据库,那么不会存在这个目录。themes:里面包含用户所安装的主题。plugins:里面包含用户所安装的插件。attachments:附件目录。logs:运行日志目录。application.yaml:配置文件。
Docker compose方式安装
有多种安装方式:
https://docs.halo.run/category/%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97
在本地创建卷文件
mkdir ~/docker/halo && cd ~/docker/halo
拉取镜像
#当前最新版为2.11.3
docker pull halohub/halo:2.11
#DockerHub上如果不指定版本默认以latest,该latest不是最新版,主要因为 Halo 2 不兼容 1.x 版本,防止使用者误操作。官方推荐使用固定版本的标签,比如 halohub/halo:2.11 或者 halohub/halo:2.11.0。
使用docker-compose.yaml
#使用外部mysql
vim ~/docker/halo/docker-compose.yaml
#docker-compose.yaml
version: "3"
services:
halo:
image: halohub/halo:2.11
container_name: halo
restart: on-failure:3
network_mode: "bridge"
ports:
- "8090:8090"
volumes:
- ./halo2:/root/.halo2
command:
# 修改为自己已有的 MySQL 配置
- --spring.r2dbc.url=r2dbc:pool:mysql://数据库IP:3306/halo
- --spring.r2dbc.username=root
- --spring.r2dbc.password=
- --spring.sql.init.platform=mysql
# 外部访问地址,请根据实际需要修改
- --halo.external-url=http://localhost:8090/
# 端口号 默认8090
- --server.port=8090
#命令启动
docker-compose up -d
#查看日志
docker-compose logs -f使用docker创建容器,默认使用H2数据库
#注意:此命令默认使用自带的 H2 Database 数据库。
#如需使用 PostgreSQL/mysql,请参考:使用 Docker Compose 部署
docker run
-it -d
--name halo
-p 8090:8090
-v ~/.halo2:/root/.halo2
halohub/halo:2.11
参数说明:
-it:开启输入功能并连接伪终端
-d:后台运行容器
--name:为容器指定一个名称
-p:端口映射,格式为
主机(宿主)端口:容器端口,可在application.yaml配置。-v:工作目录映射。形式为:
-v 宿主机路径:/root/.halo2,后者不能修改。-e: 指定环境变量
运行环境变量参数详解:
spring.r2dbc.url | 数据库连接地址,详细可查阅下方的 |
spring.r2dbc.username | 数据库用户名 |
spring.r2dbc.password | 数据库密码 |
spring.sql.init.platform | 数据库平台名称,支持 |
halo.external-url | 外部访问链接,如果需要在公网访问,需要配置为实际访问地址 |
halo.cache.page.disabled | 是否禁用页面缓存,默认为禁用,如需页面缓存可以手动添加此配置,并设置为 开启缓存之后,在登录的情况下不会经过缓存,且默认一个小时会清理掉不活跃的缓存, 也可以在 Console 仪表盘的快捷访问中手动清理缓存。 |
数据库连接地址配置:
链接方式 | 链接地址格式 | spring.sql.init.platform |
PostgreSQL | r2dbc:pool:postgresql://{HOST}:{PORT}/{DATABASE} | postgresql |
MySQL | r2dbc:pool:mysql://{HOST}:{PORT}/{DATABASE} | mysql |
MariaDB | r2dbc:pool:mariadb://{HOST}:{PORT}/{DATABASE} | mysql |
H2 Database | r2dbc:h2:file:///${halo.work-dir}/db/halo-next?MODE=MySQL&DB _CLOSE_ON_EXIT=FALSE | h2 |
反向代理
大致意思,
#nginx
upstream halo {
server 127.0.0.1:8090;
}
server {
listen 80;
listen [::]:80;
server_name www.yourdomain.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;
}
}