certbot自动化生成https证书-应用篇(2)


配置文件准备

根据需要配置初始化配置,token建议写入配置文件

# dnspod.conf
cat > dnspod.conf << EOF
# dnspod
# [申请文档](https://www.dnspod.cn/console/user/security)
certbot_dns_dnspod:dns_dnspod_email = "DNSPOD-API-REQUIRES-A-VALID-EMAIL"
certbot_dns_dnspod:dns_dnspod_api_token = "DNSPOD-API-TOKEN"
EOF

# .env
cat > .env << EOF
# 阿里云
# [申请文档](https://help.aliyun.com/knowledge_detail/38738.html)
ALY_KEY=
ALY_TOKEN=
# 腾讯云
# [申请文档](https://console.cloud.tencent.com/cam/capi)
TXY_KEY=
TXY_TOKEN=
# 华为云
# [申请文档](https://support.huaweicloud.com/devg-apisign/api-sign-provide.html)
HWY_KEY=
HWY_TOKEN=
# GoDaddy
# [申请文档](https://developer.godaddy.com/getstarted)
GODADDY_KEY=
GODADDY_TOKEN=
EOF

生成一个证书

cat > docker-compose.yaml << EOF
version: "3"

services:
  certbot:
    image: darebeat/certbot
    container_name: certbot
    env_file:
      - .env
    environment: 
      - CERT_START_MODE=certonly # 控制初始化或自动续期
      - CERT_DNS_VENDOR=hwy # dnspod|hwy|txy|aly|godaddy
      - CERT_EMAIL=darebeat@126.com
      - CERT_REQ_DOMAINS=darebeat.cn,*.darebeat.cn,*.blog.darebeat.cn # 多个域名用英文逗号隔开
      - CERT_CRON_TIME=1 1 */7 * * # crontab日期格式 # 分 时 日 月 周
      - CERT_LOG_DIR=/var/log
      - TZ=Asia/Shanghai
    volumes:
      - ./etc:/etc/letsencrypt:z
      - ./lib:/var/lib/letsencrypt:z
      - ./log:/var/log/letsencrypt:z
      - ./domains:/opt/certbot/certbot-dns-cnyun/domains:ro
      # - ./docker-entrypoint.sh:/docker-entrypoint.sh # 可以根据需要调整脚本
    entrypoint: /docker-entrypoint.sh # 覆盖镜像默认指令
    command: 
      - certonly    # 同CERT_START_MODE,可以任选其一进行配置(这个优先级高)
      - hwy         # 同CERT_DNS_VENDOR,可以任选其一进行配置(这个优先级高)
EOF

# 启动并查看日志
docker-compose up

自动续期

cat > docker-compose.yaml << EOF
version: "3"

services:
  certbot:
    image: darebeat/certbot
    container_name: certbot
    env_file:
      - .env
    environment: 
      - CERT_START_MODE=renew-auto # 控制初始化或自动续期
      - CERT_DNS_VENDOR=hwy # dnspod|hwy|txy|aly|godaddy
      - CERT_EMAIL=darebeat@126.com
      - CERT_REQ_DOMAINS=darebeat.cn,*.darebeat.cn,*.blog.darebeat.cn # 多个域名用英文逗号隔开
      - CERT_CRON_TIME=1 1 */7 * * # crontab日期格式,证书有效期<30天才会renew,所以crontab可以配置为1天或1周 # 分 时 日 月 周
      - CERT_LOG_DIR=/var/log
      - TZ=Asia/Shanghai
    volumes:
      - ./etc:/etc/letsencrypt:z
      - ./lib:/var/lib/letsencrypt:z
      - ./log:/var/log/letsencrypt:z
      - ./domains:/opt/certbot/certbot-dns-cnyun/domains:ro
      # - ./docker-entrypoint.sh:/docker-entrypoint.sh # 可以根据需要调整脚本
    entrypoint: /docker-entrypoint.sh # 覆盖镜像默认指令
    command: 
      - renew-auto  # 同CERT_START_MODE,可以任选其一进行配置(这个优先级高)
      - hwy         # 同CERT_DNS_VENDOR,可以任选其一进行配置(这个优先级高)
EOF

# 启动
docker-compose up -d
# 查看日志
docker logs -f certbot
docker exec -it certbot tail -f ${CERT_LOG_DIR:-/var/log}/renew.log

环境变量说明

  • CERT_START_MODE: <必选项> 控制初始化或自动续期
    • certonly 第一次初始化证书
    • renew 手动控制证书更新
    • renew-auto 自动控制初始化和自动续期
    • * 其他情况,参考最原始命令
  • CERT_DNS_VENDOR <必选项> 域名解析提供的供应商,和域名云服务器对应;
    • dnspod|hwy|txy|aly|godaddy 调用不同的dns解析生成验证证书
    • * 其他情况,参考最原始命令
  • CERT_EMAIL: <必选项> 域名过期通知邮箱
  • CERT_REQ_DOMAINS: <必选项> 需要生成证书的域名,多个域名用英文逗号分隔;生成的证书文件夹名称以第一个作为标准
  • CERT_CRON_TIME: <可选项> 定时自动证书续期;当且仅当CERT_START_MODE=renew-auto时使用,默认1 1 */1 * *
  • CERT_LOG_DIR: <可选项> 设置自动证书续期日志目录;当且仅当CERT_START_MODE=renew-auto时使用,默认/var/log

问题与支持


文章作者: darebeat
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 darebeat !
  目录