frankenphp证书和配置实际存于宿主机挂载的/var/lib/caddy、/config及/data/certificates目录;备份需用docker exec一键打包这三路径,还原前必须停容器并解压至宿主机对应挂载点。

证书和配置文件实际存在哪儿
FrankenPHP 自身不存配置或证书,它完全复用 Caddy 的存储逻辑。证书默认写在 /var/lib/caddy(容器内路径),具体是:/var/lib/caddy/certificates/acme-v02.api.letsencrypt.org-directory/yourdomain.com/ 下的 certificate.pem、key.pem、issuer.crt;Caddyfile 和其他配置则存在 /config/Caddyfile 或挂载的 /config/ 目录里。
备份操作必须包含这三类内容
只 tar 一个目录容易漏掉关键项。线上备份要覆盖:
-
/var/lib/caddy/—— 含所有 ACME 证书、账户密钥、续期状态 -
/config/—— 含 Caddyfile、自动重写规则、TLS 设置等 -
/data/certificates/(如果手动放了.crt/.key)—— 这是你自己导入的证书,Caddy 不会把它写进 ACME 目录,必须单独备份
用 docker exec 一键打包最稳
别进容器手敲命令。直接在宿主机运行:
docker exec frankenphp-container tar -czf /tmp/frankenphp-backup-$(date +%Y%m%d).tar.gz \ /var/lib/caddy \ /config \ /data/certificates 2>/dev/null
说明:
- 如果
/data/certificates为空或不存在,tar会报错但不影响其他路径打包,可忽略 - 备份文件生成在宿主机
/tmp/,不是容器里,避免容器重启后丢失 - 务必确认容器名是
frankenphp-container,否则替换成你实际的container_name或 ID - 私钥(
key.pem和example.com.key)都在压缩包里,权限(600)会被保留
还原时最容易被忽略的两件事
还原不是简单解压就完事:
- 还原前必须停掉容器:
docker stop frankenphp-container,否则 Caddy 可能正在写证书,导致文件损坏 -
/var/lib/caddy和/config目录在容器启动时由 volume 挂载,还原时要解压到宿主机对应挂载点(比如./caddy_data和./caddy_config),而不是进容器解压 - 如果用了手动证书(
example.com.crt),还原后要再执行一次chmod 600 ./caddy_data/certificates/example.com.key,Docker 挂载可能重置权限
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











