Skip to content

Releases: AptS-1547/acme-docker-reloader

Release v1.0.1

24 Oct 16:01
3ac16bc

Choose a tag to compare

发布日期: 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

优势和好处

  1. 更符合 Docker 最佳实践

    • 使用 Docker 的 volume 管理系统
    • Volume 名称清晰易识别
    • 便于使用 docker volume 命令管理
  2. 跨项目数据共享

    • 其他 Docker Compose 项目可以通过 external: true 引用同一 volume
    • 方便在多个容器间共享证书数据
    • 适合微服务架构
  3. 保持向后兼容

    • 底层仍使用 bind mount,数据存储在项目目录
    • 证书文件位置不变(./ssl/
    • 不影响现有配置和使用方式
  4. 更灵活的管理

    • 可以独立管理每个 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 内联文档

🐛 已知问题

无新增问题。

🔗 相关链接

📝 完整更新日志

[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

24 Oct 15:49
631cff4

Choose a tag to compare

发布日期: 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: true

Docker 容器服务

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   │  通信   │  - 自动重载       │
└─────────────────────┘         └──────────────────┘
  1. acme.sh 在容器中自动续签证书
  2. 续签完成后调用 reloadcmd(容器内的 /acme-reloader.sh
  3. 客户端脚本通过 named pipe 发送重载请求到宿主机
  4. 宿主机守护进程接收请求并执行配置的重载命令
  5. 返回执行结果给客户端

⚠️ 已知限制

  • 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 通信机制
  • 优化了配置解析逻辑
  • 改进了错误处理和日志输出

🔗 相关链接

📄 许可证

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