通过Docker部署acme.sh
本文介绍一下如何通过 Docker 部署 acme.sh 申请证书,并添加 crontab 任务自动更新证书。
前言
最近觉得这个 Docker
超好用啊,docker-compose
也是个神器,折腾了半天,把服务器上跑的所有应用都 docker 化了,用一个 docker-compose.yml
统一管理,怎一个爽字了得。
今天才把 acme.sh 替换成 docker,在此记录一下。
安装环境
Docker 安装
在此以 Ubuntu 为例,其他系统请自己找下方法,教程很多,很容易的。
1 | wget -qO- https://get.docker.com/ | sudo sh |
docker-compose 安装
docker-compose
作为一个 python 应用,也是可以直接用容器来执行的,下面来安装一下。
1 | sudo curl -L https://github.com/docker/compose/releases/download/1.23.2/run.sh > /usr/local/bin/docker-compose |
下面可以运行一下docker-compose version
来检测一下是否成功,第一次运行 docker-compose 命令会自动拉取docker/compose:1.23.2
镜像。
安装成功会显示如下内容,可能会与我有些差异。
1 | docker-compose version 1.23.2, build 1110ad01 |
部署 acme.sh
编写 docker-compose.yml
本文使用一个docker-compose.yml
文件来部署 acme.sh,不使用 docker-compose 的方法呢,请看官方给出的方法。
在你想要的位置运行如下命令创建docker-compose.yml
文件。
1 | touch docker-compose.yml |
编辑此文件,加入如下内容。需要使用 dns api 的请参考注释中的添加方法添加环境变量,如果有什么类似 CloudXNS 的 IP 白名单记得要加好。
1 | version: "3" |
保存后在docker-compose.yml
同目录下运行如下命令启动 acme.sh。如果更改了docker-compose.yml
文件,只要在此运行如下命令,就能够更新到最新状态。
1 | docker-compose up -d |
申请证书
所有 acme.sh 的正常命令都能够正常使用,需要做一点小小的更改,比如我演示一下使用 CloudXNS API 申请本站的 ECC 泛域名证书,其他命令也类似进行。由于我的 container_name 也是 acme.sh,所以可以直接使用 docker 而非 docker-compose 命令运行。
1 | docker exec acme.sh --issue --dns dns_cx -d iszy.cc -d '*.iszy.cc' --keylength ec-384 |
也可以添加一条 alias 来像往常一样运行 acme.sh,可以将这句添加到.bashrc
或.zshrc
文件中。
1 | alias acme.sh="docker exec acme.sh" |
设置 crontab 任务自动续签
运行crontab -e
来编辑 crontab 文件,添加如下内容,保存即可。
1 | 0 0 * * * docker exec acme.sh --cron |
可以运行crontab -e
来查看已经添加的 crontab 任务。
后话
所以,这就部署好了,还是很方便的,尤其是在你的 VPS 上有不少 docker,并统一使用 docker-compose 进行管理的时候。有兴趣的可以这么折腾一下啦。