Nextcloud All-in-One 实例恢复实战指南:从本地与远程 Borg 备份归档完整还原
云原生运维后端容器编排【免费下载链接】all-in-one The official Nextcloud installation method. Provides easy deployment and maintenance with most features included in this one Nextcloud instance.项目地址https://gitcode.com/GitHub_Trending/al/all-in-one点击查看免费下载导读本指南以 Nextcloud All-in-OneAIO的实例恢复能力为核心系统讲解如何利用 borgbackup 容器生成的加密备份归档在全新或故障实例上完整还原整个 Nextcloud 环境。文章覆盖本地备份目录与远程 SSH 仓库两种恢复场景的完整操作流程、路径与密码校验规则、SSH 公钥授权机制以及恢复背后的底层实现原理rsync / borg extract 双策略与配置保护逻辑帮助读者理解并安全地完成一次端到端实例恢复。文中所有操作细节均对应仓库内的人工 QA 测试计划 tests/QA/010-restore-instance.md 与相关源码实现。恢复前置条件备份归档、位置与密码要执行实例恢复首先需要同时具备三样东西一份 AIO 实例的备份归档由 AIO 内置的 borgbackup 容器生成归档命名遵循日期-nextcloud-aio的约定如2026-09-30T03:00:00-nextcloud-aio。仓库的 QA 测试计划在 tests/QA/assets/backup-archive/readme.md 中说明了测试归档的存放方式——由于 Git LFS 大小限制备份归档被迁移到外部云盘托管实际使用时可自行准备归档文件。归档所在的位置可以是宿主机上的本地目录例如/mnt/backup也可以是远程 SSH 主机上的 Borg 仓库例如ssh://userhost:port/path/to/repo。归档的加密密码即创建备份时使用的 Borg 仓库加密口令repokey-blake2加密见 Containers/borgbackup/backupscript.sh。密码一旦丢失将无法解密归档必须妥善保管。恢复入口位于 AIO 管理界面的初始配置页当实例尚未配置备份位置时页面会同时提供新建 AIO 实例与从备份恢复旧 AIO 实例两个区块见 php/templates/containers.twig。恢复界面三个输入字段与路径要求恢复表单包含三个输入字段对应 php/templates/containers.twig 中的三个 POST 参数字段表单 name示例 / 说明本地备份位置borg_restore_host_location/mnt/backup宿主机目录或 Docker 卷名nextcloud_aio_backupdir远程 Borg 仓库borg_restore_remote_repossh://userhost:port/path/to/repo或userhost:/path/to/repoBorg 加密口令borg_restore_password创建归档时设置的加密密码这三个参数经由 php/src/Controller/ConfigurationController.php 读取后交给ConfigurationManager::setBorgRestoreLocationVarsAndPassword()处理php/src/Data/ConfigurationManager.php期间会执行严格的路径校验本地路径校验规则validateBorgLocationVarsphp/src/Data/ConfigurationManager.php本地路径必须以/开头且不能以/结尾/mnt/backup合法/mnt/backup/非法也可以使用 Docker 卷名nextcloud_aio_backupdir本地路径与远程仓库二者互斥不能同时填写也不能都为空路径不能是 NEXTCLOUD_DATADIR 本身或其子目录否则恢复时归档会被 Nextcloud 数据目录一并删除对应 php/src/Data/ConfigurationManager.php 中的防护逻辑。远程仓库校验规则validateBorgRemoteRepophp/src/Data/ConfigurationManager.php远程 URL 中必须同时包含和:否则直接抛出InvalidSettingConfigurationException。例如user缺和:会被拒绝而userhost:/path与ssh://userhost:22/path均合法校验通过后三个值会被持久化同时将instance_restore_attempt置为true让界面进入恢复尝试中状态。从本地备份位置恢复完整操作流程错误路径 / 错误密码的容错流程QA 测试计划tests/QA/010-restore-instance.md要求系统对错误输入保持可继续调试的容错性输入错误路径如不存在的目录或错误密码提交后点击Test path and encryption测试路径和加密测试容器运行失败后页面刷新回到初始界面并显示Last test failed!最近一次测试失败状态用户可以点击链接查看nextcloud-aio-borgbackup容器的日志定位具体失败原因失败状态下三个输入框会重新出现允许修改路径或密码后再次提交测试。这一流程在自动化测试 php/tests/tests/restore-instance.spec.js 中得到了完整覆盖测试先以不存在的路径/tmp/test/aio-incorrect-path提交再以错误密码foobar提交两次均断言界面出现 Last test failed! 文本。底层失败判定依赖备份容器退出码mastercontainer 通过 php/src/Docker/DockerActionManager.php 中的GetBackupcontainerExitCode()读取nextcloud-aio-borgbackup容器的 ExitCode非 0 即在界面标记失败见 php/templates/containers.twig。测试模式test做了什么点击测试按钮后php/src/Controller/DockerController.php 中的StartBackupContainerTest()先将backupMode置为test、清除instanceRestoreAttempt随后停止所有容器并启动 borgbackup 容器。备份脚本在 test 模式下Containers/borgbackup/backupscript.sh会本地位置检查给定目录下存在名为borg的子文件夹且其中存在 Borg 仓库的config文件远程位置执行borg info验证能否连接仓库最后执行borg list并检查归档列表是否包含nextcloud-aio关键字确认这是 AIO 生成的合法归档。正确路径与密码的恢复流程输入正确的本地路径与密码后完整的恢复链路如下对应 QA 计划第 10-16 行提交并测试页面刷新后除 Test path and encryption 外的所有选项被隐藏测试成功界面显示Last test successful!同时出现两个新选项——Check backup integrity检查备份完整性与备份归档下拉列表按时间从新到旧排列完整性检查可选但推荐点击后弹出确认窗口可取消随后 borgbackup 容器以check模式运行borg check -v --verify-dataContainers/borgbackup/backupscript.sh耗时取决于归档大小。检查通过后界面报告Last check successful!并仅保留选择归档并恢复的选项若检查失败界面会提示归档可能损坏并提供Check and repair backup integrityborg check --repair见 php/templates/containers.twig的修复入口选择归档并恢复在下拉框中选择目标归档下拉值取自selected_restore_time以 UTC 时间显示来自 php/templates/containers.twig可勾选Exclude previews from restore加快恢复速度该选项会触发一次预览目录扫描见 php/templates/containers.twig然后点击Restore selected backup弹出确认窗口可取消等待恢复完成恢复完成后页面自动刷新回到常规容器管理界面所有容器呈stopped已停止状态并重新出现Start and update containers按钮。关于归档下拉列表它由start.sh在每次备份容器运行结束后生成——borg list | grep nextcloud-aio的结果写入 mastercontainer 卷中的backup_archives.list见 Containers/borgbackup/start.sh前端通过ConfigurationManager::getBackupTimes()读取并反转数组保证最新归档排在最前php/src/Data/ConfigurationManager.php。从远程 SSH 位置恢复密钥授权流程远程恢复与本地恢复的区别在于AIO 需要先与远程 SSH 主机建立信任关系。QA 测试计划tests/QA/010-restore-instance.md给出了标准流程填写远程仓库 URL 与密码URL 必须形如ssh://userhost:port/path/to/repo或userhost:/path/to/repo必须含与:若填写user这类不含/:的无效 URL提交时应立即收到错误提示由前述validateBorgRemoteRepo校验兜底首次连接自动生成 SSH 密钥对borgbackup 容器启动时检测到远程仓库且密钥文件不存在会自动执行ssh-keygen -f $BORGBACKUP_KEY -N 生成密钥对Containers/borgbackup/backupscript.sh密钥持久化存储在 mastercontainer 卷的data/id_borg路径见 Containers/borgbackup/start.sh获取并授权公钥首次连接尝试失败后界面会显示生成的 SSH 公钥borg_public_key渲染于 php/templates/containers.twig提示你仍需要在该远程主机上授权此公钥将该公钥追加到远程服务器目标用户的~/.ssh/authorized_keys文件中再次测试授权完成后回到页面重新点击测试按钮此时borg info与borg list应能成功连接远程仓库界面进入与本地恢复相同的后续流程完整性检查 → 选择归档 → 恢复。底层实现上SSH 连接由 Containers/borgbackup/start.sh 中的环境变量配置驱动BORG_REPO被设为远程 URLBORG_RSH使用ssh -o StrictHostKeyCheckingaccept-new -i $BORGBACKUP_KEY即首次连接时自动接受远端主机指纹accept-new。远程归档的密码通过BACKUP_RESTORE_PASSWORD环境变量注入并导出为BORG_PASSPHRASEContainers/borgbackup/start.sh若BORG_PASSWORD与BACKUP_RESTORE_PASSWORD均未设置容器会直接报错退出。这些环境变量由 mastercontainer 的 php/src/Data/ConfigurationManager.php 中getPlaceholderValue()统一注入BORGBACKUP_REMOTE_REPO、BORGBACKUP_MODE、BACKUP_RESTORE_PASSWORD、BORGBACKUP_HOST_LOCATION、SELECTED_RESTORE_TIME、RESTORE_EXCLUDE_PREVIEWS等。恢复的底层实现两种数据还原策略与配置保护当backupMode被置为restore后php/src/Controller/DockerController.php 中的StartBackupContainerRestore()会先以forceStopNextcloud true递归停止全部容器其中 Collabora 会被优先停止以强制保存文档随后启动 borgbackup 容器。真正执行还原的逻辑位于 Containers/borgbackup/backupscript.sh其关键设计如下归档选择若指定了SELECTED_RESTORE_TIME则从borg list中匹配该时间点的nextcloud-aio归档否则自动选取最新归档。本地 vs 远程的差异化还原策略本地归档先borg mount挂载归档到/tmp/borg再用rsync --delete同步回/nextcloud_aio_volumes/期间排除 Caddy 配置、证书、会话文件、日志与configuration.json等运行时敏感项Containers/borgbackup/backupscript.sh远程归档由于borg mount对远程仓库较慢改用borg extract直接就地解包随后用findcomm对比归档清单删除本地存在但归档中不存在的文件保证还原后目录与备份完全一致见 Containers/borgbackup/backupscript.sh。数据排除规则脚本会检测 Nextcloud 数据目录中的.noaiobackup标记文件存在则整个数据目录或预览目录被排除备份/还原并支持通过RESTORE_EXCLUDE_PREVIEWS排除预览图以加速恢复排除预览后会在还原结束时写入trigger-preview.scan标记触发 Nextcloud 容器下次启动时重建预览索引Containers/borgbackup/backupscript.sh、Containers/borgbackup/backupscript.sh。配置文件的恢复后再保护还原完成后脚本会通过jq重新写入configuration.json把backup-mode置回restore并将当前实例的备份位置、远程仓库、AIO 管理密码passphrase与 nextcloud_datadir 恢复为还原前正在使用的值——换言之归档中保存的旧 AIO passphrase不会被恢复这与界面提示当前 AIO passphrase 将被保留一致见 php/templates/containers.twig同时额外备份目录列表与每日备份时间也会被保留Containers/borgbackup/backupscript.sh。还原后的自检与收尾校验还原后的configuration.json必须包含domain与wasStartButtonClicked字段否则判定归档本身不完整并失败退出Containers/borgbackup/backupscript.sh写入skip.update跳过下次 Nextcloud 更新与fingerprint.update下次启动重新生成文件指纹标记Containers/borgbackup/backupscript.sh删除 Redis 的dump.rdb缓存文件避免还原后读到脏缓存Containers/borgbackup/backupscript.sh。另外mastercontainer 的每日备份脚本 Containers/mastercontainer/daily-backup.sh 会在检测到configuration.json中backup-mode为restore时主动退出避免恢复过程中触发定时备份造成干扰。若恢复的备份中包含社区容器community container界面会特别提示需要再执行一次同样的恢复社区容器数据才能被正确还原php/templates/containers.twig。恢复完成后的收尾与验证恢复完成、页面回到容器管理界面后QA 计划tests/QA/010-restore-instance.md要求点击Start and update containers时弹出确认窗口提示应先创建备份——取消则中止确认则显示全屏加载动画大 spinner并启动全部容器等待一段时间后所有容器状态变为绿色healthy实例完全恢复可用。这一完整链路同样被自动化 E2E 测试覆盖 php/tests/tests/restore-instance.spec.js 依次执行检查完整性 → 接受对话框 → 恢复选中备份 → 断言 Last restore successful! → 点击 Start and update containers → 断言 Open your Nextcloud ↗ 链接出现最终还会验证恢复出的实例密码与初始密码一致并确认容器可被正常停止。若恢复过程中断或失败界面会显示Last restore failed!并引导用户调整路径与密码后重试php/templates/containers.twig。延伸阅读备份与恢复的日常管理手动备份、完整性检查、每日自动备份时间、附加备份目录等tests/QA/020-backup-and-restore.md恢复界面的完整模板实现php/templates/containers.twig恢复 / 测试 / 检查的控制器入口php/src/Controller/DockerController.php路径与远程仓库的校验逻辑php/src/Data/ConfigurationManager.phpBorg 还原脚本主体Containers/borgbackup/backupscript.sh 与容器入口 Containers/borgbackup/start.sh赞分享云原生运维后端容器编排【免费下载链接】all-in-one The official Nextcloud installation method. Provides easy deployment and maintenance with most features included in this one Nextcloud instance.项目地址https://gitcode.com/GitHub_Trending/al/all-in-one点击查看免费下载相关推荐Borg 磁盘镜像备份实战从整盘归档到瘦身还原的完整指南Borg 磁盘镜像备份实战从整盘归档到瘦身还原的完整指南 导读 本文讲解如何用 BorgDeduplicating archiver对整个物理磁盘、分区乃运维存储Nextcloud AIO 迁移实战指南从已有 Nextcloud 实例平滑迁移到 All-in-OneNextcloud AIO 迁移实战指南从已有 Nextcloud 实例平滑迁移到 All in One 本文是 Nextcloud AIOAll in O云原生运维后端容器编排Borg borg extract 命令完全指南从归档恢复文件与裸设备Borg borg extract 命令完全指南从归档恢复文件与裸设备 导读 borg extract 是 BorgDeduplicating archiv运维存储上一篇RPG Maker MV 文件一键解密无密钥恢复图片浏览器批量还原音频下一篇GHelper 替代奥创中心3 步换掉它帧数不降还省内存创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →