ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Nextcloud AIO 初始备份配置指南:本地路径与远程 Borg 仓库的完整实操与源码解析

Nextcloud AIO 初始备份配置指南:本地路径与远程 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的初始备份为切入点系统讲解备份位置本地目录与远程 SSH/Borg 仓库的合法输入规则、Create backup的完整执行流程、备份容器的底层运作机制以及备份成功后界面状态的变化。文章以 004-initial-backup.md 的 QA 验收流程为骨架结合 ConfigurationManager.php 的参数校验、DockerController.php 的容器编排与 backupscript.sh 的实际执行逻辑帮助你理解并正确完成 AIO 的首次备份配置并为后续的备份/恢复操作打好基础。一、备份位置输入两种合法模式与校验规则完成初始安装并启动所有容器后AIO 界面中的Backup and restore备份与恢复区域会出现两个输入框一个是填写本地备份路径另一个是填写远程 SSH 备份仓库 URL二者下方均有对应的格式说明文字。1.1 本地备份路径的合法性判定按照 QA 流程 004-initial-backup.md 的验证用例本地路径需遵循以下规则输入示例预期结果说明/报错路径不能是根目录本身/mnt/、/media/、/host_mnt/、/var/backups/报错路径不能以/结尾/mnt/backup、/media/backup、/host_mnt/c/backup、/var/backups接受合法路径必须以/开头且不以/结尾这一规则在后端源码中有明确实现。ConfigurationManager.php 的validateBorgLocationVars()方法中本地路径必须满足以下条件之一以/开头且不以/结尾如/mnt/backup或者是特殊的 Docker 卷名nextcloud_aio_backupdir该卷需要你提前手动创建例如在 Windows 上创建备份卷时使用。此外源码还包含一条 QA 流程未直接列出的附加校验备份路径不能位于 Nextcloud 数据目录NEXTCLOUD_DATADIR之下或与其相等否则会抛出异常。这是因为备份若包含数据目录本身恢复时会导致备份归档被一并删除源码注释中引用了 nextcloud/all-in-one 的 issue #6607。1.2 远程 Borg 仓库 URL 的合法性判定除了本地路径AIO 还支持通过 SSH 使用 BorgBackup 进行远程备份。远程仓库 URL 必须同时包含和:。QA 流程给出了典型用例输入示例预期结果user无无:报错userhost无:报错userhost:/path无报错ssh://userhost:22/path/to/repo或userhost:/path/to/repo接受对应实现位于 ConfigurationManager.php 的validateBorgRemoteRepo()方法仓库字符串必须包含且必须包含:缺一不可。1.3 本地路径与远程仓库互斥两个输入框不能同时填写要么填本地路径要么填远程仓库 URL。源码中validateBorgLocationVars()对此有明确处理ConfigurationManager.php两者都为空抛出Please enter a path or a remote repo url!两者都不为空抛出Location and remote repo url are mutually exclusive!填写合法的备份位置并提交后页面会重新加载随后 Backup and restore 区域会展示Backup information备份信息区域包含加密密码borg 加密口令、备份位置等重要信息Backup creation创建备份区域包含Create backup创建备份按钮。二、首次备份执行流程从点击按钮到备份完成2.1 备份按钮的交互逻辑点击Create backup按钮后会弹出一个**窗口提示window prompt**用于确认操作你可以选择取消或确认取消直接返回网站页面不做任何操作确认页面出现大号 spinner加载指示器并阻塞页面防止误操作等待一段时间后界面会提示Backup container is currently running备份容器正在运行。2.2 底层执行链路DockerController 的容器编排点击确认后前端请求会进入 PHP 后端。在 DockerController.php 中StartBackupContainerBackup()通过流式响应startStreamingResponse调用startBackup()其核心逻辑为public function startBackup(bool $forceStopNextcloud false, ?\Closure $addToStreamingResponseBody null) : void { $this-configurationManager-backupMode backup; $id self::TOP_CONTAINER; $this-PerformRecursiveContainerStop($id, $forceStopNextcloud, $addToStreamingResponseBody); $id nextcloud-aio-borgbackup; $this-PerformRecursiveContainerStart($id, true, $addToStreamingResponseBody); }即将配置中的backupMode置为backup递归停止所有顶层容器即先停止 Nextcloud 及全部依赖容器保证数据一致性启动nextcloud-aio-borgbackup备份容器执行实际备份。注意StartBackupContainerBackup()中传入了$forceStopNextcloud true表明创建备份会强制停止 Nextcloud这也是备份期间页面被阻塞、实例不可用的原因。2.3 备份容器的定义与挂载nextcloud-aio-borgbackup容器的完整定义见 containers.json。关键信息镜像ghcr.io/nextcloud-releases/aio-borgbackup标签跟随%AIO_CHANNEL%环境变量BORG_REMOTE_REPO、BORG_PASSWORD、BORG_MODE、SELECTED_RESTORE_TIME、RESTORE_EXCLUDE_PREVIEWS、BACKUP_RESTORE_PASSWORD、ADDITIONAL_DIRECTORIES_BACKUP、BORGBACKUP_HOST_LOCATION、BORG_RETENTION_POLICY等卷挂载将主机上的备份目录%BORGBACKUP_HOST_LOCATION%挂载到容器内/mnt/borgbackup同时挂载nextcloud_aio_mastercontainer、nextcloud_aio_nextcloud_data、nextcloud_aio_elasticsearch、nextcloud_aio_redis等卷权限与设备cap_add: SYS_ADMIN、devices: /dev/fuse、read_only: true只读根文件系统并启用apparmor_unconfined——这是为了支持 borg 的 FUSE 挂载与恢复操作。三、远程备份的 SSH 密钥授权流程当选择远程仓库作为备份位置时AIO 的远程备份遵循一套固定的授权流程QA 文档 004-initial-backup.md 中明确列出输入远程 borg 仓库 URL例如ssh://userhost:port/path/to/repo或userhost:/path/to/repo首次连接时自动生成 SSH 密钥对并显示公钥内容你需要把公钥添加到远程服务器的~/.ssh/authorized_keys文件中使 AIO 能够免密连接授权完成后AIO 即可在远程服务器上创建和恢复备份。具体到 QA 验证流程填写合法远程仓库 → 页面重新加载 → 点击Create backup首次备份尝试会失败因为远程尚未授权此时界面会展示 borg 使用的 SSH 公钥供你复制并配置到远程服务器在远程完成授权后再次滚动到页面下方并点击Create backup这次备份应当成功。这一流程在备份容器的启动脚本中有完整实现。start.sh 中当设置了BORG_REMOTE_REPO时export BORG_REPO$BORG_REMOTE_REPO # 私钥/公钥存放位置 export BORGBACKUP_KEY/nextcloud_aio_volumes/nextcloud_aio_mastercontainer/data/id_borg # 首次连接接受新主机密钥 export BORG_RSHssh -o StrictHostKeyCheckingaccept-new -i $BORGBACKUP_KEY而 backupscript.sh 中负责密钥生成与展示if [ -n $BORG_REMOTE_REPO ] ! [ -f $BORGBACKUP_KEY ]; then echo First run, creating borg ssh key ssh-keygen -f $BORGBACKUP_KEY -N echo You should configure the remote to accept this public key fi if [ -n $BORG_REMOTE_REPO ] [ -f $BORGBACKUP_KEY.pub ]; then echo Your public ssh key for borgbackup is: $(cat $BORGBACKUP_KEY.pub) fi即首次运行时自动ssh-keygen生成无口令密钥对存放于 mastercontainer 卷的data/id_borg随后打印公钥内容供你在远程服务器授权。远程 borg 仓库的初始化与本地不同由于borg config不支持远程仓库AIO 会在nextcloud_aio_mastercontainer/data/borg.config中创建一个占位文件来记录“已初始化”加密密钥由远程侧自行保管backupscript.sh。四、备份执行细节从预检到归档备份容器启动后backupscript.sh 会执行一系列预检pre-flight checks全部通过后才真正创建 borg 归档卷挂载检查/nextcloud_aio_volumes下的每个目录都必须是挂载点backupscript.sh默认卷检查nextcloud_aio_apache、nextcloud_aio_nextcloud、nextcloud_aio_database、nextcloud_aio_database_dump、nextcloud_aio_elasticsearch、nextcloud_aio_nextcloud_data、nextcloud_aio_mastercontainer必须全部存在backupscript.sh目标位置检查本地备份时目标目录必须是挂载点否则拒绝执行backupscript.sh关键文件检查configuration.json、config.php、database-dump.sql、数据目录的.ncdata/.ocdata标记文件必须存在且内容有效backupscript.sh上次导出失败标记检查若存在export.failed文件则拒绝创建新备份并提示先手动重启数据库容器重试导出backupscript.sh。预检通过后脚本执行初始化 borg 仓库若未初始化使用borg init --encryptionrepokey-blake2创建加密仓库并对本地仓库额外设置additional_free_space 2G保留 2GB 空闲空间并修复过大的 borg 缓存backupscript.sh创建归档以$CURRENT_DATE-nextcloud-aio格式%Y%m%d_%H%M%S命名归档使用--compression auto,zstd压缩并通过--exclude-from /borg_excludes排除不需要备份的文件backupscript.sh排除项排除文件见 borg_excludes包括 Caddy 配置目录、nextcloud.log、audit.logGDPR 原因、证书目录、会话目录、id_borg*密钥文件等裁剪与压缩按BORG_RETENTION_POLICY默认--keep-within7d --keep-weekly4 --keep-monthly6见 Dockerfile执行borg prune与borg compact自动清理旧归档备份失败处理若创建归档失败脚本会立即删除失败的归档若是在新仓库上的首次失败还会删除borg.config以便你重新选择备份位置backupscript.sh。此外AIO 还支持通过.noaiobackup标记文件排除 Nextcloud 数据目录或预览目录appdata_*/preview/适用于数据目录过大或无需备份预览图的场景backupscript.sh。五、备份成功后的界面状态确认备份流程结束后QA 流程要求确认以下界面变化顶部凭据收起初始安装阶段在页面顶部显示的 Nextcloud 初始凭据容器运行时可见备份成功后应被收进一个details标签可折叠中自动跳转与状态回显等待一段时间并经历几次自动刷新后页面需保持焦点页面会跳转到常规界面并在 Backup and restore 区域显示最近一次备份成功备份选项折叠页面下方会出现一个details标签展开后可以查看所有备份选项。从实现角度看备份容器退出后start.sh 会生成backup_archives.list文件列出所有nextcloud-aio归档及其时间戳写入 mastercontainer 卷的data/backup_archives.list前端据此展示备份历史与“最近一次备份成功”的状态。该文件同样在 ConfigurationManager.php 的getLastBackupTime()中被读取用于在界面上显示最后备份时间。六、与后续 QA 流程的衔接初始备份通过验证后可以继续阅读 020-backup-and-restore.md 完成更完整的备份/恢复验证。该文档进一步要求展开所有备份选项确认包含Backup information、Backup creation、Backup check、Backup restore、Daily backup以及additional backup location六个区域备份恢复区域按时间从新到旧列出所有可用归档支持创建备份、检查备份完整性Check backup integrity与恢复所选备份Restore selected backup三种操作每日自动备份时间支持 24 小时制输入如04:00合法24:00、dfjlk非法可以追加备份额外目录/卷如/etc、nextcloud_aio_mastercontainer但不能是nextcloud/test这类嵌套路径。这些能力同样由 DockerController.php 中对应的StartBackupContainerCheck()、StartBackupContainerRestore()、StartBackupContainerCheckRepair()、StartBackupContainerTest()等方法驱动核心模式与初始备份一致设置backupMode→ 按需停止顶层容器 → 启动 borgbackup 容器执行对应模式的操作。七、关键要点速查本地路径必须以/开头、不以/结尾合法示例/mnt/backup、/media/backup、/host_mnt/c/backup、/var/backups也可使用预建卷名nextcloud_aio_backupdir不得位于NEXTCLOUD_DATADIR之下。远程仓库必须同时包含与:合法示例ssh://userhost:22/path/to/repo、userhost:/path/to/repo。互斥规则本地路径与远程仓库只能二选一不能同时填写。远程授权流程首次备份触发自动生成 SSH 密钥 → 复制公钥到远程~/.ssh/authorized_keys→ 再次点击Create backup完成备份。备份机制基于 BorgBackuprepokey-blake2加密、auto,zstd压缩先递归停止 Nextcloud 容器保证数据一致性再由nextcloud-aio-borgbackup容器执行归档、裁剪与压缩。界面反馈确认备份后页面被 spinner 阻塞并提示备份容器运行中成功后初始凭据收起、最近备份状态显示成功、所有备份选项可折叠展开。赞分享云原生运维后端容器编排【免费下载链接】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点击查看免费下载相关推荐还在忍受GTA5模糊画质用FSR技术让洛圣都焕然一新还在忍受GTA5模糊画质用FSR技术让洛圣都焕然一新 《侠盗猎车手V》GTA5作为史上最成功的开放世界游戏之一至今仍有大量玩家在线。但随着硬件性能的提图形学游戏开发Nextcloud AIO 备份配置升级指南从本地迁移到远程Borg仓库Nextcloud AIO 备份配置升级指南从本地迁移到远程Borg仓库 背景介绍 Nextcloud All in One AIO 是一个集成的Nextcl云原生运维后端容器编排Nextcloud All-in-One 实例恢复实战指南从本地与远程 Borg 备份归档完整还原Nextcloud All in One 实例恢复实战指南从本地与远程 Borg 备份归档完整还原 导读 本指南以 Nextcloud All in One云原生运维后端容器编排创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表