为了验证域名所有权,Let’s Encrypt支持两种域名验证方式:

  • dns 验证:手动 dns 方式, 手动在域名上添加一条 txt 解析记录, 验证域名所有权.
  • http 验证:http 方式需要在你的网站根目录下放置一个文件, 来验证你的域名所有权,完成验证. 然后就可以生成证书了.

这里以使用阿里云的DNS验证方式为例。

acme.sh可以通过阿里云的API和授权的AccessKey操作域名解析记录。
因此,需要到阿里云申请AccessKey,步骤略。

AccessKeyID:LTAI********6iPV
AccessKeySecret:80wu************************95xt

Docker方式

# 使用守护进程的方式启动容器
docker run -itd –name acme.sh \
-e Ali_Key=LTAI********6iPV \
-e Ali_Secret=80wu************************95xt \
-v ${PWD}/acme.sh:/acme.sh \
neilpang/acme.sh daemon
# 颁发证书
docker exec -it acme.sh –issue –dns dns_ali -d yourdomain.com -d *.yourdomain.com

域名和dns服务商参数根据实际情况自行修改。因免费申请的证书只有3个月的有效期,通过command: daemon参数运行后,该进程会定期自动去域名服务商更新证书,再也不用为证书过期苦恼了。

Docker Compose

version: “2.1”
services:
my-nginx:
build: ./nginx-ngx_cache_purge
container_name: “my-nginx”
ports:
“80:80”
“443:443”
networks:
– frontend
volumes:
/docker/www:/var/www
/docker/nginx/conf.d:/etc/nginx/conf.d
/docker/nginx/ssl:/etc/nginx/ssl
/docker/nginx/log:/var/log/nginx
restart: always
command: nginx -g ‘daemon off;’
acme.sh:
image: neilpang/acme.sh
container_name: “acme.sh”
volumes:
/docker/nginx/ssl:/acme.sh
environment:
– Ali_Key=LTAI********6iPV
– Ali_Secret=80wu************************95xt
command: daemon
networks:
frontend:
driver: bridge

启动方式

docker-compose up -d acme.sh
docker-compose exec acme.sh –issue –dns dns_ali -d yourdomain.com -d *.yourdomain.com

以上配置中, 是将${PWD}/acme.sh挂载至容器的/etc/acme.sh;${PWD}/acme.sh可以自行修改。