为了验证域名所有权,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可以自行修改。