Releases: AptS-1547/acme-docker-reloader
Release v1.0.1
发布日期: 2025-10-25
📦 补丁版本
这是一个小版本更新,主要改进了 Docker volume 管理方式,提升了数据管理的灵活性和可维护性。
🔄 主要改动
改用 Named Volume + Local Driver
将 docker-compose.yml 中的直接挂载(bind mount)改为使用 Named Volume + Local Driver 的方式。
改动前(v1.0.0)
volumes:
- ./ssl:/ssl
- ./acme-config:/acme.sh
- ./acme-reloader:/acme-reloader改动后(v1.0.1)
volumes:
- acme-ssl:/ssl
- acme-config:/acme.sh
- acme-reloader:/acme-reloader
volumes:
acme-ssl:
name: acme-ssl
driver: local
driver_opts:
type: none
o: bind
device: ./ssl优势和好处
-
更符合 Docker 最佳实践
- 使用 Docker 的 volume 管理系统
- Volume 名称清晰易识别
- 便于使用
docker volume命令管理
-
跨项目数据共享
- 其他 Docker Compose 项目可以通过
external: true引用同一 volume - 方便在多个容器间共享证书数据
- 适合微服务架构
- 其他 Docker Compose 项目可以通过
-
保持向后兼容
- 底层仍使用 bind mount,数据存储在项目目录
- 证书文件位置不变(
./ssl/) - 不影响现有配置和使用方式
-
更灵活的管理
- 可以独立管理每个 volume
- 便于备份和迁移
- 支持未来扩展(如使用其他 driver)
📝 详细改动
docker-compose.yml
- ✅ 将 SSL 证书目录改为使用
acme-ssl命名卷 - ✅ 将 acme.sh 配置目录改为使用
acme-config命名卷 - ✅ 将 Socket 通信目录改为使用
acme-reloader命名卷 - ✅ 新增
volumes段定义三个命名卷的详细配置 - ✅ 添加详细的注释说明跨项目共享的使用方法
🔧 跨项目共享示例
如果你的 Nginx 在另一个 Docker Compose 项目中运行,可以这样共享证书:
Nginx 项目的 docker-compose.yml
services:
nginx:
image: nginx:alpine
volumes:
- acme-ssl:/etc/nginx/ssl:ro # 只读挂载共享的证书
volumes:
acme-ssl:
external: true # 引用外部已存在的 volume这样 Nginx 就可以直接使用 acme-reloader 项目中的证书,无需复制。
⚙️ 升级指南
从 v1.0.0 升级
方式 1:无缝升级(推荐)
由于底层仍使用 bind mount,只需重新创建容器即可:
# 1. 拉取最新代码
git pull origin master
# 2. 重新创建容器
docker-compose down
docker-compose up -d方式 2:清理旧容器后升级
如果想完全重新创建:
# 1. 停止并删除容器和旧的匿名 volume
docker-compose down -v
# 2. 拉取最新代码
git pull origin master
# 3. 启动新容器
docker-compose up -d注意: 由于数据存储在项目目录(./ssl/、./acme-config/),不会丢失证书和配置。
🔍 验证升级
升级后可以验证 volume 是否正确创建:
# 查看所有 volume
docker volume ls | grep acme
# 应该看到三个 volume:
# acme-ssl
# acme-config
# acme-reloader
# 查看 volume 详情
docker volume inspect acme-ssl
# 验证证书文件仍然可访问
ls -la ./ssl/📊 影响范围
- 功能: 无变化,完全向后兼容
- 性能: 无影响
- 数据: 不需要迁移,数据位置不变
- 配置: 不需要修改现有配置
- 文档: 更新了 docker-compose.yml 内联文档
🐛 已知问题
无新增问题。
🔗 相关链接
- GitHub: https://github.com/AptS-1547/acme-docker-reloader
- 问题反馈: https://github.com/AptS-1547/acme-docker-reloader/issues
📝 完整更新日志
[1.0.1] - 2025-10-24
Changed
- 将 docker-compose.yml 中的直接挂载改为 Named Volume + Local Driver 方式
- 优化了 volumes 配置,使用更符合 Docker 最佳实践的方式
- 添加了跨项目数据共享的文档说明
Documentation
- 更新 docker-compose.yml 内联注释
- 添加跨项目 volume 共享的使用示例
下载地址: https://github.com/AptS-1547/acme-docker-reloader/releases/tag/v1.0.1
从 v1.0.0 升级: 完全向后兼容,只需 git pull && docker-compose up -d
如果这个项目对你有帮助,欢迎 ⭐️ Star 支持!
Full Changelog: v1.0.0...v1.0.1
Release v1.0.0
发布日期: 2025-10-24
🎉 首个正式版本发布
acme-reloader v1.0.0 是第一个稳定的生产就绪版本,提供了完整的 acme.sh Docker 证书自动化解决方案。
✨ 核心特性
开箱即用的设计
- 三步部署:克隆项目 → 运行 install.sh → docker-compose up -d
- 零配置启动:默认配置即可满足大多数使用场景
- 自动化一切:证书自动续签、服务自动重载、无需人工干预
容器到宿主机通信
- 基于双 Named Pipe 的可靠 IPC 机制
- 支持容器内 acme.sh 与宿主机服务通信
- 完善的超时、重试和错误处理
灵活的配置系统
- YAML 格式配置文件
- 支持多服务配置
- 可自定义重载命令和超时时间
完善的日志系统
- 多级别日志输出(DEBUG/INFO/WARN/ERROR)
- 自动日志轮转
- 详细的操作历史记录
📦 主要组件
- acme-reloader-host: 宿主机守护进程,监听重载请求
- acme-reloader.sh: 容器客户端脚本,发送重载通知
- 库模块: logger、config、ipc、service 四大功能模块
- docker-compose.yml: 开箱即用的容器编排配置
🐛 修复的问题
配置解析
- ✅ 修复配置解析时日志系统未初始化导致启动失败
- ✅ 修复
set -u模式下可选参数触发 unbound variable 错误 - ✅ 修复
((line_num++))在set -e下返回 false 导致退出 - ✅ 修复 services 配置解析顺序错误,服务名被误识别为普通键值对
IPC 通信
- ✅ 从单 pipe 重构为双 pipe 机制,彻底解决死锁问题
request.pipe: 客户端 → 服务端response.pipe: 服务端 → 客户端
- ✅ 实现可靠的双向通信
- ✅ 客户端不再依赖配置文件,支持容器环境运行
容器兼容性
- ✅ 自动在 Alpine 容器中安装 bash
- ✅ 保持 acme.sh 的 crond 自动续签功能
- ✅ 脚本兼容容器和宿主机两种环境
📚 文档
- 完整的 README.md 使用指南
- 详细的配置说明 (docs/CONFIG.md)
- 安装指南 (docs/INSTALL.md)
- 故障排查文档 (docs/TROUBLESHOOTING.md)
🚀 快速开始
# 1. 克隆项目
git clone https://github.com/AptS-1547/acme-docker-reloader.git
cd acme-reloader
# 2. 运行安装脚本
sudo ./install.sh
# 3. 启动容器
docker-compose up -d📋 系统要求
- 操作系统: Linux (推荐 Ubuntu 20.04+, Debian 10+, CentOS 7+)
- Shell: Bash 4.0+
- 可选: Docker (用于容器化 acme.sh)
- 可选: systemd (用于服务管理)
🔧 配置示例
单服务配置
services:
nginx:
command: "nginx -t && systemctl reload nginx"
enabled: true
timeout: 15多服务配置
services:
nginx:
command: "systemctl reload nginx"
enabled: true
haproxy:
command: "systemctl reload haproxy"
enabled: trueDocker 容器服务
services:
nginx_container:
command: "docker exec nginx nginx -s reload"
enabled: true🎯 适用场景
- acme.sh 运行在 Docker 容器中
- Web 服务器(Nginx/Caddy/HAProxy)运行在宿主机或其他容器
- 需要在证书更新后自动重载服务
- 需要多个服务同时重载
🔄 工作流程
┌─────────────────────┐ ┌──────────────────┐
│ acme.sh 容器 │ pipe │ 宿主机 │
│ - 自动续签证书 │◄───────►│ - Nginx/Caddy │
│ - 调用 reloadcmd │ 通信 │ - 自动重载 │
└─────────────────────┘ └──────────────────┘
- acme.sh 在容器中自动续签证书
- 续签完成后调用
reloadcmd(容器内的/acme-reloader.sh) - 客户端脚本通过 named pipe 发送重载请求到宿主机
- 宿主机守护进程接收请求并执行配置的重载命令
- 返回执行结果给客户端
⚠️ 已知限制
- Named pipe 通信仅支持本地(同一台机器)
- 需要正确配置目录挂载
- 容器需要安装 bash(已自动处理)
🙏 致谢
- acme.sh - 优秀的 ACME 客户端
- 所有测试和反馈的用户
📝 更新日志
[1.0.0] - 2025-10-24
Added
- 完整的 acme.sh Docker 证书自动化解决方案
- 双 named pipe IPC 通信机制
- 模块化的库架构(logger、config、ipc、service)
- YAML 配置文件支持
- systemd 服务集成
- 完整的文档和示例
Fixed
- 配置解析时日志系统未初始化的问题
set -u模式下可选参数报错- services 配置解析顺序错误
- Named pipe 单向通信导致的死锁问题
- 容器环境下脚本依赖配置文件的问题
Changed
- 从单 pipe 重构为双 pipe 通信机制
- 优化了配置解析逻辑
- 改进了错误处理和日志输出
🔗 相关链接
- GitHub: https://github.com/AptS-1547/acme-docker-reloader
- 问题反馈: https://github.com/AptS-1547/acme-docker-reloader/issues
- 文档: https://github.com/AptS-1547/acme-docker-reloader/tree/master/docs
📄 许可证
MIT License - 详见 LICENSE 文件
下载地址: https://github.com/AptS-1547/acme-docker-reloader/releases/tag/v1.0.0
如果这个项目对你有帮助,欢迎 ⭐️ Star 支持!
Full Changelog: https://github.com/AptS-1547/acme-docker-reloader/commits/v1.0.0