关于自动发布的一些细节

在上一篇文章中简单描述了自动发布的方法,不过在那之后我花了差不多一天的时间来对配置文件修修补补。终于能正常的自动发布了。下面是上一篇文章中存在的问题:

Caddy 无法启动

这里问题挺多的

Caddy 的 http.git 插件的坑

因为我使用的是私库,所以必须使用 ssh 进行连接。可是在启动后出现了这个诡异的错误:invalid port ":sjatsh" after host在一番熟练的使用搜索引擎后,啥也没有找到。后来在 caddy-git 项目的 Issues 里发现了这个。修改后的配置文件如下:

1
2
3
4
git {
repo git@github.com:/wsndshx/blog-article.git #在:的后面加上个“/”
······
}

目录的权限问题

在 http.git 执行 pull 操作的时候,是以用户 www-data 的身份执行的,而原来配置文件中的path /root/blog/source/_posts/所指定的目录我是以 root 的身份创建的……解决也很简单:删掉/root/blog,然后重新创建过一个空的文件夹来操作,具体如下:

1
2
3
4
5
6
7
8
9
10
rm -rf /root/blog #删掉这个,不要了
mkdir /var/blog #把他和www放在一起,方便我管理(这个保持权限为root的,方便安装hexo)
cd /var/blog
chown www-data:www-data /var/blog #赋予权限给caddy
chown www-data:www-data /var/www #一定要给他权限,不然会在后台卡死
hexo init
npm install
rm -rf /var/blog/source/_posts/* #删除自带的所有文章,防止clone出错
chown www-data:www-data /var/blog/source/_posts/ #把权限给www-data,不然会报错
service caddy start #启动一下,让他拉取文章下来

之后就能正常启动 Caddy 了

then 不能按照预期的方式运行

原来的配置文件中在 then 后加了 hexo g 来让 hexo 重新生成静态文件,通过加上--config custom.yml参数指定 hexo 的位置,不过并不能运行

image-20200124124203003

后来发现这玩意好像不能这样用,于是在/var/blog 下创建了 update.sh,里面填入hexo g并且修改 Caddy 的配置文件:

1
2
3
4
git {
······
then_long /bin/bash /var/blog/update.sh #这里用的是 then_long,因为如果文章数量多的话时间就太长了,扔到后台执行就好。
}

webhook 返回 405 错误

这里我眼瞎,在 GitHub 设置 webhook 链接的时候少打了个 s。

其他小修改

Caddy 的配置文件

1
2
3
4
5
    git {
······
interval -1 #因为默认每隔一段时间就会 pull 一次,因为每次 pull 都会执行一次 update.sh,所以干脆禁用。
······
}
1
2
3
4
tls {
protocols tls1.2 tls1.3 #github 只支持 tls1.2
}
header / Strict-Transport-Security "max-age=63072000"

update.sh

1
2
3
chown -R root:root /var/blog/source/_posts #防止出现诡异的错误
hexo g #生成文章
chown -R www-data:www-data /var/blog/source/_posts #恢复权限