为了验证域名所有权,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
# 颁发证书
# letsencrypt 证书
docker exec -it acme.sh --set-default-ca --server letsencrypt
docker exec -it acme.sh --issue --dns dns_ali -d yourdomain.com -d *.yourdomain.com
# zerossl 证书
docker exec -it acme.sh --register-account -m xxx@xxx.com --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
# letsencrypt 证书
docker-compose exec acme.sh --set-default-ca --server letsencrypt
docker-compose exec acme.sh --issue --dns dns_ali -d yourdomain.com -d *.yourdomain.com
# zerossl 证书
docker exec -it acme.sh --register-account -m xxx@xxx.com --issue --dns dns_ali -d yourdomain.com -d *.yourdomain.com
以上配置中, 是将${PWD}/acme.sh挂载至容器的/etc/acme.sh;${PWD}/acme.sh可以自行修改。