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,达到更新证书的目的。

添加新评论