docker nginx letsencrypt

https越来越流行了,但免费的证书一般是一年有效期。一般是够用了,但懒人都想一劳永逸,

有个免费证书颁发机构是letsencrypt。它是开源,并且完全免费的,它颁发的证书已经被几乎所有的浏览器所认可。证书90天有效期,支持自动续订。

自己的服务器使用docker进行部署的,基本上有新项目都强迫症般docker化。letsencrypt这肯定支持docker运行的。

官方有个certbot/certbot docker镜像

本地使用nginx反向代理的,比如我的一个域名https://git.dxgz.work/

修改nginx配置,添加

    location ~ /.well-known{       # https证书自动更新
                proxy_pass http://127.0.0.1:88;         # certon自动更新接口
    }

88端口是cerbot的容器的端口,重载配置

sudo /usr/sbin/nginx -s reload    # 这个是装在主机的nginx重载命令
docker exec -it nginx.web /usr/sbin/nginx -s reload
# 我是使用docker的,要用这个命令

certbot第一次运行时需要配置域名和邮箱地址,之后使用renew就可以了

 docker run -it --rm -p 88:80 --name certbot 
 -v "/data/ssl:/etc/letsencrypt"  
 certbot/certbot 
 certonly  --standalone 
 --email `你的邮箱地址` 
 -d `你的域名地址` -d www.`你的域名地址`

 上述命令将域名的ssl证书放在本地   /data/ssl

因为有效期限制,需要配置自动更新,比如这样,放到crontab定时任务中

renew_cert.sh
# 运行docker-更新证书
cd /data/letsencrypt && docker-compose up

# reload nginx 配置,加载新证书
#docker exec -it nginx.web /usr/sbin/nginx -t
docker exec -it nginx.web /usr/sbin/nginx -s reload
上面的docker-compose.yml内容
version: '3'

services:
  web:
    image: certbot/certbot
    container_name: certbot.ssl.web
    volumes:
      - /data/ssl:/etc/letsencrypt
    ports:
      - "88:80"
    command: renew
crontab -e 添加一个定时任务,当然了,docker是需要root权限启动的,或者配置了普通用户运行
0 0 * * * /data/letsencrypt/renew_cert.sh > /dev/null 2>&1
 每天凌晨0点运行



得到证书后,配置nginx,请参考我的另一博客
以上
原文地址:https://www.cnblogs.com/duoxuan/p/10573640.html