nextcloud/all-in-one

GitHub: nextcloud/all-in-one

官方维护的 Nextcloud 一体化部署方案,通过 Docker 容器编排将私有云存储、在线办公、视频会议和备份恢复等功能整合为开箱即用的完整解决方案。

Stars: 9424 | Forks: 1000

# Nextcloud All-in-One 官方的 Nextcloud 安装方法。Nextcloud AIO 提供了简单的部署和维护方式,在此 Nextcloud 实例中包含了大部分功能。 其中包括: - Nextcloud - Nextcloud Files 的高性能后端 (Client Push) - 用于高性能缓存的 Redis & APCU - PostgreSQL 作为数据库 - Nextcloud Office(可选) - Nextcloud Talk 的高性能后端和 TURN-server(可选) - Nextcloud Talk 录制服务器(可选) - 备份解决方案(可选,基于 [BorgBackup](https://github.com/borgbackup/borg#what-is-borgbackup)) - Imaginary(可选,用于预览 heic, heif, illustrator, pdf, svg, tiff 和 webp) - ClamAV(可选,Nextcloud 的防病毒后端) - Fulltextsearch(可选) - Whiteboard(可选) - Docker Socket Proxy(可选,[Nextcloud App API](https://github.com/cloud-py-api/app_api#nextcloud-appapi) 所需) - [社区容器](https://github.com/nextcloud/all-in-one/tree/main/community-containers#community-containers)
以及更多功能: - 包含简单的 Web 界面,支持轻松安装和维护 - [包含轻松更新功能](https://github.com/nextcloud/all-in-one#how-to-update-the-containers) - 包含更新和备份通知 - 可以从 AIO 界面启用每日备份,该功能允许随后自动更新所有容器、Nextcloud 及其应用程序 - 包含通过 AIO 界面从备份存档恢复实例的功能(您只需要存档和密码即可在新的 AIO 实例上恢复整个实例) - APCu 作为本地缓存 - Redis 作为分布式缓存和用于文件锁定 - PostgreSQL 作为数据库 - 具有性能优化配置的 PHP-FPM(例如,默认启用 Opcache 和 JIT) - Nextcloud 安全扫描中的 A+ 安全等级 - 准备好在现有的 [反向代理](https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md) 后使用 - 可以在 [Cloudflare Tunnel](https://github.com/nextcloud/all-in-one#how-to-run-nextcloud-behind-a-cloudflare-tunnel) 后使用 - 可以通过 [Tailscale](https://github.com/nextcloud/all-in-one/discussions/6817) 使用 - 准备好通过公共链接上传最大 10 GB 的文件,[可调整](https://github.com/nextcloud/all-in-one#how-to-adjust-the-upload-limit-for-nextcloud)(登录用户可以使用 Web 界面或移动/桌面客户端上传更大的文件,因为在这种情况下使用了分块上传) - PHP 和 Web 服务器超时设置为 3600 秒,[可调整](https://github.com/nextcloud/all-in-one#how-to-adjust-the-max-execution-time-for-nextcloud)(对于大文件上传很重要) - 默认每个 PHP 进程最大 512 MB RAM,[可调整](https://github.com/nextcloud/all-in-one#how-to-adjust-the-php-memory-limit-for-nextcloud) - 包含自动 TLS(通过使用 Let's Encrypt) - 默认为 javascript、css 和 svg 文件启用 Brotli 压缩,这减少了 Nextcloud 加载时间 - 启用 HTTP/2 和 HTTP/3 - Nextcloud 的 "Pretty URLs" 默认启用(从所有链接中移除 index.php) - 视频预览开箱即用,当启用 Imaginary 时,许多最新的图像格式也支持! - 所有功能只需要一个域名而不是多个域名(通常您需要为每个服务拥有一个域名,这要复杂得多) - Nextcloud datadir 的[可调整位置](https://github.com/nextcloud/all-in-one#how-to-change-the-default-location-of-nextclouds-datadir)(例如,便于在 Windows 和 MacOS 上与主机系统轻松共享文件) - 默认情况下受限(有利于安全),但可以[允许访问额外的存储](https://github.com/nextcloud/all-in-one#how-to-allow-the-nextcloud-container-to-access-directories-on-the-host)以启用本地外部存储功能 - 包含[调整默认安装的 Nextcloud 应用](https://github.com/nextcloud/all-in-one#how-to-change-the-nextcloud-apps-that-are-installed-on-the-first-startup)的可能性 - Nextcloud 安装不是只读的——这意味着如果您需要,可以应用补丁(而不必等待下一个版本发布才能应用) - 默认包含 `ffmpeg`、`smbclient` 和 `nodejs` - 包含[永久向 Nextcloud 容器添加额外 OS 软件包](https://github.com/nextcloud/all-in-one#how-to-change-the-nextcloud-apps-that-are-installed-on-the-first-startup)的可能性,无需构建您自己的 Docker 镜像 - 包含[永久向 Nextcloud 容器添加额外 PHP 扩展](https://github.com/nextcloud/all-in-one#how-to-add-php-extensions-permanently-to-the-nextcloud-container)的可能性,无需构建您自己的 Docker 镜像 - 包含[将硬件转码所需的设备传递](https://github.com/nextcloud/all-in-one#how-to-enable-hardware-acceleration-for-nextcloud)给 Nextcloud 容器的可能性 - 包含[将所有 docker 相关文件存储在单独驱动器上](https://github.com/nextcloud/all-in-one#how-to-store-the-filesinstallation-on-a-separate-drive)的可能性 - [LDAP 可以用作用户后端](https://github.com/nextcloud/all-in-one/tree/main#ldap) - 可以从任何以前的 Nextcloud 安装迁移到 AIO。请参阅[此文档](https://github.com/nextcloud/all-in-one/blob/main/migration.md)。 - 也可以向另一个方向迁移(例如,从 AIO 迁移到基于 VM 的安装)。 - [可以添加 Fail2Ban](https://github.com/nextcloud/all-in-one#fail2ban) - [可以添加 phpMyAdmin、Adminer 或 pgAdmin](https://github.com/nextcloud/all-in-one#phpmyadmin-adminer-or-pgadmin) - [可以添加邮件服务器](https://github.com/nextcloud/all-in-one#mail-server) - Nextcloud 可以[通过域名在本地访问](https://github.com/nextcloud/all-in-one#how-can-i-access-nextcloud-locally) - 可以[在本地安装](https://github.com/nextcloud/all-in-one/blob/main/local-instance.md)(如果您不想或无法使实例公开可访问) - [IPv6-ready](https://github.com/nextcloud/all-in-one/blob/main/docker-ipv6-support.md) - 可以与 [Docker rootless](https://github.com/nextcloud/all-in-one/blob/main/docker-rootless.md) 一起使用(有利于额外的安全性) - 运行在 Docker 支持的所有平台上(例如,也在 Windows 和 MacOS 上) - 包含的容器易于调试,因为可以直接从 AIO 界面查看其日志 - [Docker-compose ready](./compose.yaml) - 可以[在容器没有 docker socket 访问权限的情况下安装](https://github.com/nextcloud/all-in-one/tree/main/manual-install) - 可以与 [Docker Swarm](https://github.com/nextcloud/all-in-one#can-i-run-this-with-docker-swarm) 一起安装 - 可以与 [Kubernetes](https://github.com/nextcloud/all-in-one/tree/main/nextcloud-aio-helm-chart) 一起安装 - 几乎所有包含的容器都基于 Alpine Linux(有利于安全性和大小) - 许多包含的容器以非 root 用户身份运行(有利于安全性) - 许多包含的容器具有只读的根文件系统(有利于安全性) - 包含的容器在其自己的 docker 网络中运行(有利于安全性),并且主机上只暴露真正必要的端口 - [一台服务器上的多个实例](https://github.com/nextcloud/all-in-one/blob/main/multiple-instances.md)是可行的,无需处理 VM - 可从 AIO 界面调整备份路径或远程 borg 仓库(便于将备份放在例如不同的驱动器上,如果使用本地备份路径) - 包含备份外部 Docker Volumes 或主机路径的可能性(可用于主机备份) - Borg 备份可以完全从 AIO 界面管理,包括备份创建、备份恢复、备份完整性检查和完整性修复 - 其他形式的[远程备份](https://github.com/nextcloud/all-in-one#are-remote-borg-backups-supported)是间接可能的 - 更新和备份可以[从外部脚本运行](https://github.com/nextcloud/all-in-one#how-to-stopstartupdate-containers-or-trigger-the-daily-backup-from-a-script-externally)。有关完整示例,请参阅[此文档](https://github.com/nextcloud/all-in-one#how-to-enable-automatic-updates-without-creating-a-backup-beforehand)。
## 截图 | 首次设置 | 安装后 | |---|---| | ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/a57b71ddb6221807.png) | ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/d51034f74a221811.png) | ## 如何使用? 以下步骤是为 Linux 编写的。有关特定平台的指导,请参阅: - macOS: [如何在 macOS 上运行 AIO?](#how-to-run-aio-on-macos) - Windows: [如何在 Windows 上运行 AIO?](#how-to-run-aio-on-windows) - Unraid: [如何在 Unraid 上运行 AIO?](#how-to-run-aio-on-unraid) - Synology DSM: [如何在 Synology DSM 上运行 AIO?](#how-to-run-aio-on-synology-dsm) - TrueNAS SCALE: [我可以在 TrueNAS SCALE 上运行 AIO 吗?](#can-i-run-aio-on-truenas-scale) 建议您浏览附带的 [FAQ](#faq)。虽然我们已尽力使事情变得简单,但 Nextcloud 是一个庞大而灵活的平台。阅读 FAQ 将为您节省时间,特别是如果出现边缘情况。 1. 按照官方文档在您的 Linux 主机上安装 Docker:[Docker install — supported platforms](https://docs.docker.com/engine/install/#supported-platforms) 2. 如果您需要 IPv6 支持,请按照以下说明启用:[Docker IPv6 support for AIO](https://github.com/nextcloud/all-in-one/blob/main/docker-ipv6-support.md) 3. AIO 使用一个特殊的 `mastercontainer` 来编排 Nextcloud 堆栈的各个部分。要启动 AIO,请使用以下命令启动 `mastercontainer`: ``` # 对于 Linux 且未安装 Web 服务器或反向代理的情况: sudo docker run \ --init \ --sig-proxy=false \ --name nextcloud-aio-mastercontainer \ --restart always \ --publish 80:80 \ --publish 8080:8080 \ --publish 8443:8443 \ --volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config \ --volume /var/run/docker.sock:/var/run/docker.sock:ro \ ghcr.io/nextcloud-releases/all-in-one:latest ```
命令解释 - `sudo docker run` — 启动一个新的 Docker 容器。如果您的用户在 `docker` 组中,请省略 `sudo`。 - `--init` — 在容器内运行一个 init 进程来处理僵尸进程。 - `--sig-proxy=false` — 防止在附加终端中按 Ctrl+C 停止容器。 - `--name nextcloud-aio-mastercontainer` — 容器名称。不要更改此名称;mastercontainer 更新依赖于它。 - `--restart always` — 确保容器随 Docker 守护进程自动重启。 - `--publish 80:80` — 将容器端口 80 发布到主机端口 80(在获取证书时用于 ACME http-challenge)。如果您在反向代理后运行 AIO,则不需要此端口。 - `--publish 8080:8080` — 在主机端口 8080 上发布 AIO 界面(自签名证书)。如果 8080 已被使用,您可以映射不同的主机端口(例如 `--publish 8081:8080`)。 - `--publish 8443:8443` — 在主机端口 8443 上发布具有有效证书的 AIO 界面(需要端口 80 和 8443 可达,并且有一个域名指向您的服务器)。如果您在反向代理后运行 AIO,则不需要此端口。 - `--volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config` — 将 mastercontainer 配置存储在命名的 Docker 卷中。不要更改此卷名称;内置备份依赖于它。 - `--volume /var/run/docker.sock:/var/run/docker.sock:ro` — 挂载 Docker socket(只读),以便 mastercontainer 可以管理其他容器。在 Windows/macOS 或使用 rootless Docker 时,此路径可能需要调整;请参阅特定平台的文档。如果您更改了 socket 路径,也要相应地设置 `WATCHTOWER_DOCKER_SOCKET_PATH`。如果您不想暴露 socket,请参阅手动安装文档:[Manual install without docker socket access](https://github.com/nextcloud/all-in-one/tree/main/manual-install) - `ghcr.io/nextcloud-releases/all-in-one:latest` — mastercontainer 镜像。 可以通过环境变量设置其他选项(例如 `--env NEXTCLOUD_DATADIR="/mnt/ncdata"` 以在首次启动时更改 Nextcloud 的 datadir)。有关更多选项,请参阅自定义部分和示例 compose 文件:[compose.yaml](https://github.com/nextcloud/all-in-one/blob/main/compose.yaml)。
4. 初始启动后,通过 IP 地址在此服务器的 8080 端口上打开 Nextcloud AIO 界面,例如: ``` https://192.168.5.5:8080 ``` 端口 8080 使用自签名证书,您必须在浏览器中接受该证书。 如果您的防火墙/路由器转发端口 80 和 8443,并且您将一个域名指向您的服务器,也可以自动获取有效证书。在这种情况下,使用专用于此目的的端口 (8443) 访问 AIO 界面,例如: ``` https://your-domain-that-points-to-this-server.tld:8443 ``` 5. 如果您启用 Nextcloud Talk,请在防火墙/路由器中为 Talk (TURN) 容器打开端口 `3478/TCP` 和 `3478/UDP`。 # 常见问题 - [TOC](#faq) - [在哪里可以找到额外的文档?](#where-can-i-find-additional-documentation) - [它是如何工作的?](#how-does-it-work) - [如何做出贡献?](#how-to-contribute) - [支持多少用户?](#how-many-users-are-possible) - [网络](#network) - [是否支持反向代理?](#are-reverse-proxies-supported) - [防火墙/路由器中必须开放哪些端口?](#which-ports-are-mandatory-to-be-open-in-your-firewallrouter) - [所用端口说明](#explanation-of-used-ports) - [关于 Cloudflare 的说明(proxy/tunnel)](#notes-on-cloudflare-proxytunnel) - [如何在 Cloudflare Tunnel 后运行 Nextcloud?](#how-to-run-nextcloud-behind-a-cloudflare-tunnel) - [如何通过 Tailscale 运行 Nextcloud?](#how-to-run-nextcloud-via-tailscale) - [如何使用 ACME DNS-challenge 运行 Nextcloud?](#how-to-get-nextcloud-running-using-the-acme-dns-challenge) - [如何在本地运行 Nextcloud?不需要域名,或者想要在局域网内进行内网访问。](#how-to-run-nextcloud-locally-no-domain-wanted-or-wanting-intranet-access-within-your-lan) - [我可以为 Nextcloud 使用 ip-address 而不是域名吗?](#can-i-use-an-ip-address-for-nextcloud-instead-of-a-domain) - [我可以在离线或隔离系统 中运行 AIO 吗?](#can-i-run-aio-offline-or-in-an-airgapped-system) - [Nextcloud 是否支持自签名证书?](#are-self-signed-certificates-supported-for-nextcloud) - [我可以在多个域中使用 AIO 吗?](#can-i-use-aio-with-multiple-domains) - [Nextcloud 是否支持除默认 443 以外的其他端口?](#are-other-ports-than-the-default-443-for-nextcloud-supported) - [我可以在域名的子目录中运行 Nextcloud 吗?](#can-i-run-nextcloud-in-a-subdirectory-on-my-domain) - [如何在本地访问 Nextcloud?](#how-can-i-access-nextcloud-locally) - [如何覆盖某些域名的本地 DNS 解析或向容器添加额外的主机?](#how-to-overwrite-the-local-dns-resolution-for-some-domains-or-add-extra-hosts-to-the-containers) - [跳过域名验证?](#how-to-skip-the-domain-validation) - [如何解决 Fedora Linux, RHEL OS, CentOS, SUSE Linux 和其他的防火墙问题?](#how-to-resolve-firewall-problems-with-fedora-linux-rhel-os-centos-suse-linux-and-others) - [如何修复内部或保留 ip-address 错误?](#what-can-i-do-to-fix-the-internal-or-reserved-ip-address-error) - [如何调整 docker 网络的 MTU 大小](#how-to-adjust-the-mtu-size-of-the-docker-network) - [基础设施](#infrastructure) - [支持哪些 CPU 架构?](#which-cpu-architectures-are-supported) - [不推荐的 VPS 提供商](#disrecommended-vps-providers) - [推荐的 VPS](#recommended-vps) - [关于存储选项的说明](#note-on-storage-options) - [启用 SELinux 时是否有已知问题?](#are-there-known-problems-when-selinux-is-enabled) - [自定义](#customization) - [如何调整内部使用的 docker api 版本?](#how-to-adjust-the-internally-used-docker-api-version) - [如何更改 Nextcloud Datadir 的默认位置?](#how-to-change-the-default-location-of-nextclouds-datadir) - [如何配置自定义 UID/GID?](#how-to-configure-custom-uidgid) - [如何将 appdata 文件夹从 datadir 移动到 ssd 以提高性能?](#how-to-move-the-appdata-folder-from-the-datadir-to-an-ssd-to-improve-the-performance) - [如何将文件/安装存储在单独的驱动器上?](#how-to-store-the-filesinstallation-on-a-separate-drive) - [如何限制 AIO 的资源使用?](#how-to-limit-the-resource-usage-of-aio) - [如何允许 Nextcloud 容器访问主机上的目录?](#how-to-allow-the-nextcloud-container-to-access-directories-on-the-host) - [如何调整 Talk 端口?](#how-to-adjust-the-talk-port) - [如何调整 Nextcloud 的上传限制?](#how-to-adjust-the-upload-limit-for-nextcloud) - [如何调整 Nextcloud 的最大执行时间?](#how-to-adjust-the-max-execution-time-for-nextcloud) - [如何调整 Nextcloud 的 PHP 内存限制?](#how-to-adjust-the-php-memory-limit-for-nextcloud) - [如何更改首次启动时安装的 Nextcloud 应用?](#how-to-change-the-nextcloud-apps-that-are-installed-on-the-first-startup) - [如何向 Nextcloud 容器永久添加 OS 软件包?](#how-to-add-os-packages-permanently-to-the-nextcloud-container) - [如何向 Nextcloud 容器永久添加 PHP 扩展?](#how-to-add-php-extensions-permanently-to-the-nextcloud-container) - [facerecognition 应用的 pdlib PHP 扩展怎么样?](#what-about-the-pdlib-php-extension-for-the-facerecognition-app) - [如何为 Nextcloud 启用硬件加速?](#how-to-enable-hardware-acceleration-for-nextcloud) - [使用 AMD, Intel 的开源驱动 MESA 和 Nvidia 的 **新** 驱动 `Nouveau`](#with-open-source-drivers-mesa-for-amd-intel-and-new-drivers-nouveau-for-nvidia) - [使用 Nvidia 的专有驱动 :warning: BETA](#with-proprietary-drivers-for-nvidia-warning-beta) - [如何保留已禁用的应用?](#how-to-keep-disabled-apps) - [如何信任用户定义的证书颁发机构 (CA)?](#how-to-trust-user-defined-certification-authorities-ca) - [如何禁用 Collabora 的 Seccomp 功能?](#how-to-disable-collaboras-seccomp-feature) - [如何调整 Fulltextsearch Java 选项?](#how-to-adjust-the-fulltextsearch-java-options) - [指南](#guides) - [如何在 macOS 上运行 AIO?](#how-to-run-aio-on-macos) - [如何在 Windows 上运行 AIO?](#how-to-run-aio-on-windows) - [如何在 Unraid 上运行 AIO?](#how-to-run-aio-on-unraid) - [如何在 Synology DSM 上运行 AIO](#how-to-run-aio-on-synology-dsm) - [如何使用 Portainer 运行 AIO?](#how-to-run-aio-with-portainer) - [我可以在 TrueNAS SCALE 上运行 AIO 吗?](#can-i-run-aio-on-truenas-scale) - [如何运行 `occ` 命令?](#how-to-run-occ-commands) - [如何解决 `初始安装后安全与设置警告显示 "missing default phone region"`?](#how-to-resolve-security--setup-warnings-displays-the-missing-default-phone-region-after-initial-install) - [如何在一台服务器上运行多个 AIO 实例?](#how-to-run-multiple-aio-instances-on-one-server) - [暴力破解保护 FAQ](#bruteforce-protection-faq) - [如何切换通道?](#how-to-switch-the-channel) - [如何更新容器?](#how-to-update-the-containers) - [如何轻松登录 AIO 界面?](#how-to-easily-log-in-to-the-aio-interface) - [如何更改域名?](#how-to-change-the-domain) - [如何正确重置实例?](#how-to-properly-reset-the-instance) - [我可以使用 CIFS/SMB 共享作为 Nextcloud 的 datadir 吗?](#can-i-use-a-cifssmb-share-as-nextclouds-datadir) - [我可以使用 Docker swarm 运行这个吗?](#can-i-run-this-with-docker-swarm) - [我可以使用 Kubernetes 运行这个吗?](#can-i-run-this-with-kubernetes) - [如何使用 Docker rootless 运行这个?](#can-i-run-this-with-podman-instead-of-docker) - [我可以使用 Podman 代替 Docker 吗?](#can-i-run-this-with-podman-instead-of-docker) - [手动访问/编辑 Nextcloud 文件/文件夹](#accessedit-nextcloud-filesfolders-manually) - [如何使用文本编辑器编辑 Nextclouds config.php 文件?](#how-to-edit-nextclouds-configphp-file-with-a-texteditor) - [如何通过创建自定义 skeleton 目录来更改默认文件?](#how-to-change-default-files-by-creating-a-custom-skeleton-directory) - [如何调整版本保留策略和回收站保留策略?](#how-to-adjust-the-version-retention-policy-and-trashbin-retention-policy) - [如何在不事先创建备份的情况下启用自动更新?](#how-to-enable-automatic-updates-without-creating-a-backup-beforehand) - [保护 AIO 界面免受未经授权的 ACME challenges](#securing-the-aio-interface-from-unauthorized-acme-challenges) - [如何从现有的 Nextcloud 安装迁移到 Nextcloud AIO?](#how-to-migrate-from-an-already-existing-nextcloud-installation-to-nextcloud-aio) - [备份](#backup) - [AIO 的备份解决方案备份了什么?](#what-is-getting-backed-up-by-aios-backup-solution) - [如何调整 borgs 保留策略?](#how-to-adjust-borgs-retention-policy) - [如何从 AIO 迁移到 AIO?](#how-to-migrate-from-aio-to-aio) - [是否支持远程 borg 备份?](#are-remote-borg-backups-supported) - [LXC 容器中备份容器的故障](#failure-of-the-backup-container-in-lxc-containers) - [如何在 Windows 上创建备份卷?](#how-to-create-the-backup-volume-on-windows) - [专业提示:备份存档访问](#pro-tip-backup-archives-access) - [手动删除备份存档](#delete-backup-archives-manually) - [定期将本地备份同步到另一个驱动器](#sync-local-backups-regularly-to-another-drive) - [如何从备份中排除 Nextcloud 的数据目录或预览文件夹?](#how-to-exclude-nextclouds-data-directory-or-the-preview-folder-from-backup) - [如何从外部脚本停止/启动/更新容器或触发每日备份?](#how-to-stopstartupdate-containers-or-trigger-the-daily-backup-from-a-script-externally) - [如何禁用备份部分?](#how-to-disable-the-backup-section) - [插件](#addons) - [Fail2ban](#fail2ban) - [LDAP](#ldap) - [Netdata](#netdata) - [USER_SQL](#user_sql) - [phpMyAdmin, Adminer 或 pgAdmin](#phpmyadmin-adminer-or-pgadmin) - [邮件服务器](#mail-server) - [杂项](#miscellaneous) - [集成新容器的要求](#requirements-for-integrating-new-containers) - [更新策略](#update-policy) - [发送更新通知的频率是多少?](#how-often-are-update-notifications-sent) - [巨大的 docker 日志](#huge-docker-logs) ### 在哪里可以找到额外的文档? 部分文档可在 [GitHub Discussions](https://github.com/nextcloud/all-in-one/discussions/categories/wiki) 上找到。 ### 它是如何工作的? Nextcloud AIO 的灵感来自 Portainer 等项目,这些项目通过直接与 docker 守护进程对话来管理它。这个概念允许用户仅使用单个命令安装一个容器,该容器负责创建和管理提供包含大部分功能的 Nextcloud 安装所需的所有容器。它还使更新变得轻而易举,并且不再受限于主机系统(及其缓慢的更新),因为一切都在容器中。此外,从用户的角度来看,它非常易于处理,因为提供了一个简单的界面来管理您的 Nextcloud AIO 安装。 ### 如何做出贡献? 请参阅 [此 issue](https://github.com/nextcloud/all-in-one/issues/5251) 以获取需要贡献者帮助的功能请求列表。 ### 支持多少用户? 最多 100 个用户是免费的,更多用户可以通过 [Nextcloud Enterprise](https://nextcloud.com/all-in-one/) 实现 ## 网络 ### 是否支持反向代理? 是的。请参阅以下文档:[reverse-proxy.md](https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md) ### 防火墙/路由器中必须开放哪些端口? 只有这些(如果您通过端口 8080 在内部访问 Mastercontainer Interface): - `443/TCP` 用于 Apache 容器 - `443/UDP` 如果您想为 Apache 容器启用 http3 - `3478/TCP` 和 `3478/UDP` 用于 Talk 容器 ### 所用端口说明 - `8080/TCP`: Mastercontainer Interface 使用自签名证书(始终有效,即使只能通过 IP-address 访问,例如 `https://ip.address.of.this.server:8080/`)⚠️ **重要:** 如果您访问此端口,请务必使用 ip-address 而不是域名,因为 HSTS 可能会在稍后阻止对它的访问!(由于安全考虑,预期此端口使用自签名证书,您需要在浏览器中接受它) - `80/TCP`: 重定向到 Nextcloud(用于通过 ACME http-challenge 为 Mastercontainer 获取证书) - `8443/TCP`: Mastercontainer Interface 使用有效证书(仅在端口 80 和 8443 在防火墙/路由器中打开/转发并且您将域名指向您的服务器时才有效。它会自动生成有效证书,并可以通过例如 `https://public.domain.com:8443/` 访问。) - `443/TCP`: 稍后将由 Apache 容器使用,并且需要在防火墙/路由器中打开/转发 - `443/UDP`: 稍后将由 Apache 容器使用,如果您想启用 http3,则需要在防火墙/路由器中打开/转发 - `3478/TCP` 和 `3478/UDP`: 将由 Talk 容器内的 Turnserver 使用,并且需要在防火墙/路由器中打开/转发 ### 关于 Cloudflare 的说明(proxy/tunnel) 由于 Cloudflare Proxy/Tunnel 带有许多限制,如下所列,如果可能的话,建议切换到 [Tailscale](https://github.com/nextcloud/all-in-one/discussions/6817)。 - Cloudflare Proxy 和 Cloudflare Tunnel 都要求 Cloudflare 在其端执行 TLS 终止,从而解密其基础设施上的所有流量。这是一个隐私问题,如果这对您来说不可接受,您需要寻找其他解决方案。 - 使用 Cloudflare Tunnel 可能会减慢 Nextcloud,因为无法通过配置的域名进行本地访问,因为 TLS 终止在这种情况下被卸载到 Cloudflare 的基础设施。在 Cloudflare Tunnel 中无法禁用此行为。 - 已知域名验证在 Cloudflare 后可能无法正常工作,因为 Cloudflare 可能会阻止验证尝试。在这种情况下,您可以按照以下说明简单地跳过它:https://github.com/nextcloud/all-in-one#how-to-skip-the-domain-validation - 确保禁用 Cloudflares Rocket Loader 功能](https://help.nextcloud.com/t/login-page-not-working-solved/149417/8),否则 Nextcloud 的登录提示将不会显示。 - Cloudflare 免费计划仅支持上传最大 100 MB 的文件,如果您尝试上传更大的文件,如果未使用分块(例如,用于 Web 中的公共上传,或者如果在客户端或 Web 中将块配置为大于 100 MB),您将收到错误(413 - Payload Too Large)。如果您需要上传更大的文件,则需要在 DNS 设置中禁用代理选项。请注意,这将同时禁用 Cloudflare DDoS 保护和 Cloudflare Tunnel,因为这些服务需要启用代理选项。 - 如果使用 Cloudflare Tunnel 和 Nextcloud Desktop Client [Set Chunking on Nextcloud Desktop Client](https://github.com/nextcloud/desktop/issues/4271#issuecomment-1159578065) - Cloudflare 仅允许请求的最大超时为 100s,这是不可配置的。这意味着任何服务器端处理,例如在上传期间为大文件组装块,如果超过 100s 将根本无法工作。请参阅 https://github.com/nextcloud/server/issues/19223。如果您需要可靠地上传大文件,则需要在 DNS 设置中禁用代理选项。请注意,这将同时禁用 Cloudflare DDoS 保护和 Cloudflare Tunnel,因为这些服务需要启用代理选项。 - 已知 AIO 中包含的 collabora (Nextcloud Office) 在 Cloudflare 后无法开箱即用。要使其工作,您需要将所有 [Cloudflare IP-ranges](https://www.cloudflare.com/ips/) 添加到 `https://yourdomain.com/settings/admin/richdocuments` 的 wopi-allowlist 中 - Cloudflare Proxy 可能会阻止 Nextcloud Talk 的 Turnserver 正常工作。因此您可能需要禁用 Cloudflare Proxy。请参阅 https://github.com/nextcloud/all-in-one/discussions/2463#discussioncomment-5779981 - Nextcloud Talk 的内置 turn-server 在 Cloudflare Tunnel 后将无法工作,因为它需要在同一域名上提供一个单独的端口(默认为 3478 或选择的端口)。如果您仍想使用该功能,则需要安装自己的 turnserver 或使用公开可用的 turnserver,并在 `https://yourdomain.com/settings/admin/talk` 中调整和测试您的 stun 和 turn 设置。 - 如果您在 Nextcloud 的管理概览中收到 HSTS 标头设置不正确的错误,您可能需要在 Cloudflare 中手动启用它。 - 如果您使用的是 AIO 的内置 Reverse Proxy 并且不使用自己的,那么证书颁发可能无法开箱即用,因为 Cloudflare 可能会阻止该尝试。在这种情况下,您需要至少暂时禁用 Proxy 功能以使其工作。请注意,如果您需要 Cloudflare Tunnel,这不是一个选项,因为禁用代理也会禁用 Cloudflare Tunnel,这反过来会使您的服务器无法进行验证。请参阅 https://github.com/nextcloud/all-in-oneussions/1101。 ### 如何在 Cloudflare Tunnel 后运行 Nextcloud? 虽然看起来不像,但从 AIO 的角度来看,Cloudflare Tunnel 的工作方式就像反向代理。因此,请遵循 [reverse proxy documentation](./reverse-proxy.md),其中记录了如何使其在 Cloudflare Tunnel 后运行。但是,在继续之前,请参阅 [caveats](https://github.com/nextcloud/all-in-one#notes-on-cloudflare-proxytunnel)。 ### 如何通过 Tailscale 运行 Nextcloud? 有关 Tailscale 的反向代理示例指南,请参阅 [@Perseus333](https://github.com/Perseus333) 的此指南:https://github.com/nextcloud/all-in-one/discussions/6817 ### 如何使用 ACME DNS-challenge 运行 Nextcloud? 您可以在外部反向代理后安装 AIO,其中还记录了如何使用 ACME DNS-challenge 为 AIO 获取有效证书。请参阅 [reverse proxy documentation](./reverse-proxy.md)。(指的是 `Caddy with ACME DNS-challenge` 部分)。另请参阅 https://github.com/dani-garcia/vaultwarden/wiki/Running-a-private-vaultwarden-instance-with-Let%27s-Encrypt-certs#getting-a-custom-caddy-build 以获取有关此主题的更多文档。 ### 如何在本地运行 Nextcloud?不需要域名,或者想要在局域网内进行内网访问。 如果您不想向公共互联网开放 Nextcloud,您可以查看以下有关如何在本地设置它的文档:[local-instance.md](./local-instance.md),但请记住,您仍然需要让 https 正常工作。 ### 我可以为 Nextcloud 使用 ip-address 而不是域名吗? 不,并且不会添加。如果您只想在本地运行它,您可以查看以下文档:[local-instance.md](./local-instance.md)。建议使用 [Tailscale](https://github.com/nextcloud/all-in-one/discussions/6817)。 ### 我可以在离线或隔离系统 中运行 AIO 吗? 不。这是不可能的,由于多种原因不会添加:更新检查、通过 app-store 安装应用程序、按需下载额外的 docker 镜像等等。 ### Nextcloud 是否支持自签名证书? 不,并且不会支持。如果您想在本地运行,而不向公共互联网开放 Nextcloud,请查看 [local instance documentation](./local-instance.md)。建议使用 [Tailscale](https://github.com/nextcloud/all-in-one/discussions/6817)。 ### 我可以在多个域中使用 AIO 吗? 不,并且不会添加。但是,您可以使用 [this feature](https://github.com/nextcloud/all-in-one/blob/main/multiple-instances.md) 来创建多个 AIO 实例,每个域一个。 ### Nextcloud 是否支持除默认 443 以外的其他端口? 不,并且不会支持。如果端口 443 和/或 80 对您被阻止,如果您想在线发布它,您可以使用 [Tailscale](https://github.com/nextcloud/all-in-one/discussions/6817)。如果您已经在端口 443 上运行不同的服务,请为 Nextcloud 使用专用域,并按照 [reverse proxy documentation](./reverse-proxy.md) 正确设置它。但是,在所有情况下,Nextcloud 界面都会将您重定向到端口 443。 ### 我可以在域名的子目录中运行 Nextcloud 吗? 不,并且不会添加。请为 Nextcloud 使用专用(子)域,并按照 [reverse proxy documentation](./reverse-proxy.md) 正确设置它。或者,如果您想在线发布它,可以使用 [Tailscale](https://github.com/nextcloud/all-in-one/discussions/6817)。 ### 如何在本地访问 Nextcloud? 请注意,如果您在 Cloudflare Tunnel 后运行 AIO,则无法进行本地访问,因为 TLS 代理在这种情况下被卸载到 Cloudflares 基础设施。您可以通过设置自己的反向代理在本地处理 TLS 代理来修复此问题,这将使以下步骤起作用。 如果您在反向代理后运行 AIO,请确保反向代理配置为在运行它的服务器上使用端口 443。否则,以下步骤将不起作用。 既然这已经解决了,推荐的本地访问 Nextcloud 的方法是设置一个本地 dns-server,如 pi-hole,并为该域设置一个自定义 dns-record,指向运行 Nextcloud AIO 的服务器的内部 ip-adddress。以下是一些指南: - https://www.howtogeek.com/devops/how-to-run-your-own-dns-server-on-your-local-network/ - https://help.nextcloud.com/t/need-help-to-configure-internal-access/156075/6 - https://howchoo.com/pi/pi-hole-setup together with https://web.archive.org/web/20221203223505/https://docs.callitkarma.me/posts/PiHole-Local-DNS/ - https://dockerlabs.collabnix.com/intermediate/networking/Configuring_DNS.html 除此之外,现在还有一个可以添加到 AIO 堆栈的社区容器:https://github.com/nextcloud/all-in-one/tree/main/community-containers/pi-hole ### 如何覆盖某些域名的本地 DNS 解析或向容器添加额外的主机? 对于某些用例,您可能需要覆盖容器内某些域名的本地 DNS 解析。在 Linux 上,您可以通过使用如上所述的本地 DNS 服务器并在 dns 服务器中添加本地 DNS 条目并使您的容器使用该 DNS 服务器来实现。 Linux 上的另一种解决方案,取决于您的网络和 docker 配置,可能也可以通过简单地编辑 `/etc/hosts` 文件来工作。将您的自定义条目(如 `172.18.0.1 mail.example.com`)作为附加行添加到文件中,并重新启动 docker,这应该会自动将条目推送到所有 docker 容器。 ### 如何跳过域名验证? 如果您完全确定您已正确配置所有内容并且无法通过域名验证,则可以通过向 mastercontainer 的 docker run 命令添加 `--env SKIP_DOMAIN_VALIDATION=true` 来跳过域名验证(但在最后一行 `ghcr.io/nextcloud-releases/all-in-one:latest` 之前!如果它已经启动,您将需要停止 mastercontainer,将其删除(不会丢失数据)并使用您最初使用的 docker run 命令重新创建它)。 或者,如果容器已经在运行,请使用参数 `skip_domain_validation` 重新加载 AIO 界面以即时跳过域名验证:例如 `https://ip.address.of.the.server:8080/containers?skip_domain_validation`。 ### 如何解决 Fedora Linux, RHEL OS, CentOS, SUSE Linux 和其他的防火墙问题? 已知使用 [firewalld](https://firewalld.org) 作为其防火墙守护进程的 Linux 发行版存在 docker 网络问题。如果容器无法相互通信,您可以通过运行以下命令将 firewalld 更改为使用 iptables 后端: ``` sudo sed -i 's/FirewallBackend=nftables/FirewallBackend=iptables/g' /etc/firewalld/firewalld.conf sudo systemctl restart firewalld docker ``` 之后它应该可以工作。
有关更多详细信息,请参阅 https://dev.to/ozorest/fedora-32-how-to-solve-docker-internal-network-issue-22me。官方 firewalld 网站上也提到了这个限制:https://firewalld.org/#who-is-using-it ### 如何修复内部或保留 ip-address 错误? 如果您在域名验证期间收到错误,指出您的 ip-address 是内部或保留 ip-address,您可以通过首先确保您的域名的确具有指向服务器的正确公共 ip-address,然后向 mastercontainer 的 docker run 命令添加 `--add-host yourdomain.com:` 来修复此问题(但在最后一行 `ghcr.io/nextcloud-releases/all-in-one:latest` 之前!如果它已经启动,您将需要停止 mastercontainer,将其删除(不会丢失数据)并使用您最初使用的 docker run 命令重新创建它),这将允许域名验证正常工作。您也知道:即使您的域名的 `A` 记录随时间变化,这也没问题,因为 mastercontainer 在初始域名验证后不会尝试访问所选域名。 ### 如何调整 docker 网络的 MTU 大小 您可以通过使用自定义 MTU 预先创建 docker 网络来调整其 MTU 大小: ``` docker network create --driver bridge --opt com.docker.network.driver.mtu=1440 nextcloud-aio ``` 当您在执行 `docker run` 命令后首次打开 AIO 界面时,它将自动连接到具有自定义 MTU 的 `nextcloud-aio` 网络。请记住,如果您之前启动了 mastercontainer 而没有使用额外选项创建网络,则需要删除旧的 `nextcloud-aio` 网络并使用新配置重新创建它。 如果您想使用 docker compose,可以查看 `compose.yaml` 文件中的注释以获取更多详细信息。 ## 基础设施 ### 支持哪些 CPU 架构? 您可以在 Linux 上通过运行以下命令来检查:`uname -m` - x86_64/x64/amd64 - aarch64/arm64/armv8 ### 不推荐的 VPS 提供商 - 使用 Virtuozzo 的 *较旧* Strato VPS 导致了问题,尽管 2023 年第三季度及以后的应该可以工作。 如果您的 VPS 有一个 `/proc/user_beancounters` 文件并且其中设置了较低的 `numproc` 限制 您的服务器可能会在达到此限制时出现异常行为 AIO 非常快地达到此限制,请参阅[此处](https://github.com/nextcloud/all-in-one/discussions/1747#discussioncomment-4716164)。 - Hostingers VPS 似乎缺少 AIO 正确运行所需的特定内核功能。请参阅[此处](https://help.nextcloud.com/t/help-installing-nc-via-aio-on-vps/153956)。 ### 推荐的 VPS 通常推荐的 VPS 是 KVM/非虚拟化的,因为 Docker 在它们上面工作得最好。 ### 关于存储选项的说明 - 不推荐 SD 卡用于 AIO,因为它们会削弱性能,而且它们不适用于数据库和其他部分所需的许多写操作 - 推荐 SSD 存储 - HDD 存储也应该可以工作,但当然比 SSD 存储慢得多 ### 启用 SELinux 时是否有已知问题? 是的。如果启用了 SELinux,您可能需要向 mastercontainer 的 docker run 命令添加 `--security-opt label:disable` 选项,以允许它访问 docker socket(或 compose.yaml 中的 `security_opt: ["label:disable"]`)。请参阅 https://github.com/nextcloud/all-in-one/discussions/485 ## 自定义 ### 如何调整内部使用的 docker api 版本? 如果您运行过时或太新的 docker 版本,您可能会遇到 AIO 内部使用的 docker api 版本的问题。要解决此问题,您可以手动指定 api 版本。您可以通过向 mastercontainer 的 docker run 命令添加 `--env DOCKER_API_VERSION=1.44` 来实现(但在最后一行 `ghcr.io/nextcloud-releases/all-in-one:latest` 之前!如果它已经启动,您将需要停止 mastercontainer,将其删除(不会丢失数据)并使用您最初使用的 docker run 命令重新创建它)。此变量接受基于模式 `[0-9].[0-9]+` 的字符串,例如 `1.44`。⚠️ 但是请注意,Nextcloud AIO 的维护者仅支持和测试默认 api 版本(取消设置此变量)。因此,请自担风险使用此功能,事情可能会在没有警告的情况下中断。 ### 如何更改 Nextcloud Datadir 的默认位置? 您可以将 Nextcloud 容器配置为使用主机上的特定目录作为数据目录。您可以通过向 mastercontainer 的 docker run 命令添加环境变量 `NEXTCLOUD_DATADIR` 来实现(但在最后一行 `ghcr.io/nextcloud-releases/all-in-one:latest` 之前!如果它已经启动,您将需要停止 mastercontainer,将其删除(不会丢失数据)并使用您最初使用的 docker run 命令重新创建它)。该变量的允许值是以 `/` 开头且不等于 `/` 的字符串。然后,所选目录或卷将挂载到容器内的 `/mnt/ncdata`。 - Linux 的一个示例是 `--env NEXTCLOUD_DATADIR="/mnt/ncdata"`。⚠️ 请注意:如果您使用的是挂载到 `/mnt/ncdata` 的外部 BTRFS 驱动器,请确保选择一个子文件夹,例如 `/mnt/ncdata/nextcloud` 作为 datadir,因为在这种情况下根文件夹不适合作为 datadir。请参阅 https://github.com/nextcloud/all-in-one/discussions/2696。 - 在 macOS 上可能是 `--env NEXTCLOUD_DATADIR="/var/nextcloud-data"` - 对于 Synology 可能是 `--env NEXTCLOUD_DATADIR="/volume1/docker/nextcloud/data"`。 - 在 Windows 上可能是 `--env NEXTCLOUD_DATADIR="/run/desktop/mnt/host/c/ncdata"`。(此路径相当于 Windows 主机上的 `C:\ncdata`,因此您需要相应地转换路径。提示:您输入的路径需要以 `/run/desktop/mnt/host/` 开头。在后面附加 Windows 主机上的确切位置,例如 `c/ncdata`,它相当于 `C:\ncdata`。)⚠️ **请注意**:这不适用于 USB 或网络驱动器等外部驱动器,仅适用于 SATA 或 NVME 驱动器等内部驱动器。 - 另一种选择是使用以下命令提供特定的卷名称:`--env NEXTCLOUD_DATADIR="nextcloud_aio_nextcloud_datadir"`。此卷需要由您预先手动创建才能使用它。例如,在 Windows 上使用: docker volume create ^ --driver local ^ --name nextcloud_aio_nextcloud_datadir ^ -o device="/host_mnt/e/your/data/path" ^ -o type="none" ^ -o o="bind" 在此示例中,它将 `E:\your\data\path` 挂载到卷中,因此对于不同的位置,您需要相应地调整 `/host_mnt/e/your/data/path`。 ### 如何配置自定义 UID/GID? 有两种方法可以配置安装内部使用的自定义 UID GID。 第一个也是推荐的解决方案是使用 Nextcloud 的外部存储应用并使用其功能将连接添加到 Nextcloud。请参阅 https://docs.nextcloud.com/server/latest/admin_manual/configuration_files/external_storage_configuration_gui.html 如果您确实需要使用主机挂载的另一个解决方案是使用绑定挂载将自定义权限映射到目录。您可以通过编辑 Linux 服务器上的 `/etc/fstab` 文件并向文件添加如下条目来实现: ``` /source/path /target/path/where/the/source/directory/will/be/mounted/on/the/server fuse.bindfs force-user=33,force-group=33,allow_other 0 0 ``` 然后使用 `sudo mount /target/path/where/the/source/directory/will/be/mounted/on/the/server` 直接挂载它。 之后,您可以按照上一节中的描述使用 `--env NEXTCLOUD_DATADIR="/target/path/where/the/source/directory/will/be/mounted/on/the/server"`。 ### 如何将 appdata 文件夹从 datadir 移动到 ssd 以提高性能? 如果您的设置中的 datadir 配置为放置在 HDD 或网络 FS(如 SMB 或 NFS)上,您可以按照以下步骤更改 appdata 文件夹的位置,使其位于 SSD 上,以提高设置的性能。 初始安装完成并且所有 Nextcloud datadir 文件都存储在配置的 `/target/path` 目录中后,您还会在其中看到一个存储应用相关数据的 `appdata_*` 文件夹。如果目标目录尚未位于 SSD 上,您现在可以将该文件夹移动到更快的 SSD,首先使用 `rsync` 将文件同步到 SSD 上的位置。然后将 datadir 中的 appdata 文件夹重命名为类似 `appdata_*-backup` 的名称。然后将以下行添加到 `/etc/fstab`: ``` /source/path/on/ssd /target/path/ fuse.bindfs force-user=33,force-group=33,allow_other 0 0 ``` 不要忘记将 `` 调整为您的安装最初自动创建的正确 `appdata_*` 名称。 然后使用 `sudo mount /target/path/` 直接挂载它。 之后事情应该会加快。 ### 如何将文件/安装存储在单独的驱动器上? 您可以通过首先在主机 OS 中挂载驱动器(不支持 NTFS,推荐 ext4 作为 FS)然后按照本教程操作,将整个 docker 库及其所有文件(包括所有 Nextcloud AIO 文件和文件夹)移动到单独的驱动器:https://www.guguweb.com/2019/02/07/how-to-move-docker-data-directory-to-another-location-on-ubuntu/
(当然,首先需要安装 docker 才能使其工作。) ⚠️ 如果您在 Nextcloud 日志中遇到来自 richdocuments 的错误,请检查您的 Collabora 容器中是否出现消息 "Capabilities are not set for the coolforkit program."。如果是这样,请按照以下步骤操作: 1. 从 AIO Interface 停止所有容器。 2. 转到您的终端并删除 Collabora 容器(`docker rm nextcloud-aio-collabora`)和 Collabora 镜像(`docker image rm nextcloud/aio-collabora`)。 3. 您可能还想清理您的 Docker(`docker system prune -a`)(不会丢失数据)。 4. 从 AIO Interface 重启您的容器。 这应该可以解决问题。 ### 如何限制 AIO 的资源使用? 在某些情况下,您可能希望限制 AIO 的整体资源使用。您可以按照[此文档](https://github.com/nextcloud/all-in-one/discussions/7273)进行操作。另一种可能性是使用[手动安装](./manual-install/)。 ### 如何允许 Nextcloud 容器访问主机上的目录? 默认情况下,Nextcloud 容器是受限的,无法访问主机 OS 上的目录。如果您计划在 Nextcloud 中使用本地外部存储将某些文件存储在数据目录之外,您可能希望更改此设置,可以通过向 mastercontainer 的 docker run 命令添加环境变量 `NEXTCLOUD_MOUNT` 来实现(但在最后一行 `ghcr.io/nextcloud-releases/all-in-one:latest` 之前!如果它已经启动,您将需要停止 mastercontainer,将其删除(不会丢失数据)并使用您最初使用的 docker run 命令重新创建它)。该变量的允许值是以 `/` 开头且不等于 `/` 的字符串。 - Linux 的两个示例是 `--env NEXTCLOUD_MOUNT="/mnt/"` 和 `--env NEXTCLOUD_MOUNT="/media/"`。 - 在 macOS 上可能是 `--env NEXTCLOUD_MOUNT="/Volumes/your_drive/"` - 对于 Synology 可能是 `--env NEXTCLOUD_MOUNT="/volume1/"`。 - 在 Windows 上可能是 `--env NEXTCLOUD_MOUNT="/run/desktop/mnt/host/d/your-folder/"`。(此路径相当于 Windows 主机上的 `D:\your-folder`,因此您需要相应地转换路径。提示:您输入的路径需要以 `/run/desktop/mnt/host/` 开头。在后面附加 Windows 主机上的确切位置,例如 `d/your-folder/`,它相当于 `D:\your-folder`。)⚠️ **请注意**:这不适用于 USB 或网络驱动器等外部驱动器,仅适用于 SATA 或 NVME 驱动器等内部驱动器。 使用此选项后,请确保对要在 Nextcloud 中使用的目录应用正确的权限。例如,当您使用 `--env NEXTCLOUD_MOUNT="/mnt/"` 时,`sudo chown -R 33:0 /mnt/your-drive-mountpoint` 和 `sudo chmod -R 750 /mnt/your-drive-mountpoint` 应该使其在 Linux 上工作。在 Windows 上,您可以例如使用 `docker exec -it nextcloud-aio-nextcloud chown -R 33:0 /run/desktop/mnt/host/d/your-folder/` 和 `docker exec -it nextcloud-aio-nextcloud chmod -R 750 /run/desktop/mnt/host/d/your-folder/`。 然后,您可以导航到 `https://your-nc-domain.com/settings/apps/disabled`,激活外部存储应用,导航到 `https://your-nc-domain.com/settings/admin/externalstorages` 并添加一个本地外部存储目录,该目录将在容器内的相同位置可以访问,即您输入的位置。例如,`/mnt/your-drive-mountpoint` 将挂载到容器内的 `/mnt/your-drive-mountpoint`,等等。 但请注意,这些位置不会被内置备份解决方案覆盖——但您可以在初始备份完成后添加要备份的其他 Docker 卷和主机路径。 ### 如何调整 Talk 端口? 默认情况下,talk 容器将使用端口 `3478/UDP` 和 `3478/TCP` 进行连接。这应该设置为高于 1024 的值!您可以通过向 mastercontainer 的 docker run 命令添加例如 `--env TALK_PORT=3478` 来调整端口(但在最后一行 `ghcr.io/nextcloud-releases/all-in-one:latest` 之前!如果它已经启动,您将需要停止 mastercontainer,将其删除(不会丢失数据)并使用您最初使用的 docker run 命令重新创建它)并将端口调整为所需的值。最好使用 1024 以上的端口,例如 3479,以免遇到这个问题:https://github.com/nextcloud/all-in-one/discussions/2517 ### 如何调整 Nextcloud 的上传限制? 默认情况下,Nextcloud 的公共上传限制为最大 16G(登录用户可以使用 Web 界面或移动/桌面客户端上传更大的文件,因为在这种情况下使用了分块)。您可以通过向 mastercontainer 的 docker run 命令提供 `--env NEXTCLOUD_UPLOAD_LIMIT=16G` 来调整上传限制(但在最后一行 `ghcr.io/nextcloud-releases/all-in-one:latest` 之前!如果它已经启动,您将需要停止 mastercontainer,将其删除(不会丢失数据)并使用您最初使用的 docker run 命令重新创建它)并将值自定义为适合您的值。它必须以数字开头并以 `G` 结尾,例如 `16G`。 ### 如何调整 Nextcloud 的最大执行时间? 默认情况下,Nextcloud 的上传限制为最大 3600 秒。您可以通过向 mastercontainer 的 docker run 命令提供 `--env NEXTCLOUD_MAX_TIME=3600` 来调整上传时间限制(但在最后一行 `ghcr.io/nextcloud-releases/all-in-one:latest` 之前!如果它已经启动,您将需要停止 mastercontainer,将其删除(不会丢失数据)并使用您最初使用的 docker run 命令重新创建它)并将值自定义为适合您的值。它必须是一个数字,例如 `3600`。 ### 如何调整 Nextcloud 的 PHP 内存限制? 默认情况下,Nextcloud 容器中的每个 PHP 进程限制为最大 512 MB。您可以通过向 mastercontainer 的 docker run 命令提供 `--env NEXTCLOUD_MEMORY_LIMIT=512M` 来调整内存限制(但在最后一行 `ghcr.io/nextcloud-releases/all-in-one:latest` 之前!如果它已经启动,您将需要停止 mastercontainer,将其删除(不会丢失数据)并使用您最初使用的 docker run 命令重新创建它)并将值自定义为适合您的值。它必须以数字开头并以 `M` 结尾,例如 `1024M`。 ### 如何更改首次启动时安装的 Nextcloud 应用? 您可能希望调整 Nextcloud 容器首次启动时安装的 Nextcloud 应用。您可以通过向 mastercontainer 的 docker run 命令添加 `--env NEXTCLOUD_STARTUP_APPS="deck twofactor_totp tasks calendar contacts notes"` 来实现(但在最后一行 `ghcr.io/nextcloud-releases/all-in-one:latest` 之前!如果它已经启动,您将需要停止 mastercontainer,将其删除(不会丢失数据)并使用您最初使用的 docker run 命令重新创建它)并将值自定义为适合您的值。它必须是包含小写字母 a-z、0-9、空格和连字符或 '_' 的字符串。您可以通过在 appid 前面添加连字符来禁用默认启用的已发布应用。例如,`-contactsinteraction`。 ### 如何向 Nextcloud 容器永久添加 OS 软件包? 某些 Nextcloud 应用需要额外的外部依赖项,这些依赖项必须在 Nextcloud 容器中捆绑才能正常工作。由于我们无法将所有应用程序的每个依赖项都放入容器中——因为这会使项目很快变得难以维护——有一种官方的方法可以将额外的依赖项添加到 Nextcloud 容器中。但是请注意,不建议这样做,因为我们不测试需要外部依赖项的 Nextcloud 应用。 您可以通过向 mastercontainer 的 docker run 命令添加 `--env NEXTCLOUD_ADDITIONAL_APKS="imagemagick dependency2 dependency3"` 来实现(但在最后一行 `ghcr.io/nextcloud-releases/all-in-one:latest` 之前!如果它已经启动,您将需要停止 mastercontainer,将其删除(不会丢失数据)并使用您最初使用的 docker run 命令重新创建它)并将值自定义为适合您的值。它必须是包含小写字母 a-z、数字 0-9、空格、点和连字符或 '_' 的字符串。您可以在此处找到可用的软件包:https://pkgs.alpinelinux.org/packages?branch=v3.23。默认情况下添加了 `imagemagick`。如果您想保留它,也需要指定它。 ### 如何向 Nextcloud 容器永久添加 PHP 扩展? 某些 Nextcloud 应用需要额外的 php 扩展,这些扩展必须在 Nextcloud 容器中捆绑才能正常工作。由于我们无法将所有应用程序的每个依赖项都放入容器中——因为这会使项目很快变得难以维护——有一种官方的方法可以将额外的 php 扩展添加到 Nextcloud 容器中。但是请注意,不建议这样做,因为我们不测试需要额外 php 扩展的 Nextcloud 应用。 您可以通过向 mastercontainer 的 docker run 命令添加 `--env NEXTCLOUD_ADDITIONAL_PHP_EXTENSIONS="imagick extension1 extension2"` 来实现(但在最后一行 `ghcr.io/nextcloud-releases/all-in-one:latest` 之前!如果它已经启动,您将需要停止 mastercontainer,将其删除(不会丢失数据)并使用您最初使用的 docker run 命令重新创建它)并将值自定义为适合您的值。它必须是包含小写字母 a-z、数字 0-9、空格、点和连字符或 '_' 的字符串。您可以在此处找到可用的扩展:https://pecl.php.net/packages.php。默认情况下添加了 `imagick`。如果您想保留它,也需要指定它。 ### facerecognition 应用的 pdlib PHP 扩展怎么样? [facerecognition app](https://apps.nextcloud.com/apps/facerecognition) 需要安装 pdlib PHP 扩展。不幸的是,它在 PECL 上或通过 PHP 核心都不可用,因此目前无法将其添加到 AIO 中。但是,您可以使用 [this community container](https://github.com/nextcloud/all-in-one/tree/main/community-containers/facerecognition) 来运行 facerecognition。 ### 如何为 Nextcloud 启用硬件加速? 某些容器可以使用 GPU 加速来提高性能,例如 [memories app](https://apps.nextcloud.com/apps/memories) 允许为视频启用硬件转码。 #### 使用 AMD, Intel 的开源驱动 MESA 和 Nvidia 的 **新** 驱动 `Nouveau` 可以在 [MESA 3D documentation](https://docs.mesa3d.org/systems.html) 中找到支持的设备列表。 此方法使用 [Direct Rendering Infrastructure](https://dri.freedesktop.org/wiki/) 并访问 `/dev/dri` 设备。 为了使用它,您需要向 mastercontainer 的 docker run 命令添加 `--env NEXTCLOUD_ENABLE_DRI_DEVICE=true`(但在最后一行 `ghcr.io/nextcloud-releases/all-in-one:latest` 之前!如果它已经启动,您将需要停止 mastercontainer,将其删除(不会丢失数据)并使用您最初使用的 docker run 命令重新创建它),这会将 `/dev/dri`备挂载到容器中。 #### 使用 Nvidia 的专有驱动 :warning: BETA 此方法使用 [Nvidia Container Toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/index.html) 和 nvidia runtime。 为了使用它,您需要向 mastercontainer 的 docker run 命令添加 `--env NEXTCLOUD_ENABLE_NVIDIA_GPU=true`(但在最后一行 `ghcr.io/nextcloud-releases/all-in-one:latest` 之前!如果它已经启动,您将需要停止 mastercontainer,将其删除(不会丢失数据)并使用您最初使用的 docker run 命令重新创建它),这将启用 nvidia runtime。 如果您使用的是 WSL2 并想使用 NVIDIA runtime,请按照说明[在 WSL 中安装 NVIDIA Container Toolkit meta-version](https://docs.nvidia.com/cuda/wsl-user-guide/index.html#cuda-support-for-wsl-2)。 ### 如何保留已禁用的应用? 在某些情况下,您可能希望保留在 AIO 界面中禁用的 Nextcloud 应用,如果它们已安装在 Nextcloud 中,则不要卸载它们。您可以通过向 mastercontainer 的 docker run 命令添加 `--env NEXTCLOUD_KEEP_DISABLED_APPS=true` 来实现(但在最后一行 `ghcr.io/nextcloud-releases/all-in-one:latest` 之前!如果它已经启动,您将需要停止 mastercontainer,将其删除(不会丢失数据)并使用您最初使用的 docker run 命令重新创建它)。 ### 如何信任用户定义的证书颁发机构 (CA)? 对于某些应用程序,可能需要与另一个主机/服务器建立安全连接,该主机/服务器使用的证书由开箱即用不受信任的证书颁发机构颁发。一个示例可能是针对组织的域控制器(基于 Active Directory 或 Samba)配置 LDAPS。 您可以通过向 mastercontainer 的 docker run 命令提供环境变量 `NEXTCLOUD_TRUSTED_CACERTS_DIR` 来使 Nextcloud 容器信任任何证书颁发机构(但在最后一行 `ghcr.io/nextcloud-releases/all-in-one:latest` 之前!如果它已经启动,您将需要停止 mastercontainer,将其删除(不会丢失数据)并使用您最初使用的 docker run 命令重新创建它)。变量的值应设置为主机上目录的绝对路径,其中包含一个或多个证书颁发机构证书。您应该使用 Base64 编码的 X.509 证书。(其他格式可能有效,但尚未测试!)目录中的所有证书都将被信任。 使用 `docker run` 时,可以使用 `--env NEXTCLOUD_TRUSTED_CACERTS_DIR=/path/to/my/cacerts` 设置环境变量。 为了使值有效,路径应以 `/` 开头且不以 `/` 结尾,并指向现有的 **目录**。将变量直接指向证书 **文件** 将不起作用,也可能会破坏某些东西。 ### 如何禁用 Collabora 的 Seccomp 功能? Collabora 容器默认启用 Seccomp,这是 Linux 内核的一项安全功能。在未启用此内核功能的系统上,您需要向初始 docker run 命令提供 `--env COLLABORA_SECCOMP_DISABLED=true` 才能使其工作。如果它已经启动,您将需要停止 mastercontainer,将其删除(不会丢失数据)并使用您最初使用的 docker run 命令重新创建它。 ### 如何调整 Fulltextsearch Java 选项? Fulltextsearch Java 选项默认设置为 `-Xms512M -Xmx512M`,这在某些系统上可能不够。您可以通过向初始 docker run 命令添加例如 `--env FULLTEXTSEARCH_JAVA_OPTIONS="-Xms1024M -Xmx1024M"` 来调整它。如果它已经启动,您将需要停止 mastercontainer,将其删除(不会丢失数据)并使用您最初使用的 docker run 命令重新创建它。 ## 指南 ### 如何在 macOS 上运行 AIO? 通常,在 macOS 上,与 Linux 相比,docker run 命令只有一点不同:您需要使用 `--volume /var/run/docker.sock.raw:/var/run/docker.sock:ro` 而不是使用 `--volume /var/run/docker.sock:/var/run/docker.sock:ro` 来在安装 [Docker Desktop](https://www.docker.com/products/docker-desktop/) 后运行它(如果需要,不要忘记 [enable ipv6](https://github.com/nextcloud/all-in-one/blob/main/docker-ipv6-support.md))。除此之外,它应该像在 Linux 上一样工作和运行。 此外,您可能有兴趣调整 Nextcloud 的 Datadir 以将文件存储在主机系统上。有关如何执行此操作,请参阅[此文档](https://github.com/nextcloud/all-in-one#how-to-change-the-default-location-of-nextclouds-datadir)。 ### 如何在 Windows 上运行 AIO? 在 Windows 上,安装 [Docker Desktop](https://www.docker.com/products/docker-desktop/)(如果需要,不要忘记 [enable ipv6](https://github.com/nextcloud/all-in-one/blob/main/docker-ipv6-support.md)) 并在命令提示符中运行以下命令: ``` docker run ^ --init ^ --sig-proxy=false ^ --name nextcloud-aio-mastercontainer ^ --restart always ^ --publish 80:80 ^ --publish 8080:8080 ^ --publish 8443:8443 ^ --volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config ^ --volume //var/run/docker.sock:/var/run/docker.sock:ro ^ ghcr.io/nextcloud-releases/all-in-one:latest ``` 此外,您可能有兴趣调整 Nextcloud 的 Datadir 以将文件存储在主机系统上。有关如何执行此操作,请参阅[此文档](https://github.com/nextcloud/all-in-one#how-to-change-the-default-location-of-nextclouds-datadir)。 ### 如何在 Unraid 上运行 AIO? 通常在 Unraid 上,在安装 Nextcloud AIO 之前,您应该确保为所有 docker 相关文件指定一个目录,而不是在继续安装过程之前使用默认的 docker 映像。有关更多详细信息,请参阅此指南:https://forums.unraid.net/topic/103924-how-to-turn-my-docker-file-to-a-docker-folder/#comment-962317 此外,您可能需要创建一个自定义用户脚本,以便在服务器重新启动时自动启动 AIO 的所有同级容器(因为 Unraid 中的 docker 插件不遵守为所有 AIO 容器配置的正常 docker 重启策略)。请参阅用户脚本文档:https://docs.unraid.net/unraid-os/using-unraid-to/run-docker-containers/managing-and-customizing-containers/#user-scripts-plugin。您需要使用如下脚本并使用计划选项 `@reboot` 自动启动容器。 ``` #!/bin/bash # 等待 120 秒以便其他服务器组件正确启动 sleep 120 # 执行实际命令 docker exec --env START_CONTAINERS=1 nextcloud-aio-mastercontainer /daily-backup.sh ``` 除此之外,AIO 的安装应该像在 "普通" Linux 上一样工作。因此,请参阅 Linux 说明进行安装。 ### 如何在 Synology DSM 上运行 AIO 在 Synology 上,与 Linux 相比有两点不同:您需要使用 `--volume /volume1/docker/docker.sock:/var/run/docker.sock:ro` 而不是使用 `--volume /var/run/docker.sock:/var/run/docker.sock:ro` 来运行它。您还需要向 mastercontainer 的 docker run 命令添加 `--env WATCHTOWER_DOCKER_SOCKET_PATH="/volume1/docker/docker.sock"`(但在最后一行 `ghcr.io/nextcloud-releases/all-in-one:latest` 之前)。此外,您可能需要调整内部使用的 api 版本。请参阅[此文档](#how-to-adjust-the-internally-used-docker-api-version)。除此之外,它应该像在 Linux 上一样工作和运行。显然,Synology Docker GUI 将无法与此一起使用,因此您需要使用 SSH 或在任务计划程序中创建用户定义的脚本任务作为用户 'root' 才能运行该命令。 此外,您可能有兴趣调整 Nextcloud 的 Datadir 以将文件存储在主机系统上。有关如何执行此操作,请参阅[此文档](https://github.com/nextcloud/all-in-one#how-to-change-the-default-location-of-nextclouds-datadir)。 您还需要调整 Synology 的防火墙,见下文:
点击此处展开 Synology DSM 的开放端口和登录界面容易受到攻击,这就是为什么始终建议进行防火墙设置的原因。如果激活了防火墙,则必须为端口 80、443、包含 Nextcloud 容器的 docker 网桥的子网、您的公共静态 IP(如果您不使用 DDNS)以及(如果适用)您的 NC-Talk 端口 3478 TCP+UDP 设置例外: ![Screenshot 2023-01-19 at 14 13 48](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/f1d668275a221811.png) 如果您将 NAS 设置在本地网络上(最常见的情况),您将需要设置 Synology DNS 以便能够通过其域名从您的网络访问 Nextcloud。另外不要忘记将新的 DNS 添加到您的 DHCP 服务器和固定 IP 设置中: ![Screenshot 2023-01-20 at 12 13 44](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/f5abc1132d221812.png)
### 如何使用 Portainer 运行 AIO? 在 Linux 上使用 Portainer 运行它的最简单方法是使用 Portainer 的 stacks 功能并使用 [this docker-compose file](./compose.yaml) 来正确启动 AIO。 ### 我可以在 TrueNAS SCALE 上运行 AIO 吗? 随着 Truenas Scale 版本 24.10.0(于 2024 年 10 月 29 日作为稳定版本正式发布)的推出,IX Systems 放弃了 Kubernetes 集成并实施了完全可用的 docker 环境。 有关更完整的指南,请参阅 @zybster 的此指南:https://github.com/nextcloud/all-in-one/discussions/5506 在带有 Kubernetes 环境的旧版 TrueNAS SCALE 上,有两种运行 AIO 的方法。首选方法是在 VM 内运行 AIO。这是必要的,因为它们不向主机上的容器公开 docker socket,因此您也无法在其上使用 docker-compose,而且也无法运行未明确为 TrueNAS SCALE 编写的自定义 helm-charts。 另一种未经测试的方法是从此处 https://truecharts.org/charts/stable/portainer/installation-notes 在您的 TrueNAS SCALE 上安装 Portainer,并通过遵循 https://docs.portainer.io/user/kubernetes/helm 将 Helm-chart 仓库 https://nextcloud.github.io/all-in-one/ 添加到 Portainer。有关 AIO Helm Chart 的更多文档可在此处获得:https://github.com/nextcloud/all-in-one/tree/main/nextcloud-aio-helm-chart#nextcloud-aio-helm-chart。 ### 如何运行 `occ` 命令? 只需运行以下命令:`sudo docker exec --user www-data -it nextcloud-aio-nextcloud php occ your-command`。当然,`your-command` 需要替换为您要运行的命令。**请注意:** 如果您没有对服务器的 CLI 访问权限,您现在可以使用此社区容器通过 Web 会话运行 docker 命令:https://github.com/nextcloud/all-in-one/tree/main/community-containers/container-management ### 如何解决 `初始安装后安全与设置警告显示 "missing default phone region"`? 只需运行以下命令:`sudo docker exec --user www-data nextcloud-aio-nextcloud php occ config:system:set default_phone_region --value="yourvalue"`。当然,您需要根据您的位置修改 `yourvalue`。示例包括 `DE`、`US` 和 `GB`。有关更多代码,请参阅此列表:https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements **请注意:** 如果您没有对服务器的 CLI 访问权限,您现在可以使用此社区容器通过 Web 会话运行 docker 命令:https://github.com/nextcloud/all-in-one/tree/main/community-containers/container-management ### 如何在一台服务器上运行多个 AIO 实例? 有关此的一些文档,请参阅 [multiple-instances.md](./multiple-instances.md)。 ### 暴力破解保护 FAQ Nextcloud 具有内置的暴力破解保护功能,可能会被触发并阻止 ip-address 或禁用用户。您可以通过运行 `sudo docker exec --user www-data -it nextcloud-aio-nextcloud php occ security:bruteforce:reset ` 来解除对 ip-address 的阻止,并通过运行 `sudo docker exec --user www-data -it nextcloud-aio-nextcloud php occ user:enable ` 来启用被禁用的用户。有关更多信息,请参阅 https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/occ_command.html#security。**请注意:** 如果您没有对服务器的 CLI 访问权限,您现在可以使用此社区容器通过 Web 会话运行 docker 命令:https://github.com/nextcloud/all-in-one/tree/main/community-containers/container-management ### 如何切换通道? 您可以切换到不同的通道,例如 beta 通道,或者从 beta 通道切换回 latest 通道,方法是停止 mastercontainer,将其删除(不会丢失数据)并使用您最初用于创建 mastercontainer 的相同命令重新创建容器。您只需将最后一行 `ghcr.io/nextcloud-releases/all-in-one:latest` 更改为 `ghcr.io/nextcloud-releases/all-in-one:beta`,反之亦然。⚠️ 在极少数情况下,您可能需要先运行 `docker pull ghcr.io/nextcloud-releases/all-in-one:latest` 或 `docker pull ghcr.io/nextcloud-releases/all-in-one:beta` 才能使用该镜像。 ### 如何更新容器? 如果我们将新容器推送到 `latest`,您将在 AIO 界面中的 `containers` 部分下方看到发现了新的容器更新。在这种情况下,只需按 `Stop containers` 和 `Start and update containers` 即可更新容器。但是,mastercontainer 有自己的更新程序。见下文。并且不要忘记在再次启动容器之前使用内置备份解决方案备份实例的当前状态!否则,如果更新期间出现问题,您将无法轻松恢复实例。 如果发现新的 `mastercontainer` 更新,您将在 `Stop containers` 按钮下方看到一个允许显示更新日志的注释。如果您单击该按钮并且容器已停止,您将看到一个允许更新 mastercontainer 的新按钮。这样做并且更新完成后,您将再次拥有Start and update containers` 的选项。建议在单击 `Start and update containers` 按钮之前创建备份。 此外,还有一个每天运行一次的 cronjob,用于检查容器和 mastercontainer 更新,如果发现新更新,则会向所有 Nextcloud 管理员发送通知。 ### 如何轻松登录 AIO 界面? 如果您的 Nextcloud 正在运行并且您以管理员身份登录到您的 Nextcloud,您可以通过打开 `https://yourdomain.tld/settings/admin/overview` 轻松登录到 AIO 界面,该页面将在顶部显示一个按钮,使您只需单击此按钮即可登录到 AIO 界面。 ### 如何更改域名? 如果您设置一个新的 AIO 实例,您需要输入一个域名。目前无法从 AIO 界面更改此域名。因此,要更改它,您需要使用 `sudo docker run -it --rm --volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config:rw alpine sh -c "apk add --no-cache nano && nano /mnt/docker-aio-config/data/configuration.json"` 手动编辑 configuration.json,将旧域名的每次出现替换为新域名并保存并写出文件。之后从 AIO 界面重新启动容器,如果新域名配置正确,一切都应该按预期工作。
如果您在 Web 服务器或反向代理(如 Apache、Nginx、Caddy、Cloudflare Tunnel 等)后运行 AIO,您显然还需要在反向代理配置中更改域名。 此外,重新启动容器后,您需要打开管理设置并手动更新一些无法自动更改的值。以下是一些已知位置的列表: - `https://your-nc-domain.com/settings/admin/talk` 用于 Turn/Stun server 和 Signaling Server(如果您通过 AIO 界面启用了 Talk) - `https://your-nc-domain.com/settings/admin/theming` 用于主题 URL - `https://your-nc-domain.com/settings/admin/app_api` 用于 deploy daemon(如果您通过 AIO 界面启用了 App API) ### 如何正确重置实例? 如果在初始安装过程中遇到了意外情况,您可能希望重置 AIO 安装以便从头开始。 以下是如何正确重置 AIO 实例的步骤: 1. 如果所有容器都是从 AIO 界面运行的,请停止它们 2. 使用 `sudo docker stop nextcloud-aio-mastercontainer` 停止 mastercontainer 3. 如果 domaincheck 容器仍在运行,请使用 `sudo docker stop nextcloud-aio-domaincheck` 停止它 4. 通过运行 `sudo docker ps --format {{.Names}}` 检查是否还有 AIO 容器在运行。如果没有列出 `nextcloud-aio` 容器,您可以继续执行以下步骤。如果还有一些,您需要使用 `sudo docker stop ` 停止它们,直到不再列出任何容器为止。 5. 检查哪些容器已停止:`sudo docker ps --filter "status=exited"` 6. 现在使用 `sudo docker container prune` 删除所有这些已停止的容器 7. 使用 `sudo docker network rm nextcloud-aio` 删除 docker 网络 8. 使用 `sudo docker volume ls --filter "dangling=true"` 检查哪些卷处于悬空状态 9. 现在删除所有这些悬空卷:`sudo docker volume prune --filter all=1`(在 Windows 上,您可能需要随后使用 `docker volume rm nextcloud_aio_backupdir`、`docker volume rm nextcloud_aio_nextcloud_datadir` 手动删除一些卷)。 10. 如果您已将 `NEXTCLOUD_DATADIR` 配置为主机上的路径而不是默认卷,则也需要对其进行清理。(例如,通过直接删除该目录)。 11. 使用 `sudo docker volume ls --format {{.Name}}` 确保没有剩余的卷。如果没有列出 `nextcloud-aio` 卷,您可以继续执行以下步骤。如果还有一些,您需要使用 `sudo docker volume rm ` 删除它们,直到不再列出任何卷为止。 12. 可选:您可以使用 `sudo docker image prune -a` 删除所有 docker 镜像。 13. 大功告成!现在可以随意使用推荐的 docker run 命令重新开始了! ### 我可以将 CIFS/SMB 共享用作 Nextcloud 的 datadir 吗? 当然可以。将以下内容添加到主机系统的 `/etc/fstab` 文件中:
` cifs rw,mfsymlinks,seal,credentials=,uid=33,gid=0,file_mode=0770,dir_mode=0770 0 0`
(当然,您需要根据您的具体情况修改 ``、`` 和 ``。) 一个示例可能如下所示:
`//your-storage-host/subpath /mnt/storagebox cifs rw,mfsymlinks,seal,credentials=/etc/storage-credentials,uid=33,gid=0,file_mode=0770,dir_mode=0770 0 0`
并将以下内容添加到 `/etc/storage-credentials` 中: ``` username= password= ``` (当然,您需要根据您的具体情况修改 `` 和 ``。) 现在您可以按照[此处](#how-to-change-the-default-location-of-nextclouds-datadir)章节中的描述,使用 `/mnt/storagebox` 作为 Nextcloud 的 datadir。 ### 我可以使用 Docker swarm 运行它吗? 可以。为此,您需要使用并遵循[手动安装文档](./manual-install/)。 ### 我可以使用 Kubernetes 运行它吗? 可以。为此,您需要使用并遵循 [helm-chart 文档](./nextcloud-aio-helm-chart/)。 ### 如何使用 Docker rootless 运行它? 您也可以使用 Docker rootless 运行 AIO。操作方法记录在此处:[docker-rootless.md](https://github.com/nextcloud/all-in-one/blob/main/docker-rootless.md) ### 我可以使用 Podman 代替 Docker 来运行它吗? 由于 Podman 与 Docker API 不是 100% 兼容,因此不支持 Podman(因为这会增加维护人员需要测试的另一个平台)。但是,您可以使用并遵循[手动安装文档](./manual-install/) 来让 AIO 的容器在 Podman 下运行,或者使用上一节中描述的 Docker rootless。此外,现在还有这个讨论:https://github.com/nextcloud/all-in-one/discussions/3487 ### 手动访问/编辑 Nextcloud 文件/文件夹 默认情况下,您添加到 Nextcloud 的文件和文件夹存储在以下 docker 目录中:`nextcloud_aio_nextcloud:/mnt/ncdata/`(在 Linux 主机系统上通常为 `/var/lib/docker/volumes/nextcloud_aio_nextcloud_data/_data/`)。如有需要,您可以在那里修改/添加/删除文件/文件夹,但**注意**:这样做时要非常小心,因为您可能会损坏您的 AIO 安装!最好的办法是在编辑/更改其中的文件/文件夹之前,使用内置的备份解决方案创建备份,因为这样您就能将实例恢复到备份时的状态。 完成修改/添加/删除文件/文件夹后,不要忘记通过运行以下命令应用正确的权限:`sudo docker exec nextcloud-aio-nextcloud chown -R 33:0 /mnt/ncdata/` 和 `sudo docker exec nextcloud-aio-nextcloud chmod -R 750 /mnt/ncdata/`,并使用 `sudo docker exec --user www-data -it nextcloud-aio-nextcloud php occ files:scan --all` 重新扫描文件。**请注意:** 如果您没有服务器的 CLI 访问权限,您现在可以使用此社区容器通过 Web 会话运行 docker 命令:https://github.com/nextcloud/all-in-one/tree/main/community-containers/container-management ### 如何使用文本编辑器编辑 Nextclouds 的 config.php 文件? 您可以直接从主机使用您喜欢的文本编辑器编辑 Nextcloud 的 config.php 文件。例如像这样:`sudo docker run -it --rm --volume nextcloud_aio_nextcloud:/var/www/html:rw alpine sh -c "apk add --no-cache nano && nano /var/www/html/config/config.php"`。但是请确保不要破坏该文件,否则可能会损坏您的 Nextcloud 实例。最好的情况是,在编辑文件之前使用内置的备份解决方案创建备份。**请注意:** 如果您没有服务器的 CLI 访问权限,您现在可以使用此社区容器通过 Web 会话运行 docker 命令:https://github.com/nextcloud/all-in-one/tree/main/community-containers/container-management ### 如何通过创建自定义骨架目录来更改默认文件? 所有用户都会看到一组由 Nextcloud 配置决定的[默认文件和文件夹](https://docs.nextcloud.com/server/latest/admin_manual/configuration_files/default_files_configuration.html)。要更改这些默认文件和文件夹,必须首先创建一个自定义骨架目录;这可以通过复制您的骨架文件 `sudo docker cp --follow-link /path/to/nextcloud/skeleton/ nextcloud-aio-nextcloud:/mnt/ncdata/skeleton/`,使用 `sudo docker exec nextcloud-aio-nextcloud chown -R 33:0 /mnt/ncdata/skeleton/` 和 `sudo docker exec nextcloud-aio-nextcloud chmod -R 750 /mnt/ncdata/skeleton/` 应用正确的权限,并使用 `sudo docker exec --user www-data -it nextcloud-aio-nextcloud php occ config:system:set skeletondirectory --value="/mnt/ncdata/skeleton"` 设置骨架目录选项来完成。更多信息请参阅 Nextcloud 文档中关于[骨架目录的配置参数](https://docs.nextcloud.com/server/stable/admin_manual/configuration_server/config_sample_php_parameters.html#skeletondirectory)。 ### 如何调整版本保留策略和回收站保留策略? 默认情况下,AIO 将 `versions_retention_obligation` 和 `trashbin_retention_obligation` 都设置为 `auto, 30`,这意味着版本和回收站中的项目将在 30 天后被删除。如果您想更改此设置,请参阅 https://docs.nextcloud.com/server/latest/admin_manual/configuration_files/file_versioning.html。 ### 如何启用自动更新而不事先创建备份? 如果您有外部备份解决方案,可能希望启用自动更新而不先创建备份。但请注意,不建议这样做,因为您将无法再轻松地从 AIO 界面创建和恢复备份,并且您需要确保在创建备份之前正确关闭所有容器,例如先从 AIO 界面停止它们。 但无论如何,这里有一个帮助您自动化整个过程的指南:
点击此处展开 ``` #!/bin/bash # 停止容器 docker exec --env STOP_CONTAINERS=1 nextcloud-aio-mastercontainer /daily-backup.sh # 如果在运行后将关闭的 VM 中运行 AIO,以下内容是可选的 # poweroff ```
您可以简单地将脚本复制并粘贴到一个文件中,例如命名为 `shutdown-script.sh`,例如在这里:`/root/shutdown-script.sh`。 然后使用 `sudo chown root:root /root/shutdown-script.sh` 和 `sudo chmod 700 /root/shutdown-script.sh` 应用正确的权限。然后您可以创建一个按计划运行它的 cronjob,例如每天 `04:00` 运行脚本,如下所示: 1. 使用 `sudo crontab -u root -e` 打开 cronjob(如果尚未完成,请选择您选择的编辑器。我推荐 nano)。 2. 如果不存在,请将以下新行添加到 crontab 中:`0 4 * * * /root/shutdown-script.sh`,这将每天 04:00 运行脚本。 3. 保存并关闭 crontab(使用 nano 时,快捷键是 `Ctrl + o`,然后按 `Enter` 保存,并使用 `Ctrl + x` 关闭编辑器)。 **设置好之后,您应该安排备份解决方案在 AIO 正确关闭后创建备份。提示:如果您的备份在同一主机上运行,请确保至少备份所有 docker 卷,以及 Nextcloud 的 datadir(如果它未存储在 docker 卷中)。** **之后,您可以创建第二个自动更新容器的脚本:**
点击此处展开 ``` #!/bin/bash # 运行一次容器更新 if ! docker exec --env AUTOMATIC_UPDATES=1 nextcloud-aio-mastercontainer /daily-backup.sh; then while docker ps --format "{{.Names}}" | grep -q "^nextcloud-aio-watchtower$"; do echo "Waiting for watchtower to stop" sleep 30 done while ! docker ps --format "{{.Names}}" | grep -q "^nextcloud-aio-mastercontainer$"; do echo "Waiting for Mastercontainer to start" sleep 30 done # Run container update another time to make sure that all containers are updated correctly. docker exec --env AUTOMATIC_UPDATES=1 nextcloud-aio-mastercontainer /daily-backup.sh fi ```
您可以简单地将脚本复制并粘贴到一个文件中,例如命名为 `automatic-updates.sh`,例如在这里:`/root/automatic-updates.sh`。 然后使用 `sudo chown root:root /root/automatic-updates.sh` 和 `sudo chmod 700 /root/automatic-updates.sh` 应用正确的权限。然后您可以创建一个例如每天 `05:00` 运行的 cronjob,如下所示: 1. 使用 `sudo crontab -u root -e` 打开 cronjob(如果尚未完成,请选择您选择的编辑器。我推荐 nano)。 2. 如果不存在,请将以下新行添加到 crontab 中:`0 5 * * * /root/automatic-updates.sh`,这将每天 05:00 运行脚本。 3. 保存并关闭 crontab(使用 nano 时,快捷键是 `Ctrl + o` 然后按 `Enter` 保存,并使用 `Ctrl + x` 关闭编辑器)。 ### 保护 AIO 界面免受未经授权的 ACME 挑战 根据[设计](https://github.com/nextcloud/all-in-one/discussions/4882#discussioncomment-9858384),在 mastercontainer 内部运行的 Caddy 负责处理端口 8443 上 AIO 界面的自动 TLS 证书生成,它被配置为接受任何有效域名的流量,以便让 AIO 界面尽可能方便使用。然而,由于这一点,它容易受到来自互联网上任何人的任意主机名的 DNS 挑战。虽然这不会损害您服务器的安全性,但它可能导致日志混乱,并因速率限制滥用而导致证书续期尝试被拒绝。为了缓解此问题,建议将 AIO 界面置于 VPN 之后和/或限制其公开暴露。 ### 如何从现有的 Nextcloud 安装迁移到 Nextcloud AIO? 请参阅以下相关文档:[migration.md](https://github.com/nextcloud/all-in-one/blob/main/migration.md) ## 备份 Nextcloud AIO 提供基于 [BorgBackup](https://github.com/borgbackup/borg#what-is-borgbackup) 的备份解决方案。这些备份充当安装损坏时的还原点。通过使用此工具,备份是增量的、差异的、压缩的和加密的——因此只有第一次备份会花费一些时间。后续备份应该很快,因为只考虑了更改的部分。 建议在任何容器更新之前创建备份。这样做,您将安全地应对更新期间可能出现的任何复杂情况,因为您基本上可以通过单击来恢复整个实例。 对于本地备份,恢复过程应该非常快,因为使用 rsync 来恢复选定的备份,它只传输更改的文件并删除多余的文件。对于远程 borg 备份,整个备份存档是从远程提取的,取决于 `borg extract` 的智能程度,可能需要下载整个存档。 如果您将外部驱动器连接到主机,并选择位于该驱动器上的备份目录,那么您也在一定程度上免受存储 docker 卷的驱动器发生驱动器故障的影响。
如何逐步执行上述步骤 1. 使用内置功能或 udev 规则或您喜欢的任何方式将外部/备份 HDD 挂载到主机 OS。(例如,遵循此视频:https://www.youtube.com/watch?v=2lSyX4D3v_s),最好将驱动器挂载在 `/mnt/backup`。 2. 如果尚未完成,启动 docker 容器并按照指南设置 Nextcloud。 3. 现在打开 AIO 界面。 4. 在备份部分下,添加您的外部磁盘挂载点作为备份目录,例如 `/mnt/backup`。 5. 点击 `Create Backup`,这应该会在外部磁盘上创建第一个备份。
如果您想直接备份到远程 borg 仓库:
如何逐步执行上述步骤 1. 在远程创建您的 borg 仓库。记下仓库 URL 以备后用。 2. 打开 AIO 界面 3. 在备份下,将本地路径留空,并填入您之前记下的 borg 仓库 URL。 4. 点击 `Create backup`,这将创建一个 ssh 密钥对并失败,因为远程尚未信任此密钥。复制 AIO 中显示的公钥并将其添加到远程的授权密钥中。 5. 再次尝试创建备份,这次应该会成功。
可以在 AIO 界面中使用 `Create Backup` 和 `Restore selected backup` 按钮来创建和恢复备份。此外,还提供了一个备份检查功能,用于检查备份的完整性,但在大多数情况下应该不需要。 备份本身使用在 AIO 界面中显示给您的加密密钥进行加密。请将其保存在安全的地方,因为没有此密钥您将无法从备份恢复。 首次备份完成后可以启用每日备份。启用此功能还允许启用一个选项,该选项允许自动更新所有容器、Nextcloud 及其应用程序。 请注意,此解决方案不会备份使用外部存储应用挂载到 Nextcloud 的文件和文件夹——但您可以在首次备份完成后添加要备份的其他 Docker 卷和主机路径。 ### AIO 的备份解决方案会备份什么? 将备份恢复实例所需的 Nextcloud AIO 实例的所有重要数据,例如数据库、您的文件和 mastercontainer 的配置文件等。使用外部存储应用挂载到 Nextcloud 的文件和文件夹不会被备份。目前无法排除数据目录,因为这需要像运行 files:scan 这样的技巧,并且会使备份解决方案更加不可靠(因为数据库和您的文件/文件夹需要保持同步)。如果您仍然不希望备份您的 datadirectory,请参阅 https://github.com/nextcloud/all-in-one#how-to-enable-automatic-updates-without-creating-a-backup-beforehand 了解选项(有一个关于需要按什么顺序备份什么的提示)。 ### 如何调整 borg 的保留策略? 内置的基于 borg 的备份解决方案默认具有 `--keep-within=7d --keep-weekly=4 --keep-monthly=6` 的保留策略。有关这些值的含义,请参阅 https://borgbackup.readthedocs.io/en/stable/usage/prune.html。您可以通过向 mastercontainer 的 docker run 命令提供 `--env BORG_RETENTION_POLICY="--keep-within=7d --keep-weekly=4 --keep-monthly=6"` 来调整保留策略(但在最后一行 `ghcr.io/nextcloud-releases/all-in-one:latest` 之前!如果它已经启动,您需要停止 mastercontainer,将其删除(不会丢失数据)并使用您最初使用的 docker run 命令重新创建它)并根据您的需要自定义该值。⚠️ 请确保此值有效,否则备份修剪会出错!此外,不要包含 `-a` 或 `--glob-archives` 选项,因为 AIO 已经提供了它并且您无法覆盖它。请参阅 https://github.com/nextcloud/all-in-one/pull/7616 ### 如何从 AIO 迁移到 AIO? 如果您启用了 borg 备份功能,可以将其复制到新主机并从备份恢复。本指南假设新安装的数据目录位于 `/mnt/datadir`,如果在其他位置,您可以调整这些步骤。 1. 如果适用,将 DNS 条目设置为 60 秒 TTL 2. 在您当前的安装上,使用 AIO 界面: 1. 更新 AIO 和所有容器 2. 停止所有容器(从现在开始,您的云宕机了) 3. 创建当前的 borg 备份 4. 记下存储备份的路径和加密密码 3. 导航到备份文件夹 4. 创建备份的存档以便于复制:`tar -czvf borg.tar.gz borg` 5. 将存档复制到新主机:`scp borg.tar.gz user@new.host:/mnt`。确保将 `user` 替换为您的实际用户,将 `new.host` 替换为实际主机的 IP 或域名。您也可以使用另一种方式复制存档。 6. 切换到新主机 7. 转到您放置备份存档的文件夹并使用 `tar -xf borg.tar.gz` 解压 8. 按照安装指南创建新的 aio 实例,但不要启动容器(`docker run` 或 `docker compose up -d` 命令) 9. 将 DNS 条目更改为新主机的 IP 10. 如果您使用反向代理,请配置它 11. 启动 AIO 容器并在浏览器中打开新的 AIO 界面 12. 确保保存新生成的密码并在下一步中输入它 13. 选择 "Restore former AIO instance from backup" 选项,输入旧备份的加密密码和解压后的 `borg` 文件夹所在的路径(不带 borg 部分),然后点击 `Submit location and password` 14. 在下拉菜单中选择最新的备份并点击 `Restore selected backup` 15. 等待备份恢复 16. 在 AIO 界面中启动容器 ### 支持远程 borg 备份吗? 支持直接备份到远程 borg 仓库。这避免了必须存储备份的本地副本,支持仅追加的 borg 密钥以对抗勒索软件,并允许使用 AIO 界面管理您的备份。 一些替代方案,它们不具备上述所有好处: - 将网络文件系统(如 SSHFS、SMB 或 NFS)挂载到您在 AIO 中作为备份目录输入的目录中 - 使用 rsync 或 rclone 将 AIO 在本地创建的 borg 备份存档同步到远程目标(确保在开始同步之前正确锁定备份存档;搜索 "aio-lockfile";您可以在此处找到本地示例脚本:https://github.com/nextcloud/all-in-one#sync-local-backups-regularly-to-another-drive) - 您可以在此处找到一份写得很好的指南,该指南使用 rclone 和例如 BorgBase 进行远程备份:https://github.com/nextcloud/all-in-one/discussions/2247 - 这是另一份利用 borgmatic 和 BorgBase 进行远程备份的指南:https://github.com/nextcloud/all-in-one/discussions/4391 - 使用脚本和 borg、borgmatic 或任何其他备份工具创建您自己的备份解决方案以备份到远程目标(确保按照 https://github.com/nextcloud/all-in-one#how-to-enable-automatic-updates-without-creating-a-backup-beforehand 正确停止和启动 AIO 容器) ### LXC 容器中备份容器的故障 如果您在 LXC 容器中运行 AIO,则需要确保在 LXC 容器设置中启用了 FUSE。此外,如果使用 Alpine Linux 作为主机 OS,请确保通过 `apk add fuse` 添加 fuse。否则,备份容器将无法启动,因为它的运行需要 FUSE。 ### 如何在 Windows 上创建备份卷? 如 AIO 界面中所述,可以使用 docker 卷作为备份目标。在使用之前,您需要先创建它。以下是如何在 Windows 上创建卷的示例: ``` docker volume create ^ --driver local ^ --name nextcloud_aio_backupdir ^ -o device="/host_mnt/e/your/backup/path" ^ -o type="none" ^ -o o="bind" ``` 在此示例中,它将 `E:\your\backup\path` 挂载到卷中,因此对于不同的位置,您需要相应地调整 `/host_mnt/e/your/backup/path`。然后在 AIO 界面中输入 `nextcloud_aio_backupdir` 作为备份位置。 ### 专业提示:备份存档访问 您可以通过以下步骤在主机上打开 BorgBackup 存档:
(适用于 Ubuntu Desktop 的说明) 或者,现在有一个社区容器允许在 Web 会话中访问您的备份:https://github.com/nextcloud/all-in-one/tree/main/community-containers/borgbackup-viewer。 ``` # 在主机上安装 borgbackup sudo apt update && sudo apt install borgbackup # 在任何使用 borg 的 shell 中,您必须首先导出此变量 # 如果您使用的是默认备份位置 /mnt/backup/borg export BORG_REPO='/mnt/backup/borg' # 或者如果您使用的是远程仓库 export BORG_REPO='user@host:/path/to/repo' # 将归档挂载到 /tmp/borg sudo mkdir -p /tmp/borg && sudo borg mount "$BORG_REPO" /tmp/borg # 成功输入仓库密钥后,您应该能够访问 /tmp/borg 中的所有归档 # 您现在可以通过 rsync 将它们同步到其他位置或执行其他操作来做任何您想做的事 # 例如,您可以通过运行以下命令在该位置打开文件管理器: xhost +si:localuser:root && sudo nautilus /tmp/borg # 完成后,只需关闭文件管理器并运行以下命令以卸载备份归档: sudo umount /tmp/borg ``` ### 手动删除备份存档 您可以通过以下步骤在主机上手动删除 BorgBackup 存档:
(适用于基于 Debian 的操作系统(如 Ubuntu)的说明) 或者,现在有一个社区容器允许在 Web 会话中访问您的备份:https://github.com/nextcloud/all-in-one/tree/main/community-containers/borgbackup-viewer。 ``` # 在主机上安装 borgbackup sudo apt update && sudo apt install borgbackup # 在任何使用 borg 的 shell 中,您必须首先导出此变量 # 如果您使用的是默认备份位置 /mnt/backup/borg export BORG_REPO='/mnt/backup/borg' # 或者如果您使用的是远程仓库 export BORG_REPO='user@host:/path/to/repo' # 列出所有归档(如果您使用的是默认备份位置 /mnt/backup/borg) sudo borg list # 成功输入仓库密钥后,您现在应该看到所有备份归档的列表 # 例如,一个示例备份归档可能名为 20220223_174237-nextcloud-aio # 然后您可以使用以下命令简单地删除归档: sudo borg delete --stats --progress "::20220223_174237-nextcloud-aio" # 如果安装了 borg 1.2.0 或更高版本,您随后需要运行 borg compact 以清理释放的空间 sudo borg --version # 如果上述命令的版本号高于 1.2.0,您需要运行以下命令: sudo borg compact ``` 这样做之后,请确保在 AIO 界面中更新备份存档列表!
您可以通过单击 `Backup and restore` 部分内 `Update backup list` 部分中的 `Update backup list` 按钮来执行此操作。 ### 定期将本地备份同步到另一个驱动器 为了提高备份安全性,您可以考虑定期将本地备份仓库同步到另一个驱动器。 为此,首先将驱动器添加到 `/etc/fstab`,以便它能够自动挂载,然后创建一个自动完成所有事情的脚本。以下是此类脚本的示例:
点击此处展开 ``` #!/bin/bash # 请根据您的需求修改以下所有变量: SOURCE_DIRECTORY="/mnt/backup/borg" DRIVE_MOUNTPOINT="/mnt/backup-drive" TARGET_DIRECTORY="/mnt/backup-drive/borg" ######################################## # 请勿修改以下任何内容!# ######################################## if [ "$EUID" -ne 0 ]; then echo "Please run as root" exit 1 fi if ! [ -d "$SOURCE_DIRECTORY" ]; then echo "The source directory does not exist." exit 1 fi if [ -z "$(ls -A "$SOURCE_DIRECTORY/")" ]; then echo "The source directory is empty which is not allowed." exit 1 fi if ! [ -d "$DRIVE_MOUNTPOINT" ]; then echo "The drive mountpoint must be an existing directory" exit 1 fi if ! grep -q "$DRIVE_MOUNTPOINT" /etc/fstab; then echo "Could not find the drive mountpoint in the fstab file. Did you add it there?" exit 1 fi if ! mountpoint -q "$DRIVE_MOUNTPOINT"; then mount "$DRIVE_MOUNTPOINT" if ! mountpoint -q "$DRIVE_MOUNTPOINT"; then echo "Could not mount the drive. Is it connected?" exit 1 fi fi if [ -f "$SOURCE_DIRECTORY/lock.roster" ]; then echo "Cannot run the script as the backup archive is currently changed. Please try again later." exit 1 fi mkdir -p "$TARGET_DIRECTORY" if ! [ -d "$TARGET_DIRECTORY" ]; then echo "Could not create target directory" exit 1 fi if [ -f "$SOURCE_DIRECTORY/aio-lockfile" ]; then echo "Not continuing because aio-lockfile already exists." exit 1 fi touch "$SOURCE_DIRECTORY/aio-lockfile" if ! rsync --stats --archive --human-readable --delete "$SOURCE_DIRECTORY/" "$TARGET_DIRECTORY"; then echo "Failed to sync the backup repository to the target directory." exit 1 fi rm "$SOURCE_DIRECTORY/aio-lockfile" rm "$TARGET_DIRECTORY/aio-lockfile" umount "$DRIVE_MOUNTPOINT" if docker ps --format "{{.Names}}" | grep "^nextcloud-aio-nextcloud$"; then docker exec nextcloud-aio-nextcloud bash /notify.sh "Rsync backup successful!" "Synced the backup repository successfully." else echo "Synced the backup repository successfully." fi ```
您可以简单地将脚本复制并粘贴到一个文件中,例如命名为 `backup-script.sh`,例如在这里:`/root/backup-script.sh`。不要忘记根据您的要求修改变量! 然后使用 `sudo chown root:root /root/backup-script.sh` 和 `sudo chmod 700 /root/backup-script.sh` 应用正确的权限。然后您可以创建一个例如每周日 `20:00` 运行的 cronjob,如下所示: 1. 使用 `sudo crontab -u root -e` 打开 cronjob(如果尚未完成,请选择您选择的编辑器。我推荐 nano)。 2. 如果不存在,请将以下新行添加到 crontab 中:`0 20 * * 7 /root/backup-script.sh`,这将在每周日 20:00 运行脚本。 3. 保存并关闭 crontab(使用 nano 时快捷键是 `Ctrl + o` -> `Enter` 并使用 `Ctrl + x` 关闭编辑器)。 ### 如何从备份中排除 Nextcloud 的数据目录或预览文件夹? 为了加快备份速度并保持备份存档较小,您可能希望从备份中排除 Nextcloud 的数据目录或其预览文件夹。 如果您仍想继续,可以通过简单地在我们指定的 `NEXTCLOUD_DATADIR` 目标根目录中创建一个 `.noaiobackup` 文件来排除数据目录。对于位于数据目录内 `appdata_*/preview` 文件夹中的预览文件夹,也实施了相同的逻辑。因此,如果您想排除预览文件夹,只需在其中创建一个 `.noaiobackup` 文件。 通过 AIO 界面进行恢复后,由于数据目录和数据库不同步,您可能会遇到问题。您可以通过运行 `occ files:scan --all` 和 `occ maintenance:repair` 以及 `occ files:scan-app-data` 来解决此问题。请参阅 https://github.com/nextcloud/all-in-one#how-to-run-occ-commands。如果仅排除了预览文件夹,则应使用命令 `occ files:scan-app-data preview`。 ### 如何从外部脚本停止/启动/更新容器或触发每日备份? 您可以通过运行存储在 mastercontainer 中的 `/daily-backup.sh` 脚本来实现。它接受以下环境变量: - `AUTOMATIC_UPDATES` 如果设置为 `1`,它将自动停止容器,更新它们并启动它们,包括 mastercontainer。如果 mastercontainer 被更新,此脚本的执行将在 mastercontainer 停止后立即停止。然后您可以等到它再次启动并再次使用此标志运行脚本,以便随后正确更新所有容器。 - `DAILY_BACKUP` 如果设置为 `1`,它将自动停止容器并创建备份。如果您想在之后启动它们,可以查看 `START_CONTAINERS` 选项。 - `STOP_CONTAINERS` 如果设置为 `1`,它将在脚本开始时自动停止容器。由 `DAILY_BACKUP=1` 暗示。 - `START_CONTAINERS` 如果设置为 `1`,它将在脚本结束时自动启动容器,而不更新它们。由 `AUTOMATIC_UPDATES=1` 暗示。 - `CHECK_BACKUP` 如果设置为 `1`,它将启动 AIO 进行的所有 borg 备份的完整性检查。请注意,备份检查是非阻塞的,因此可以在检查期间保持容器运行。这意味着您不能同时传递 `DAILY_BACKUP=1`。检查的输出可以在容器 `nextcloud-aio-borgbackup` 的日志中找到。 进行备份的一个示例是 `sudo docker exec -it --env DAILY_BACKUP=1 nextcloud-aio-mastercontainer /daily-backup.sh`,您可以通过 cronjob 运行它或将其放入脚本中。 同样,进行备份检查的命令是 `sudo docker exec --env DAILY_BACKUP=0 --env CHECK_BACKUP=1 --env STOP_CONTAINERS=0 nextcloud-aio-mastercontainer /daily-backup.sh`。 ### 如何禁用备份部分? 如果您已经有了备份解决方案,可能希望隐藏备份部分。您可以通过将 `--env AIO_DISABLE_BACKUP_SECTION=true` 添加到 mastercontainer 的 docker run 命令来实现(但在最后一行 `ghcr.io/nextcloud-releases/all-in-one:latest` 之前!如果它已经启动,您需要停止 mastercontainer,将其删除(不会丢失数据)并使用您最初使用的 docker run 命令重新创建它)。 ## 插件 ### Fail2ban 您可以将服务器配置为使用 fail2ban 作为暴力破解保护来阻止某些 IP 地址。设置方法如下:https://docs.nextcloud.com/server/stable/admin_manual/installation/harden_server.html#setup-fail2ban。AIO 的 logpath 默认为 `/var/lib/docker/volumes/nextcloud_aio_nextcloud/_data/data/nextcloud.log`。不要忘记将 `chain=DOCKER-USER` 添加到您的 nextcloud jail 配置(`nextcloud.local`)中,否则即使 IP 被禁止,docker 上运行的cloud 服务仍然可以访问。此外,您可以将被阻止的端口更改为覆盖所有 AIO 端口:默认为 `80,443,8080,8443,3478`(参见[此链接](https://github.com/nextcloud/all-in-one#explanation-of-used-ports))。除此之外,现在有一个可以添加到 AIO 堆栈的社区容器:https://github.com/nextcloud/all-in-one/tree/main/community-containers/fail2ban ### LDAP 可以连接到现有的 LDAP 服务器。您需要确保 Nextcloud 容器可以访问 LDAP 服务器。然后您可以启用 LDAP 应用程序并在 Nextcloud 中手动配置 LDAP。如果您还没有 LDAP 服务器,建议使用此 docker 容器:https://hub.docker.com/r/nitnelave/lldap。这里也要确保 Nextcloud 可以与 LDAP 服务器通信。最简单的方法是将 LDAP docker 容器添加到 docker 网络 `nextcloud-aio`。然后您可以通过其名称从 Nextcloud 容器连接到 LDAP 容器。现在有一个社区容器允许轻松将 LLDAP 添加到 AIO:https://github.com/nextcloud/all-in-one/tree/main/community-containers/lldap ### Netdata Netdata 允许您使用 GUI 监控服务器。您可以通过遵循 https://learn.netdata.cloud/docs/agent/packaging/docker#create-a-new-netdata-agent-container 来安装它。除此之外,现在有一种供社区添加容器的方式:https://github.com/nextcloud/all-in-one/discussions/392#discussioncomment-7133563 ### USER_SQL 如果您想使用 user_sql 应用程序,最简单的方法是创建一个额外的数据库容器并将其添加到 docker 网络 `nextcloud-aio`。然后 Nextcloud 容器应该能够使用其名称与数据库容器通信。 ### phpMyAdmin, Adminer 或 pgAdmin 可以安装其中任何一个来为您的 AIO 数据库获取 GUI。推荐使用 pgAdmin 容器。您可以在此处获取有关它的一些文档:https://www.pgadmin.org/docs/pgadmin4/latest/container_deployment.html。对于要连接到 aio-database 的容器,您需要将容器连接到 docker 网络 `nextcloud-aio`,并使用 `nextcloud-aio-database` 作为数据库主机,`oc_nextcloud` 作为数据库用户名,以及运行 `sudo docker exec nextcloud-aio-nextcloud grep dbpassword config/config.php` 获得的密码作为密码。除此之外,现在有一种供社区添加容器的方式:https://github.com/nextcloud/all-in-one/discussions/3061#discussioncomment-7307045 **请注意:** 如果您没有服务器的 CLI 访问权限,您现在可以使用此社区容器通过 Web 会话运行 docker 命令:https://github.com/nextcloud/all-in-one/tree/main/community-containers/container-management ### Mail server 您可以使用以下四个推荐项目之一自行配置邮件服务器:[Docker Mailserver](https://github.com/docker-mailserver/docker-mailserver/#docker-mailserver)、[Mailu](https://github.com/Mailu/Mailu)、[Maddy Mail Server](https://github.com/foxcpp/maddy#maddy-mail-server)、[Mailcow](https://github.com/mailcow/mailcow-dockerized#mailcow-dockerized-------) 或 [Stalwart](https://stalw.art/)。现在有一个社区容器允许轻松将 Stalwart Mail server 添加到 AIO:https://github.com/nextcloud/all-in-one/tree/main/community-containers/stalwart ## 其他 ### 集成新容器的要求 对于集成新容器,它们必须满足特定要求才能被考虑集成到 AIO 本身。即使不被考虑,我们也可能会添加一些关于它的文档。此外,现在还有这个:https://github.com/nextcloud/all-in-one/tree/main/community-containers#community-containers 有哪些要求? 1. 新容器必须与 Nextcloud 相关。相关意味着 Nextcloud 中必须有一个通过添加此容器而获得的功能。 2. 它必须是可选安装的。从 AIO 界面禁用和启用容器必须有效,并且不得产生任何意外的副作用。 3. 通过添加容器添加到 Nextcloud 中的功能必须由 Nextcloud GmbH 维护。 4. 必须能够在 docker 容器内运行而无需大的变通方法。大的变通方法意味着例如需要更改功能或安全选项。 5. 容器不应将目录从主机挂载到容器中:只应使用 docker 卷。 6. 容器必须能被超过 90% 的用户使用(例如,系统要求不要过高等) 7. 添加容器后不需要额外的设置——它应该完全开箱即用。 8. 如果容器需要被暴露,只支持子文件夹。因此,容器不应需要自己的(子)域,并且必须能够在子文件夹中运行。 ### 更新策略 该项目重视稳定性胜过新功能。这意味着当引入新的 Nextcloud 主要更新时,我们将至少等到第一个补丁版本(例如 `24.0.1`)发布后再升级到它。此外,我们将等到所有重要的应用程序都与新的主要版本兼容后再进行升级。Nextcloud 和所有依赖项的次要或补丁版本以及所有容器将尽快更新到新版本,但我们会尝试在推送所有更新之前进行良好的测试。这意味着新更新可能需要大约 2 周才能到达 `latest` 频道。如果您想帮助测试,可以通过遵循[此文档](#how-to-switch-the-channel)切换到 `beta` 频道,这也将让您更早获得更新。 ### 更新通知的发送频率是多少? AIO 附带了自己的更新通知实现。它检查是否有可用的容器更新。如果是,它会在周六向 `admin` 组的 Nextcloud 用户发送标题为 `Container updates available!` 的通知。如果 Nextcloud 容器镜像超过 90 天(约 3 个月)并因此严重过时,AIO 会向所有 Nextcloud 用户发送标题为 `AIO is outdated!` 的通知。因此,管理员应确保至少每 3 个月更新一次容器镜像,以确保实例尽快获得所有安全错误修复。 ### 巨大的 docker 日志 如果您遇到 docker 日志过大的问题,可以通过遵循 https://docs.docker.com/config/containers/logging/local/#usage 来调整日志大小。但是,对于包含的 AIO 容器,这通常应该不需要,因为它们几乎都将日志级别设置为 warn,因此它们不应该产生太多日志。
徽章 [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/nextcloud/all-in-one)
标签:All-in-One, BorgBackup, ClamAV, Docker, ffuf, Nextcloud, Nextcloud Office, Nextcloud Talk, PHP-FPM, PostgreSQL, Redis, WebRTC, Web 安全测试, 云安全, 企业网盘, 全文搜索, 办公协作, 协同办公, 反向代理, 反病毒, 安全, 安全防御评估, 容器化部署, 开源, 搜索引擎查询, 数据备份, 数据隐私, 文件共享, 服务器运维, 测试用例, 知识管理, 私有云存储, 网盘, 自托管, 请求拦截, 超时处理, 高性能后端