halo配置项

补档。前文提到halo的选择。此文简要说明一下halo的部署和设置项。

注意:此文非docker部署,而是直接部署在linux真实环境。docker部署可查看官方手册

部署

详细部署方法查看halo官方手册:

halo:https://docs.halo.run/install/linux

这里是官方提供的默认部署方式(使用mysql和bt面板则先看完全文),步骤大致为:

  1. 安装java-11-openJDK。

  2. 新建linux用户并切换。

  3. 在用户所属目录下创建halo工作区并存放halo的运行jar包。

  4. 用户根目录下载halo的配置文件。
    配置文件参考

  5. 修改配置文件。默认使用halo内置的h2数据库。
    自定义配置项:程序服务端口、数据库用户名和密码、后台路径…等。
    其中,务必修改的是数据库用户名和密码。

  6. 运行halo本体程序。

  7. 使用地址+Port的方式看到程序安装界面,此时不必着急完成初始化。

  8. 登陆root用户

  9. 下载halo服务程序halo.service。因为halo程序在断开ssh时就结束了,需要服务程序保持后台运行。

  10. 修改服务程序配置。确保halo程序的绝对路径(halo工作区+halo.jar)和运行用户(刚才建立的用户)。

  11. 重启服务并设置开机自启。

  12. 可在此日志文件查看服务运行状态:

    journalctl -n 20 -u halo

  13. 使用Nginx设置反向代理,实现端口转发。

  14. 地址 打开halo程序并安装,完成初始化。使用 /后台路径 进入后台,完成设置。

使用mysql数据库

官方认为,个人博客使用h2数据库存储数据绰绰有余,经测试1000条博文左右不会影响速度,而且h2比mysql少开了一个服务,节省服务器资源。

不过,h2数据库数据的导出与直接修改明显没有mysql方便,请自行选择方案。

官方文档:https://docs.halo.run/install/config

首先注意版本要求:

image.png

安装步骤略有修改:

  1. 安装java-11-openJDK。
  2. 新建linux用户并切换。
  3. 在用户所属目录下创建halo工作区并存放halo的运行jar包。
  4. 用户根目录下载halo的配置文件。
    配置文件参考

5. 修改配置文件。默认使用halo内置的h2数据库。
自定义配置项:程序服务端口、数据库用户名和密码、后台路径…等。
其中,务必修改的是数据库用户名和密码。

  1. 运行halo本体程序。

  2. 使用地址+Port的方式看到程序安装界面,此时不必着急完成初始化。

  3. 登陆root用户

  4. 下载halo服务程序halo.service。因为halo程序在断开ssh时就结束了,需要服务程序保持后台运行。

  5. 修改服务程序配置。确保halo程序的绝对路径(halo工作区+halo.jar)和运行用户(刚才建立的用户)。

  6. 重启服务并设置开机自启。

  7. 可在此日志文件查看服务运行状态:

    journalctl -n 20 -u halo

  8. 使用Nginx设置反向代理,实现端口转发。

  9. 地址打开halo程序并安装,完成初始化。使用 /后台路径 进入后台,完成设置。


