我告诉自己,这样下去,不行,绝对不行,如果我现在不尝试改变,不去抗争,我迟早会成为报废的螺丝钉,掉在地上连一丝声音都没有,更没机会改变了。
夏冰雹,《这是对现代奴役的无声抗争》

Intro

由于 caddy 的 TLS 自动功能出错,又花了大量的时间查询文档想解决 SSL 申请失败的问题,最后用 caddy 手动配置钥匙和 cerbot 机器人自动更新申请证书的方式解决。

Install Cerbot

apt install snapd
snap install core; snap refresh core
snap install --classic certbot

snap 应用程序包本身是一种自给自足的软件,且可以在众多 Linux 发行版上正常运行。这不同于传统的 Linux 包管理方法(如 apt 和 rpm),透过传统方式进行应用程序的更新需要针对各 Linux 发行版对软件包特别定制,从而使软件开发和最终用户的软件部署之间产生了延迟。

之所以了解到这个软件,是因为一开始想在 raspberry pi 上编译 hugo 最新版本,但由于 golang 版本不为最新就频繁报错 ,无奈只好卸载现有版本再用一键 golang 安装脚本安装最新的 golang 后再开启虚拟运存,编译。这样实在是很麻烦,可以参考之前的 Hugo on Pi 文章,但 snap 直接:

snap install hugo --channel=extended

Use Cerbot

首先无证书启动 caddy 服务器

focus.expert {
        gzip
        tls off
        root /home/blog/public
        errors {
            404 404.html
        }
}

启动 caddy 服务器后通过 cerbot 申请证书:

certbot certonly --webroot -d focus.expert --email [email protected] -w /var/www/_letsencrypt -n --agree-tos --force-renewal

申请完毕后重新修改 caddy 配置然后在 cloudflare 中开启 cdn:

focus.expert {
        gzip
        tls /etc/letsencrypt/live/focus.expert/fullchain.pem /etc/letsencrypt/live/focus.expert/privkey.pem /etc/letsencrypt/live/focus.expert/chain.pem
        header / Strict-Transport-Security "max-age=31536000"
        root /home/blog/public
        errors {
            404 404.html
        }
}

Auto Reload SSL

echo -e '#!/bin/bash\ncaddy restart' | sudo tee /etc/letsencrypt/renewal-hooks/post/caddy-reload.sh
sudo chmod a+x /etc/letsencrypt/renewal-hooks/post/caddy-reload.sh

这样做的目的是每次重启 caddy 的时候检查重新加载证书,方便在证书过期的时候及时察觉自动更新