在使用GithubPage+Hexo来部署博客时,我们时常会遇到这样的问题: 网页源代码push上去了,但是大量的markdown文件保留在了本地,这对于多机用户的影响是很大的。

为此你不得不再新建一个branch/repo来存放你的文章,但依然难以避免忘记同步文章的情况发生。

并且多机环境意味着每台机器都要装nodejs环境来进行网页的生成。十分不友好。

所以更好的解决方案呼之欲出:使用webhhook等方式,把生成网页的步骤交给服务器,PC要做的仅仅是写markdown+同步至Git。

准备工作

配置Repo

建议一个存放文章源代码的Repo

将source文件夹下的所有文件上传

设置Webhook (Optional)

Caddy的Git插件只对以下有效

  • Github
  • Gitlab

不使用上述Git服务的请跳过

Webhook位于Settings/Webhooks。

  • Payload URL: 你的博客地址
  • Content type:选择Json
  • Secret:自己设置密钥
  • 点击Add Webhook即算完成

配置Hexo

使用官方源的Nodejs

由于Caddy的用户组为www-data,它的PATH变的路径很少。使用nvmn来使用node环境的话会出很多问题。

这里建议直接sudo apt install nodejs

建立hexo主目录

  1. /var/www/下建立你的博客主目录

  2. 主题什么的也照例配好

  3. 删除source文件夹

  4. 假设你的博客目录名为blog,则执行

    chown www-data -R /var/www/blog让caddy获得整个文件夹的完整权限

  5. 为方便调试,给www-data用户加上shell,以便进行登录

    usermod -s /bin/bash www-data

配置Caddy

/etc/caddy/Caddyfile进行修改,增加新的网站

blog.your.host {
    tls your@email
    gzip
    root /var/www/blog/public
    git {
        repo https://your.git.repo
        path ../source
        hook /webhook secret-key
        hook_type gogs
        interval 300
        clone_args --recursive
        pull_args --recurse-submodules
        then hexo g
    }
}

下面对各个配置进行解释

  1. tls: 你的邮箱,用来设置Https
  2. gzip:对网页进行压缩,加快传输速度
  3. root:你的网页代码目录(即为public目录)
  4. repo:你的repo的git地址,ssh和https地址均可
  5. 如果你设置了Webhook:
    1. hook:hook类型(即为/webhook)和密钥
    2. hook_type: 显示指定你的hook类型(github/gitlab)
  6. 如果你没设置webhook:
    1. interval:拉取时间,定期拉取repo【时间单位为秒】
  7. clone_args:递归
  8. pull_args:递归
  9. then:可以自定义命令,这里我们执行hexo g来生成静态网页

最后执行systemctl reload caddy.service载入配置,大功告成!



经验分享      Hexo Caddy

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!