替换第五个步骤。

  1. 新建mysql用户,保留mysql的用户名和密码。

    create database halodb character set utf8mb4 collate utf8mb4_bin;

  2. 修改配置文件。在配置文件中将h2相关的(# H2 database configuration、# H2 database console configuration)两个部分注释掉,然后开启MySQL的配置项(# MySQL database configuration)。

完成后的示例配置文件

使用bt面板

halo对使用bt面板的用户提供了便捷一点的办法。

文档:https://docs.halo.run/install/bt-panel

  1. 可使用bt面板提供的Supervisor程序托管halo进程,保持halo在断开ssh时仍然可以运行。因此可以替代掉上文中的8-12步骤,无须再下载halo-service。

  2. 步骤13略有改动。在bt面板提供的默认nginx配置文件里,修改:

image.png

项目框架


至此部署环节结束,如果存在我没有说明清楚的地方,请看具体官方文档

另外,这位博主的帖子也可以参考

设置

halo提供的设置项挺多的,说一下几个麻烦一点的。

附件设置

如图,halo提供了上传地址设置,默认采用的方式是本地。但我的小水管服务器加载图片的速度还是慢了点,所以文章内的图片我推往阿里云oss。
请注意:阿里云oss是付费oss,虽然很便宜。(由于我服务器也在阿里云,可以配合oss搞点事情)。免费的图床服务可以选择七牛云。

关于费用

oss外网访问流量费用

图片处理费用:每月免费使用10T

oss储存空间费用

总得来说,阿里云的收费机制还是比较坑的,尽量少开没必要的服务吧,比如主机快照…

文字说明一下oss的配置过程。图片版本看别人的博客

  1. 开启阿里云的oss服务。查看流量包,如果你没有,则需要花一顿馆子钱购买,有按量和包年包月两种计费方式,自行选择。
  2. 创建Bucket。存储类型-标准,访问权限-公共读。注意至少要开到公共读权限。
  3. 采用用户Access访问。点击获取用户AccessKey管理-开始使用子用户。
  4. 新建AccessKey。创建用户-关闭控制台访问,开启编程访问-确定,拿到AccessID和AccessKey。
  5. 下载csv文件妥善保管。因为它只出现一次,忘了只有建立新的AccessKey。
  6. 添加权限。选择系统策略,查找oss,选择 AliyunOSSFullAccess 管理对象存储服务(OSS),授权。
  7. 可以在文件管理上传下载文件了。

说明一下oss的图片策略。

外部引用图片时,可附加图片策略码在图片链接后,通过此链接访问的图片会采取策略定制的效果。

例如有链接https://mednight4.com/avatar.png,你定制了一套压缩水印策略WaterMarked,设置了分隔符为”/“。根据阿里提供的服务,你可以使用https://mednight4.com/avatar.png,访问原图;使用https://mednight4.com/avatar.png/WaterMarked访问到加水印后的图片。

注意:gif图片无法应用大部分策略,粘贴gif链接时,需要把后面的 /图片策略删除。

假如我使用对图片进行压缩和加水印,那halo展出的图片便会有这两个效果。

默认的分隔符为?x-oss-process=,访问设置里开启自定义风格符号后,可缩短链接长度。

记一下外网访问节点(endpoint)。

到此,oss阿里云那边的设置完成,回到halo,打开附件设置。设置项按此配置即可。

测试图片上传,如果图片上传失败,记得上文说到的服务日志吗?journalctl -u halo查看日志获得错误原因。

其实我是在PicGo配置成功后再进行halo设置的。PicGo在很久之前我发了一篇文章记录了PicGo + GitHub的方法,这里贴一张图片记录PicGo + AliOSS的方法:

注:公网区域名称即endpoint地域节点,特此注明。

PicGo的日志看这里:

SMTP设置

配置SMTP以实现评论回复邮件通知管理员密码找回。只要游客填写了正确的邮箱,评论回复会有通知提醒。

请自行百度查找开启QQ邮箱SMTP服务,需要注意:

更多的信息你可以在qq邮箱文档的SMTP部分看到,包括服务器地址、SSL端口等。也可以直接按照我的配置填写,修改使用密钥即可。

CDN加速

对于需要很多图片的主题(例如在用的xue主题),可以将图片上传到github项目,发布项目,jsDelivr为开源仓库提供免费的CDN加速。(你也可以直接用jsDelivr加速图片而非上文提到的OSS图床,但是需要不断更新发布版本):

但是jsDelivr对项目大小也有限制,假如项目文件大于50MB,将停止服务:

因此你可能需要对图片大小进行压缩:

docsmall在线压缩:https://docsmall.com/image-compress

对于图片批量重命名,不妨写一个小脚本:

1
2
3
4
5
6
set a=0
setlocal EnableDelayedExpansion
for %%n in (*.jpg) do (
set /A a+=1
rename "%%n" "!a!.jpg"
)

将文件保存为bat格式并放到图片目录,它将目录下所有的xxxx.jpg重命名为n.jpg。
你可以再写一个脚本,让前面提到的https://cdn.jsdelivr.net/gh/github账号ID/仓库名@版本号/ + n + .jpg批量输出。

代码高亮美化

xue这款主题默认的代码字体太小,在设置里引入全局css修改字体的family和size:

1
2
3
4
5
6
7
8
9
10
11
12
13
<style>
@font-face {
font-family: 'Fira Code';
font-style: normal;
font-weight: 400;
font-display: swap;
src:url(https://fonts.gstatic.com/s/firacode/v10/uU9NCBsR6Z2vfE9aq3bh3dSD.woff2) format('woff2');
}
.hljs-ln {
font-size:120%;
font-family:Fira Code;
}
</style>

字体我是引用的google font,谷歌直接提供了外链。

版号

由于是国内的服务器,我域名还没备案,需要等一段时间。此时虽然80和433端口被封了,但由于halo的直接端口不在80,仍然可以通过域名+halo端口访问到页面。


2022.04.04更新


主题

halo1.5推出推出一段时间了。目前用的是halo主题商店的joe2.0主题。上文提到的寒山主题没有适配日志评论等小功能更新,作者也停止维护了,转而新发布了雪项目。然而作者正在维护中的雪主题为了适配新版本进行了大量重做,目前功能较少且存在不少bug,所以我叛逃了。

joe是typecho的原生主题,自定义功能挺多的,最近被好哥哥们搬到halo来了,而且保留了大部分原生功能。joe2.0不仅支持halo新版本的日志评论这些更新,包括评论区回复可见等原joe主题功能也移植过来了。具体用法可以看joe的使用手册

总之目前joe2.0大概是halo主题里功能最丰富的一款了,可自定义项很多,可以轻易调教成自己喜欢的样子,稍稍设置一下即可,不需要自己写代码。我对joe的自定义的修改只有字体,joe的代码文字(eg:java)不会随字体修改而改变,所以在主题自定义页引入一条CSS:

1
2
3
4
5
6
7
8
9
10
11
@font-face {
font-family: 'butterfly';
font-style: normal;
font-weight: 400;
font-display: swap;
src:url(https://mednight4.com/themes/butterfly/source/font/by_aqqxs.woff2) format('woff2');
}
code{
font-size:100%;
font-family:butterfly;
}

图片展示:

字体按自己喜欢的来就行了。至于现在网站的字体嘛,隔壁butterfly主题里夹的,字体文件放在了主题文件夹里,不是从CDN引入的,每次加载字体得从网站服务器下载,速度稍稍有点慢,然而目前jsDelivr的免费CDN访问好像更慢,如果你有自己的CDN节点可以把字体位置换成CDN链接,我摆了就不弄了。