记录网站启用 acme.sh 的过程
create: 2024-02-20
因为网站的 SSL 证书快过期了,之前使用的是从阿里云申请的一年免费证书,但现在免费证书只有三个月了。为了一劳永逸解决 SSL 证书问题,我决定在服务器上部署 acme 客户端以自动申请 letsencrypt 证书。
环境
先介绍一下环境,我的网站是使用 docker 部署的,nginx 也运行在 docker 上,所以,部署 acme 也会使用 docker。
docker
docker-compose.yml:
version: "3"
services:
nginx:
image: "nginx"
container_name: "nginx"
restart: "always"
ports:
- "80:80"
- "443:443"
environment:
- TZ=Asia/Shanghai
volumes:
- "/home/docker/nginx:/etc/nginx"
- "/home/wwwroot:/home/wwwroot"
labels:
- "docker-nginx"
acme:
image: "neilpang/acme.sh"
container_name: "acme"
restart: "always"
environment:
- TZ=Asia/Shanghai
- DEPLOY_DOCKER_CONTAINER_LABEL=docker-nginx
volumes:
- "/home/docker/nginx:/etc/nginx"
- "/home/docker/acme/acme.sh:/acme.sh"
- "/home/wwwroot:/home/wwwroot"
command: "daemon"
部署证书
之后我创建了一个 sh 脚本,用于自动更新证书并重启 nginx,这里贴出脚本源码,可供参考:
#/bin/sh
docker exec -it acme acme.sh --register-account -m tyyn1022@gmail.com
// 申请证书
docker exec -it acme acme.sh --issue -d oldme.net --server letsencrypt --webroot /home/wwwroot/oldme-web/static
docker exec -it acme acme.sh --issue -d api.oldme.net --server letsencrypt --webroot /home/wwwroot/oldme-api
docker exec -it acme acme.sh --issue -d admin.oldme.net --server letsencrypt --webroot /home/wwwroot/oldme-admin
// 部署证书
docker exec -it acme acme.sh --install-cert -d oldme.net \
--key-file /etc/nginx/ssl/oldme.net.key \
--fullchain-file etc/nginx/ssl/oldme.net.pem
docker exec -it acme acme.sh --install-cert -d api.oldme.net \
--key-file /etc/nginx/ssl/api.oldme.net.key \
--fullchain-file etc/nginx/ssl/api.oldme.net.pem
docker exec -it acme acme.sh --install-cert -d admin.oldme.net \
--key-file /etc/nginx/ssl/admin.oldme.net.key \
--fullchain-file etc/nginx/ssl/admin.oldme.net.pem
docker restart nginx
自动更新
在系统定时任务里加入上述脚本即可。
本文目录