https://github.com/apts-1547/acme-docker-reloader
🔄 Out-of-the-box acme.sh Docker automation solution - Auto-renew SSL certificates and reload services
https://github.com/apts-1547/acme-docker-reloader
acme automation certificate-management certificate-renewal devops docker docker-compose shell-script ssl systemd
Last synced: 4 months ago
JSON representation
🔄 Out-of-the-box acme.sh Docker automation solution - Auto-renew SSL certificates and reload services
- Host: GitHub
- URL: https://github.com/apts-1547/acme-docker-reloader
- Owner: AptS-1547
- License: mit
- Created: 2025-10-24T11:13:33.000Z (8 months ago)
- Default Branch: master
- Last Pushed: 2025-10-24T15:59:34.000Z (8 months ago)
- Last Synced: 2025-10-24T17:33:47.281Z (8 months ago)
- Topics: acme, automation, certificate-management, certificate-renewal, devops, docker, docker-compose, shell-script, ssl, systemd
- Language: Shell
- Homepage:
- Size: 40 KB
- Stars: 4
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# acme-reloader
[](LICENSE)
**开箱即用的 acme.sh Docker 证书自动化解决方案**
一个完整的解决方案,让 acme.sh 在 Docker 容器中自动申请和续签证书,并在证书更新后自动重载宿主机或其他容器的服务(如 Nginx、Caddy 等)。
## ✨ 为什么选择 acme-reloader?
- 🚀 **开箱即用**:克隆、安装、启动,三步搞定
- 🐳 **完美容器化**:acme.sh 运行在 Docker,Web 服务器在宿主机或其他容器
- 🔄 **自动化一切**:证书自动续签,服务自动重载,无需人工干预
- 🛡️ **健壮可靠**:超时重试、错误处理、详细日志
- 📝 **配置简单**:只需配置一条重启命令即可
## 🎯 使用场景
这个项目专为以下场景设计:
- acme.sh 运行在 Docker 容器中
- Nginx/Caddy 运行在宿主机上
- 需要在证书更新后自动重载 Web 服务器
**架构图:**
```
┌─────────────────────┐ ┌──────────────────┐
│ acme.sh 容器 │ socket │ 宿主机 │
│ - 自动续签证书 │◄───────►│ - Nginx/Caddy │
│ - 调用 reloadcmd │ 通信 │ - 自动重载 │
└─────────────────────┘ └──────────────────┘
```
## 🚀 快速开始
### 三步部署
```bash
# 1. 克隆项目
git clone https://github.com/AptS-1547/acme-docker-reloader.git
cd acme-reloader
# 2. 运行安装脚本(会提示输入重载命令)
sudo ./install.sh
# 3. 启动 acme.sh 容器
docker-compose up -d
```
就这么简单!🎉
### 申请证书
```bash
# 进入容器(bash 已自动安装)
docker exec -it acme.sh bash
# 首次使用:注册账号
acme.sh --register-account -m your@email.com
acme.sh --set-default-ca --server letsencrypt
# 申请证书(以 Cloudflare DNS 验证为例)
export CF_Token="your_cloudflare_token"
export CF_Zone_ID="your_zone_id"
acme.sh --issue -d example.com -d *.example.com --dns dns_cf
# 安装证书并设置自动重载
acme.sh --install-cert -d example.com \
--cert-file /ssl/example.com/cert.pem \
--key-file /ssl/example.com/key.pem \
--fullchain-file /ssl/example.com/fullchain.pem \
--reloadcmd "bash /acme-reloader.sh"
```
### 配置 Web 服务器
证书文件位于项目的 `ssl/` 目录下,配置你的 Nginx:
```nginx
server {
listen 443 ssl;
server_name example.com;
# 使用证书的绝对路径
ssl_certificate /path/to/acme-reloader/ssl/example.com/fullchain.pem;
ssl_certificate_key /path/to/acme-reloader/ssl/example.com/key.pem;
# 其他配置...
}
```
重载 Nginx:
```bash
sudo nginx -t
sudo systemctl reload nginx
```
完成!🎊 证书会自动续签,续签后自动重载 Nginx。
## 📁 项目结构
```
acme-reloader/
├── bin/ # 可执行脚本
│ ├── acme-reloader.sh # 容器端客户端
│ └── acme-reloader-host.sh # 宿主机端守护进程
├── lib/ # 库模块
│ ├── logger.sh # 日志模块
│ ├── config.sh # 配置解析
│ ├── ipc.sh # 进程间通信
│ └── service.sh # 服务管理
├── config/ # 配置文件
│ └── config.yml # 主配置(安装时自动生成)
├── ssl/ # 证书存储(自动创建)
├── acme-config/ # acme.sh 配置(自动创建)
├── acme-reloader/ # Socket 通信目录(自动创建)
├── logs/ # 日志目录(自动创建)
├── docker-compose.yml # 核心配置文件
├── install.sh # 一键安装脚本
├── uninstall.sh # 一键卸载脚本
└── README.md # 本文件
```
## 🔧 工作原理
1. **安装阶段**:
- `install.sh` 在当前目录初始化项目
- 配置 systemd 服务运行 `acme-reloader-host.sh`
- 创建必要的目录和配置文件
2. **运行阶段**:
- `acme-reloader-host.sh` 在宿主机作为守护进程运行
- 创建命名管道(socket)等待通知
3. **证书更新**:
- acme.sh 容器中的证书到期自动续签
- 续签完成后调用 `reloadcmd`(即容器内的 `/acme-reloader.sh`)
- 脚本通过 socket 通知宿主机守护进程
- 守护进程执行配置的重载命令(如 `systemctl reload nginx`)
- 返回执行结果
## ⚙️ 配置说明
配置文件在 `config/config.yml`,安装时会自动生成。
### 核心配置
```yaml
services:
main:
command: "systemctl reload nginx" # 你的重载命令
enabled: true
timeout: 15
```
### 多服务配置
如果需要同时重载多个服务:
```yaml
services:
nginx:
command: "systemctl reload nginx"
enabled: true
caddy:
command: "systemctl reload caddy"
enabled: true
```
### Docker 容器服务
如果你的 Nginx 也在 Docker 中:
```yaml
services:
nginx_container:
command: "docker exec nginx nginx -s reload"
enabled: true
```
## 🐛 故障排查
### 检查服务状态
```bash
# 检查宿主机守护进程
sudo systemctl status acme-reloader-host
# 查看日志
sudo journalctl -u acme-reloader-host -f
tail -f ./logs/acme-reloader.log
```
### 手动测试重载
```bash
# 在容器内测试
docker exec acme.sh bash /acme-reloader.sh
# 在宿主机测试
./bin/acme-reloader.sh
```
### 常见问题
#### Socket not found
**问题**:容器无法连接到宿主机
**解决**:
1. 检查守护进程是否运行:`sudo systemctl status acme-reloader-host`
2. 检查 socket 是否存在:`ls -la ./acme-reloader/socket/`
3. 重启守护进程:`sudo systemctl restart acme-reloader-host`
#### 服务重载失败
**问题**:命令执行失败
**解决**:
1. 查看详细日志:`tail -f ./logs/acme-reloader.log`
2. 手动测试命令:`systemctl reload nginx`
3. 检查配置文件:`cat config/config.yml`
4. 确认有 sudo 权限
更多故障排查请查看 [docs/TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md)
## 📚 详细文档
- [安装指南](docs/INSTALL.md) - 详细的安装步骤和配置说明
- [配置说明](docs/CONFIG.md) - 完整的配置选项文档
- [故障排查](docs/TROUBLESHOOTING.md) - 常见问题和解决方案
## 🔄 升级
```bash
# 1. 备份配置
cp config/config.yml ~/config.yml.bak
# 2. 停止服务
sudo systemctl stop acme-reloader-host
docker-compose down
# 3. 拉取最新代码
git pull
# 4. 重新安装(会保留现有配置)
sudo ./install.sh
# 5. 重启服务
sudo systemctl start acme-reloader-host
docker-compose up -d
```
## 🗑️ 卸载
```bash
sudo ./uninstall.sh
```
## 🤝 贡献
欢迎提交 Issue 和 Pull Request!
## 📄 许可证
MIT License
## 👤 作者
AptS:1547
## 🙏 致谢
- [acme.sh](https://github.com/acmesh-official/acme.sh) - 出色的 ACME 客户端
- 所有贡献者
## ⭐ Star History
如果这个项目对你有帮助,欢迎给个 Star!
---
**快速链接**:[安装指南](docs/INSTALL.md) | [配置说明](docs/CONFIG.md) | [故障排查](docs/TROUBLESHOOTING.md) | [提交 Issue](https://github.com/AptS-1547/acme-docker-reloader/issues)