使用Let's Encrypt颁发免费证书,参考地址:Documentation - Let's Encrypt (letsencrypt.org)
acme.sh
github地址 acmesh-official/acme.sh: A pure Unix shell script implementing ACME client protocol (github.com)
使用docker部署acme.sh
deploy to docker containers · acmesh-official/acme.sh Wiki (github.com)
docker run --rm -itd \
-v "$(pwd)/out":/acme.sh \ # 挂载目录
--net=host \
--name=acme.sh \
-v /var/run/docker.sock:/var/run/docker.sock \ # 挂载宿主机docker环境
neilpang/acme.sh daemon
生成证书
由于域名在阿里云购买,因此要使用Ali_Key和Ali_Secret,可以从阿里云创建RAM用户,并授予域名管理的权限
docker exec -e Ali_Key=你的key -e Ali_Secret=你的value acme.sh --issue -d 你的域名1 -d 你的域名2 --dns dns_ali --server letsencrypt
-d 指定域名,可以多个
--server指定颁发证书的CA
--dns 指定dns_ali
部署域名
可以通过ssh、docker等多种方式部署证书
docker exec \
-e DEPLOY_SSH_USER=root \
-e DEPLOY_SSH_SERVER="192.168.0.85" \
-e DEPLOY_SSH_KEYFILE=/etc/nginx/ssl/privkey.pem \
-e DEPLOY_SSH_FULLCHAIN="/etc/nginx/ssl/fullchain.pem" \
-e DEPLOY_SSH_REMOTE_CMD="service nginx force-reload" \
-e DEPLOY_SSH_BACKUP=yes \
acme.sh --deploy -d 你的域名1 --deploy-hook ssh
# docker 部署需要给nginx容器打上标签,如sh.acme.autoload.domain=example.com
docker exec \
-e DEPLOY_DOCKER_CONTAINER_LABEL=sh.acme.autoload.domain=example.com \
-e DEPLOY_DOCKER_CONTAINER_KEY_FILE=/var/certificate/privkey.pem \
-e DEPLOY_DOCKER_CONTAINER_FULLCHAIN_FILE="/var/certificate/fullchain.pem" \
-e DEPLOY_DOCKER_CONTAINER_RELOAD_CMD="service nginx force-reload" \
acme.sh --deploy -d 你的域名1 --deploy-hook docker