1、拉去镜像
1
| docker pull certbot/certbot
|
2、创建docker-compose.yml文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| version: '1.0'
services: certbot: image: certbot/certbot container_name: certbot volumes: - /data/docker/nginx/certs:/etc/letsencrypt - /data/docker/nginx/html:/var/www/html networks: - certbot_network restart: always
networks: certbot_network: driver: bridge
|
3、创建nginx配置
1 2 3 4 5 6 7 8 9 10
| server { listen 80; server_name xxx.com;
location ^~ /.well-known/acme-challenge/ { root /usr/share/nginx/html; default_type text/plain; } }
|
4、启动容器
6、测试域名是否发放成功
certonly:只获取证书,不配置web服务器
–webroot:使用webroot验证方式
–dry-run:测试模式,不实际申请证书
-d:指定要申请证书的域名(可以多个,最多100个)
–non-interactive:非交互模式运行
–agree-tos:同意服务条款
–email:提供联系邮箱
1 2 3 4
| docker run --rm \ -v /data/docker/nginx/certs:/etc/letsencrypt \ -v /data/docker/nginx/html:/var/www/html \ certbot/certbot certonly --webroot -w /var/www/html --dry-run -d web.moonhalo.fun -d img.moonhalo.fun --non-interactive --agree-tos --email xx@qq.com
|
如果输出 The dry run was successful.,说明测试成功。
7、正式获取证书
去掉 --dry-run 运行
1 2 3 4
| docker run --rm \ -v /data/docker/nginx/certs:/etc/letsencrypt \ -v /data/docker/nginx/html:/var/www/html \ certbot/certbot certonly --webroot -w /var/www/html -d web.moonhalo.fun -d img.moonhalo.fun --non-interactive --agree-tos --email xx@qq.com
|
8、生成结果文件
Certbot 会在 ./certs/live/xxx.com/ 目录下生成证书文件,包括:
fullchain.pem:完整的证书链
privkey.pem:私钥
9、修改nginx配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| server { listen 443 ssl http2; server_name xxx.com; client_max_body_size 100M;
ssl_certificate /etc/nginx/certs/live/web.moonhalo.fun/fullchain.pem; ssl_certificate_key /etc/nginx/certs/live/web.moonhalo.fun/privkey.pem; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on;
location / { } }
|
10、重启nginx
11、配置定时任务
配置定时任务,在每月1号和15号执行一次,检查检查和更新域名证书
1 2 3 4 5
| sudo crontab -e
0 0 1,15 * * cd /root/docker/nginx && /usr/bin/docker compose run --rm certbot renew && /usr/bin/docker compose restart nginx
|
12、更换域名
重新运行第七步,修改nginx配置为对应证书,重启nginx即可