赞
踩
certbot官网:https://certbot.eff.org/(需要魔法)
下载docker:https://www.runoob.com/docker/centos-docker-install.html
1、用docker下载和准备certbot
docker run -it --rm certbot/certbot --help
2、用docker下载nginx镜像
3、购买好了域名 并且ICP备案了
然后你的域名DNS打开了 比如你买的主域名的xxx.com 你的DNS打开了www.xxx.com
1、理清docker nginx和certbot文件映射关系,做好文件映射
nginx和certbot有两个文件夹要共用:证书生成文件夹和web验证文件夹
容器启动命令如下
(1)准备nginx的启动脚本
这里使用了docker run 语法挂载docker的nginx的配置文件
docker run --rm -p 80:80 -p 443:443 --name nginx --privileged=true \
-v /nginx/conf/nginx.conf:/etc/nginx/nginx.conf \ #挂载nginx的配置文件 我这里直接挂载配置文件出来 你们也可以挂整个文件夹 这个nginx.conf是文件 不是文件夹 所以要先在自己目录下创好 不然挂挂载会有问题
-v /nginx/html:/etc/nginx/html \#挂载nginx的静态html
-v /nginx/log:/var/log/nginx \ #挂载nginx的log
-v /nginx/docker/certbot/www:/usr/share/certbot/www \ #与certbot容器共用,http验证目录
-v /nginx/docker/certbot/ssl:/usr/share/certbot/ssl \ #与certbot容器共用,证书位置
-d nginx \#这个nginx是你的镜像名称
(2)准备certbot的启动脚本
这里使用了docker run 语法挂载docker的certbot的配置文件
docker run -it --rm \
-v /nginx/docker/certbot/www:/data/letsencrypt \ #与nginx容器共用
-v /nginx/docker/certbot/ssl:/etc/letsencrypt \#与nginx容器共用
-v /nginx/docker/certbot/logs:/var/log/letsencrypt \ #挂载日志文件
certbot/certbot certonly -n --webroot --webroot-path=/data/letsencrypt -m 你的邮箱@qq.com --agree-tos -d "你的域名"
2、启动nginx(上面的nginx启动脚本),修改挂载的域名配置文件/nginx/conf/nginx.conf
修改你的配置文件的80端口(默认只有80端口) ,如果你有443端口的就注释掉
server { listen 80; listen [::]:80; server_name xxx.com;#你的域名 server_tokens off; #配置http验证可访问 location ~/.well-known/acme-challenge/ { #此目录都是nginx容器内的目录,对应宿主机volumes中的http验证目录,而宿主机的又与certbot容器中命令--webroot-path指定目录一致,从而就整个串起来了,解决了http验证问题 root /usr/share/certbot/www; } #http跳转到https location / { return 301 https://xxx.com$request_uri; #xxx.com换成你的域名 } #配置文件汇总其它的先不要 注释掉 }
3、重启你的nginx
docker restart nginx
4、执行certbot容器命令(在步骤1中准备好了)
如无意外会出现succee提示,证书创建成功了
5、修改conf.d中的网站配置文件,增加ssl配置
注意:这里的证书地址为nginx里的地址,不要填成宿主机地址
server { listen 80; listen [::]:80; rewrite ^(.*)$ https://$host$1 permanent; #将80端口转发到443 } server { #http服务,一个server可以配置多个location listen 443 ssl; server_name www.xxx.com; #主机名、域名 server_tokens off; ssl_certificate /usr/share/certbot/ssl/live/www.wangyuhaooo.cn/fullchain.pem; #证书里面,必须是包含两套完整的-----BEGIN CERTIFICATE-----和-----END CERTIFICATE----- ssl_certificate_key /usr/share/certbot/ssl/live/www.wangyuhaooo.cn/privkey.pem; #证书密钥文件 ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; #charset koi8-r; #access_log /var/log/nginx/host.access.log main; location /{ root /etc/nginx/html/; #这个路径是docker的nginx里面的静态文件路径 不是本地服务器的静态文件路径 index index.html ; } }
6、重启nginx,查看日志,打开域名测试
docker restart nginx
docker logs -tf --tail 20 nginx
certbot的证书只有三个月时间 所以要写一个重启脚本
更新证书脚本如下:
renew_cert.sh
docker run -it --rm \
-v /nginx/docker/certbot/www:/data/letsencrypt \ #与nginx容器共用,http验证目录
-v /nginx/docker/certbot/ssl:/etc/letsencrypt \ #与nginx容器共用,证书生成目录
-v /nginx/docker/certbot/logs:/var/log/letsencrypt \ #certbot日志
certbot/certbot renew
把 renew_cert.sh 脚本放入Linux的crontab即可,每三月执行一次就可以
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。