nginx 容器安装 acme.sh
把 acme.sh 安装到 nginx 容器里的好处是方便管理,能随 nginx 启动而启动
原理
主要是利用了 linuxserver/nginx 容器的 custom-cont-init.d 目录,此目录可以放自己的脚本,当容器启动时会自动运行。注意:每次启动,包括重启都会运行。
nginx 配置
nginx 配置不用动,映射一个 config 目录即可。
version: "3.8"
services:
nginx:
image: linuxserver/nginx
container_name: nginx
ports:
- 80:80
- 443:443
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
volumes:
- ./nginx/config:/config
restart: unless-stopped
acme.sh 配置
新建一个 acme.sh (名字随意)放入 linuxserver/nginx 容器的 custom-cont-init.d 目录
#!/bin/bash
echo "**** installing acme.sh ****"
curl https://get.acme.sh | sh -s email=abc@abc.com
export CF_Token='xxxxxxxxxxxxxxx'
export CF_Account_ID='xxxxxxxxxxxxxxxx'
mkdir -p /config/keys/abc.com/
/root/.acme.sh/acme.sh \
--issue --dns dns_cf -d abc.com -d *.abc.com \
# --server letsencrypt
/root/.acme.sh/acme.sh --install-cert -d abc.com -d *.abc.com \
--key-file /config/keys/abc.com/cert.key \
--fullchain-file /config/keys/abc.com/cert.crt \
--reloadcmd "nginx -c /config/nginx/nginx.conf -s reload"
sleep 5
复制完成重启容器。
这样每次启动容器,此脚本会自动运行,会自动安装一遍 acme.sh 。
容器里会创建计划任务,每天检测证书有效期,过期会自动更新,更新完毕会自动重启 nginx,达到更新证书的目的。