halo配置项
补档。前文提到halo的选择。此文简要说明一下halo的部署和设置项。
注意:此文非docker部署,而是直接部署在linux真实环境。docker部署可查看官方手册。
部署
详细部署方法查看halo官方手册:
这里是官方提供的默认部署方式(使用mysql和bt面板则先看完全文),步骤大致为:
安装java-11-openJDK。
新建linux用户并切换。
在用户所属目录下创建halo工作区并存放halo的运行jar包。
用户根目录下载halo的配置文件。
配置文件参考修改配置文件。默认使用halo内置的h2数据库。
自定义配置项:程序服务端口、数据库用户名和密码、后台路径…等。
其中,务必修改的是数据库用户名和密码。运行halo本体程序。
使用地址+Port的方式看到程序安装界面,此时不必着急完成初始化。
登陆root用户
下载halo服务程序halo.service。因为halo程序在断开ssh时就结束了,需要服务程序保持后台运行。
修改服务程序配置。确保halo程序的绝对路径(halo工作区+halo.jar)和运行用户(刚才建立的用户)。
重启服务并设置开机自启。
可在此日志文件查看服务运行状态:
journalctl -n 20 -u halo
使用Nginx设置反向代理,实现端口转发。
在 地址 打开halo程序并安装,完成初始化。使用 /后台路径 进入后台,完成设置。
使用mysql数据库
官方认为,个人博客使用h2数据库存储数据绰绰有余,经测试1000条博文左右不会影响速度,而且h2比mysql少开了一个服务,节省服务器资源。
不过,h2数据库数据的导出与直接修改明显没有mysql方便,请自行选择方案。
首先注意版本要求:
安装步骤略有修改:
- 安装java-11-openJDK。
- 新建linux用户并切换。
- 在用户所属目录下创建halo工作区并存放halo的运行jar包。
- 用户根目录下载halo的配置文件。
配置文件参考
5. 修改配置文件。默认使用halo内置的h2数据库。
自定义配置项:程序服务端口、数据库用户名和密码、后台路径…等。
其中,务必修改的是数据库用户名和密码。
运行halo本体程序。
使用地址+Port的方式看到程序安装界面,此时不必着急完成初始化。
登陆root用户
下载halo服务程序halo.service。因为halo程序在断开ssh时就结束了,需要服务程序保持后台运行。
修改服务程序配置。确保halo程序的绝对路径(halo工作区+halo.jar)和运行用户(刚才建立的用户)。
重启服务并设置开机自启。
可在此日志文件查看服务运行状态:
journalctl -n 20 -u halo
使用Nginx设置反向代理,实现端口转发。
在地址打开halo程序并安装,完成初始化。使用 /后台路径 进入后台,完成设置。
替换第五个步骤。
新建mysql用户,保留mysql的用户名和密码。
create database halodb character set utf8mb4 collate utf8mb4_bin;
修改配置文件。在配置文件中将h2相关的(# H2 database configuration、# H2 database console configuration)两个部分注释掉,然后开启MySQL的配置项(# MySQL database configuration)。
完成后的示例配置文件。
使用bt面板
halo对使用bt面板的用户提供了便捷一点的办法。
可使用bt面板提供的Supervisor程序托管halo进程,保持halo在断开ssh时仍然可以运行。因此可以替代掉上文中的8-12步骤,无须再下载halo-service。
步骤13略有改动。在bt面板提供的默认nginx配置文件里,修改:
项目框架
至此部署环节结束,如果存在我没有说明清楚的地方,请看具体官方文档。
另外,这位博主的帖子也可以参考。
设置
halo提供的设置项挺多的,说一下几个麻烦一点的。
附件设置
如图,halo提供了上传地址设置,默认采用的方式是本地。但我的小水管服务器加载图片的速度还是慢了点,所以文章内的图片我推往阿里云oss。
请注意:阿里云oss是付费oss,虽然很便宜。(由于我服务器也在阿里云,可以配合oss搞点事情)。免费的图床服务可以选择七牛云。
关于费用:
总得来说,阿里云的收费机制还是比较坑的,尽量少开没必要的服务吧,比如主机快照…
文字说明一下oss的配置过程。图片版本看别人的博客。
- 开启阿里云的oss服务。查看流量包,如果你没有,则需要花一顿馆子钱购买,有按量和包年包月两种计费方式,自行选择。
- 创建Bucket。存储类型-标准,访问权限-公共读。注意至少要开到公共读权限。
- 采用用户Access访问。点击获取用户AccessKey管理-开始使用子用户。
- 新建AccessKey。创建用户-关闭控制台访问,开启编程访问-确定,拿到AccessID和AccessKey。
- 下载csv文件妥善保管。因为它只出现一次,忘了只有建立新的AccessKey。
- 添加权限。选择系统策略,查找oss,选择 AliyunOSSFullAccess 管理对象存储服务(OSS),授权。
- 可以在文件管理上传下载文件了。
说明一下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 | set a=0 |
将文件保存为bat格式并放到图片目录,它将目录下所有的xxxx.jpg重命名为n.jpg。
你可以再写一个脚本,让前面提到的https://cdn.jsdelivr.net/gh/github账号ID/仓库名@版本号/ + n + .jpg
批量输出。
代码高亮美化
xue这款主题默认的代码字体太小,在设置里引入全局css修改字体的family和size:
1 | <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 | @font-face { |
图片展示:
字体按自己喜欢的来就行了。至于现在网站的字体嘛,隔壁butterfly主题里夹的,字体文件放在了主题文件夹里,不是从CDN引入的,每次加载字体得从网站服务器下载,速度稍稍有点慢,然而目前jsDelivr的免费CDN访问好像更慢,如果你有自己的CDN节点可以把字体位置换成CDN链接,我摆了就不弄了。