起因
自从Blog启用SSL证书以来,一直用LetsEncrypt家的免费SSL证书。最近,因为配置一些新的域名,免不了要继续申请LetsEncrypt的新证书。之前申请证书的方法,都是手动git clone在GitHub上的那个certbot项目,然后运行命令。这种方式唯一的不足,是certbot本身需要用到python环境,每次申请证书还会更新一些本机的环境,如果遇到了Linux的包冲突,还得先解决冲突才行。
解决办法
基于这样的困扰,哥想到了能不能用Docker来实现证书的申请?毕竟使用Docker的初衷,就是解决和隔离环境上的差异。结果google了一下,还真找到了这样的骚操作,顺便修改了一下脚本,实现了在Docker中运行certbot来申请证书的目的。由于是在Docker中运行,不用担心不同的服务器环境带来的差异,只需要把LetsEncrypt的目录映射到宿主机上即可。这样,新申请到的SSL证书能直接写入到宿主机的对应位置。基于Docker运行certbot,还能够做到即用即抛,每次运行申请SSL证书的容器,用完生成证书后,容器随即删掉,相当的方便。
封装了一个简单的脚本,在容器中申请证书的姿势大致如下:
1 |
|
其中的 -v
参数,将LetsEncrypt的目录跟宿主机关联起来,这样,每次生成的证书会保存在宿主机对应位置/etc/letsencrypt/
中。-p
端口的映射,是为了在生成证书的时候,让certbot可以验证端口。--rm
参数,是为了达到用完即删除容器的效果,容器运行一次后,自从删除。
运行示例:
1 | ./cert.sh example.com |
创建的脚本大致如此,非常简单,用起来也非常爽。其实,SSL证书renew的时候,也可以这么干。
我把创建和renew证书的脚本,都放在了gist上,供有需要的同学参考。