docker nginx letsencrypt

https愈來愈流行了,但免費的證書通常是一年有效期。通常是夠用了,但懶人都想一勞永逸,nginx

有個免費證書頒發機構是letsencrypt。它是開源,而且徹底免費的,它頒發的證書已經被幾乎全部的瀏覽器所承認。證書90天有效期,支持自動續訂。git

本身的服務器使用docker進行部署的,基本上有新項目都強迫症般docker化。letsencrypt這確定支持docker運行的。web

官方有個certbot/certbot docker鏡像docker

本地使用nginx反向代理的,好比個人一個域名https://git.dxgz.work/瀏覽器

修改nginx配置,添加服務器

    location ~ /.well-known{       # https證書自動更新
                proxy_pass http://127.0.0.1:88;         # certon自動更新接口
    }

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

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/sslcode

由於有效期限制,須要配置自動更新,好比這樣,放到crontab定時任務中blog

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,請參考個人另外一博客以上
相關文章
相關標籤/搜索