nginx default.conf
进入 nginx 目录
cd /opt/nginx-acme/nginx
创建配置文件目录
mkdir conf.d
创建配置基础配置文件
vi default.conf
default.conf
server {
listen 443 ssl;
server_name xxx.example.com;
ssl_certificate /etc/nginx/certs/${server_name}/fullchain.cer;
ssl_certificate_key /etc/nginx/certs/ s e r v e r n a m e / {server_name}/ servername/{server_name}.key;
add_header Strict-Transport-Security “max-age=31536000; includeSubDomains” always;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
创建docker-compose.yml
在
/opt/nginx-acme/acme
程序运行路径下创建docker-compose.yml,通过docker-compose启动docker镜像的所有参数信息都会写入到该文件中
/acme.sh
映射到/nginx/certs/
这样 nginx 可以直接使用证书!
version: “3”
services:
acme.sh:
image: neilpang/acme.sh
container_name: acme.sh
restart: always
command: daemon
environment:
-
CF_Key=“xxx”
-
CF_Email=“xxx@xx.com”
volumes:
- …/nginx/certs/:/acme.sh
network_mode: host
保存后在 docker-compose.yml
同目录下运行如下命令启动。如果更改了 docker-compose.yml
文件,只要在此运行如下命令,就能够更新到最新状态。
docker-compose up -d
申请证书
运行acme生成证书
docker exec acme.sh --register-account -m xxx@xx.com --issue --dns dns_cf -d xxx.example.com -d *.example.com --force --dnssleep
域名和dns服务商参数根据实际情况自行修改。要使用cloudflare创建证书,需要把域名的ns指向到cloudflare并在cloudflare网站上申请管理员的key。运行完成后证书会保存在./ssl/xxx.example.com/文件夹下。查看是否有如下文件即可:
ca.cer fullchain.cer example.com.cer example.com.conf example.com.csr example.com.csr.conf example.com.key
自动更新证书
运行
crontab -e
来编辑 crontab 文件,添加如下内容,保存即可。
可以运行 crontab -e 来查看已经添加的 crontab 任务
0 0 * * * docker exec acme.sh --cron
创建docker-compose.yml
网络模式选择 host,宿主机需要开放 443 TCP 端口;
./certs 最好也不要改动,acme.sh 生成的证书映射在该目录下;
./conf.d 目录提前创建好并放入配置文件,不知道创建什么仔细阅读
准备运行程序目录
章节;
version: ‘3’
services:
nginx:
image: nginx
restart: always
network_mode: host
volumes:
-
./certs:/etc/nginx/certs
-
./conf.d:/etc/nginx/conf.d
-
./log:/var/log/nginx
-
./www:/var/www
启动nginx
docker-compose up -d
宿主机开放端口
开放端口
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --reload