外观
Nextcloud:私有云盘
完成后,你有一个能在网页、手机和电脑上同步文件、分享链接的私有云盘。你也会分清 Nextcloud 在 OMV 上的三种部署方式,知道为什么 AIO 不在 Compose 插件的备份范围内,以及怎么把 OMV 的共享文件夹挂进 Nextcloud。
Nextcloud 是本章里最难伺候的应用:组件多、对域名和 HTTPS 有要求、升级规则严格。先确认你真的需要它。
适合谁
| 你的需求 | 更合适的方案 |
|---|---|
| 局域网里访问 NAS 文件 | SMB 共享就够了 |
| 几台设备之间同步文件夹 | Syncthing |
| 只要网页上浏览和上传文件 | FileBrowser |
| 同步 + 分享链接 + 日历联系人 + 多用户 + 手机 App | Nextcloud |
三种部署方式
| AIO(All-in-One) | 插件示例(LinuxServer 镜像) | 官方 nextcloud 镜像 | |
|---|---|---|---|
| 维护者 | Nextcloud 官方 | 第三方 LinuxServer.io | 社区志愿者,官方说它「面向专家」 |
| 组成 | 一个主容器,自动创建 Apache、Nextcloud、PostgreSQL、Redis 等一整套容器 | 单个容器 | 单个镜像,数据库、Redis、定时任务自己配 |
| 域名和 HTTPS | 必须有域名和有效证书。官方明确:不支持用 IP 访问、不支持自签名证书、不支持非 443 端口 | 容器自带自签名证书,可以直接用 IP 访问 | 自己配 |
| 数据库 | PostgreSQL,自动配好 | 默认 SQLite,官方只推荐用于测试和极小的实例 | 默认 SQLite,可改连 MariaDB 或 PostgreSQL |
| 备份 | 自带 borg 备份 | 自己负责 | 自己负责 |
| 升级 | 在 AIO 界面里点 | 拉取新镜像,一次只能升一个大版本 | 同左 |
| 插件的计划备份 | 不覆盖 | 覆盖 compose 文件和不大的卷 | 同左 |
选择建议:
- 有域名,想长期用:AIO,Nextcloud 官方的推荐路线。
- 只想在家里的局域网先试试:插件示例。别放正式数据。
- 熟悉 Docker、想自己控制每个组件:官方镜像,参考官方仓库里的compose 示例,本站不展开。
路线 A:插件示例,局域网先试一试
插件的示例清单里有 nextcloud,用的是 LinuxServer 的镜像。从模板添加后编辑,示例原样是(日期 2025-06-01):
yaml
services:
nextcloud:
image: lscr.io/linuxserver/nextcloud:latest
container_name: nextcloud
environment:
- PUID=1000
- PGID=100
- TZ=Etc/UTC
volumes:
- CHANGE_TO_COMPOSE_DATA_PATH/nextcloud/config:/config
- CHANGE_TO_COMPOSE_DATA_PATH/nextcloud/data:/data
ports:
- 443:443
restart: unless-stopped改成这样:
yaml
services:
nextcloud:
image: lscr.io/linuxserver/nextcloud:latest
container_name: nextcloud
environment:
- PUID=${{ uid:"appuser" }}
- PGID=${{ gid:"users" }}
- TZ=${{ tz }}
volumes:
- ${{ sf:"appdata" }}/nextcloud/config:/config
- ${{ sf:"nextcloud" }}/data:/data
ports:
- "8443:443"
restart: unless-stopped- 端口:示例直接映射 443,OMV 一旦启用 HTTPS 就会冲突,改成
8443。 - 数据目录:放进专用共享文件夹
nextcloud,不要用 SMB 共享给别人写入。Nextcloud 的文件都记在它自己的数据库里,在 NAS 上绕过 Nextcloud 直接改文件,会让数据库和文件对不上。 - 配置目录:放在
appdata,SSD 上更快。
保存,检查,上线。用 https://<NAS 的 IP>:8443 访问,浏览器会因为自签名证书给警告,继续就行。第一次打开是安装向导,创建管理员账号。向导里的数据库默认是 SQLite,只适合试用,长期用要选 MariaDB 或 PostgreSQL,需要你另起一个数据库容器。
升级:拉取新镜像,重建容器,LinuxServer 的说明是一次只能升一个大版本。latest 在你很久没更新时可能一下子跨过几个大版本,所以别让它自动更新。
路线 B:AIO
先看前提
AIO 对环境的要求比较多:
- 一个域名,并且有有效的证书。AIO 不支持 IP,也不支持自签名证书。没有域名,官方的local-instance 文档给了几条路:AIO 内置的 deSEC 免费域名(自带本地解析容器)、Tailscale、DNS 质询等。
- 反向代理:AIO 的 Apache 容器默认要独占 443。OMV 自己占着 80,启用 HTTPS 后还占着 443,所以要么先把 OMV 界面的端口挪走,要么放在反向代理后面。怎么做见反向代理与 HTTPS。
- 想从外网访问,路由器要把 443 转给反向代理。Nextcloud 暴露到公网要格外小心,先读上面那篇文章里的警告。
- AIO 会启动好几个容器,它们的数据库和程序文件都是命名卷,放在 Docker 存储里。所以 Docker 存储要放在够大、够快的盘上,见Compose 插件设置详解。
- AIO 的主容器需要挂载
docker.sock,这等于把 root 权限交给它,是 AIO 的设计。官方也提供不挂套接字的「手动安装」方式,本站不展开。
部署
插件示例里的 nextcloud 不是 AIO。AIO 要用 添加(Add)手动建一个 compose 文件。下面是按官方 compose.yaml 改的,放在反向代理后面的版本:
yaml
name: nextcloud-aio
services:
nextcloud-aio-mastercontainer:
image: ghcr.io/nextcloud-releases/all-in-one:latest
init: true
restart: always
container_name: nextcloud-aio-mastercontainer # 官方要求:不能改
volumes:
- nextcloud_aio_mastercontainer:/mnt/docker-aio-config # 官方要求:不能改
- /var/run/docker.sock:/var/run/docker.sock:ro
network_mode: bridge
ports:
- "8080:8080" # AIO 管理界面,自签名 HTTPS。被占用时只改左边的数字
environment:
APACHE_PORT: 11000 # 放在反向代理后面时必需
APACHE_IP_BINDING: 0.0.0.0
APACHE_ADDITIONAL_NETWORK: proxy # 反向代理所在的网络,必须在启动 AIO 之前已经存在
NEXTCLOUD_DATADIR: ${{ sf:"nextcloud" }}/data # 只能在第一次安装前设置
volumes:
nextcloud_aio_mastercontainer:
name: nextcloud_aio_mastercontainer几点说明:
- 容器名和卷名不能改,否则 AIO 的更新和内置备份会坏。
- 不要映射 80 和 8443。 官方的默认 compose 里有,但放在反向代理后面时不需要,而且 80 会撞 OMV。
APACHE_ADDITIONAL_NETWORK:反向代理是同一台机器上的容器时,让 AIO 创建的 Apache 容器也加入它的网络,反向代理就能用容器名访问。网络要先在服务 → Compose → 网络(Networks)里建好,见反向代理与 HTTPS。NEXTCLOUD_DATADIR:官方警告,第一次安装完成之后不要再改它。数据会被挂到容器里的/mnt/ncdata,目录里的文件属于容器内的www-data用户,不会是appuser,所以别在 NAS 上手动改动它们。- 8080 同样会被 qBittorrent 等的默认端口占用,被占用就改左边的数字。
首次设置
- 保存,检查,上线。
- 浏览器打开
https://<NAS 的 IP>:8080,用 IP,不要用域名,官方提醒域名可能因为 HSTS 以后打不开。接受自签名证书的警告,页面上会给出一串 AIO 密码,保存好,以后登录 AIO 界面要用。 - 输入你的域名并校验。校验不通过,按官方的反向代理文档排查,确认配置没问题后才考虑
SKIP_DOMAIN_VALIDATION。 - 选要装的可选组件,点开始,第一次要下载一批镜像,需要一些时间。
- 反向代理:在 Nginx Proxy Manager 里新建一个代理主机,域名填你的域名,转发到
http://nextcloud-aio-apache:11000,打开 WebSocket 支持。官方 NPM 一节还要求:NPM 的PUID和PGID要么不设、要么设为 0;并在代理主机的 Advanced 里加上proxy_read_timeout 3610s;和client_max_body_size 0;,后者让上传大小不受限制。完整说明见官方反向代理文档。
外部存储:把共享文件夹接进 Nextcloud
你已有一大堆放在 OMV 共享文件夹里的文件,不想复制一份进 Nextcloud。官方和 omv-extras wiki 的推荐都是用 Nextcloud 的外部存储(External storage)功能,把 OMV 的 SMB 共享当成一个外部存储接进来:
- 以管理员登录 Nextcloud,在应用里启用 External storage support,然后到管理设置的外部存储页添加。
- 类型选 SMB/CIFS,填文件夹名、主机(NAS 的 IP)、共享名、用户名和密码,再选哪些 Nextcloud 用户可以访问。
- 给它一个专用的 SMB 用户,只授予需要的共享,不要用
admin,见用户与用户组。
要知道的限制:
- 外部存储里的文件不在 Nextcloud 的数据库里,别人通过 SMB 直接改了文件,Nextcloud 不会立刻发现,要等它重新扫描。官方说 SMB 的更新通知只在 Windows 服务器上才可靠。
- OMV 的 SMB 共享开启了「隐藏点文件」时,Nextcloud 没法上传或显示以点开头的文件。
- AIO 也支持把本机目录以「本地外部存储」的方式挂进去,要用环境变量
NEXTCLOUD_MOUNT,并且要对目录执行chown,那会改掉共享文件夹的属主,和 OMV 的权限管理打架,不推荐。
备份
AIO 不在 Compose 插件的备份范围内
- 影响范围:Compose 插件的计划备份只认识 compose 文件里写出来的卷。AIO 的数据库、Redis、Apache 等容器,是主容器通过
docker.sock自己创建的,它们的卷放在 Docker 存储目录里,插件看不到。数据目录是用环境变量NEXTCLOUD_DATADIR指定的,也不是 compose 文件里的卷。插件最多只备份到 compose 文件和主容器的配置卷,这是一份不完整的备份,用它恢复不了 Nextcloud。 - 前置条件:用 AIO 界面里自带的备份,它基于 BorgBackup。备份位置选一块独立的盘。
- 怎么回退:AIO 界面里选一个备份点,点 Restore selected backup。恢复前确认你保存了界面上给出的备份加密密钥,没有它无法恢复。
AIO 的备份这样做:
- 在 OMV 里建一个共享文件夹,比如
nextcloud-backup,放在和 Docker、数据都不同的盘上。它的绝对路径是文件系统的挂载点加相对路径,挂载点在存储器 → 文件系统(Storage → File Systems)里,形如/srv/dev-disk-by-uuid-<UUID>/nextcloud-backup。 - 在 AIO 界面的备份区域,填这个绝对路径,点 Create Backup。
- 把加密密钥抄到密码管理器里。
- 第一次备份成功后,可以开启每日备份。开启它,才能再选择「自动更新所有容器」。
- 外部存储里的文件不会被 AIO 备份,要另外备份,见rsync 任务。
路线 A 的备份:插件的计划备份会先停容器,再用 rsync 复制 /config 和 /data,这样数据库文件是一致的。但 /data 通常很大,要在卷行尾写 # BACKUP,或者把 最大尺寸 调大。别勾选跳过容器停止 / 启动,见更新与备份容器。Nextcloud 官方文档的备份流程是:开启维护模式,复制配置、数据、主题文件夹,再导出数据库。
升级
- AIO:官方的流程是,在 AIO 界面点 Stop containers,再点 Start and update containers。更新前先在 AIO 里创建一次备份。主容器自己的更新有单独的按钮。
- 路线 A 和官方镜像:拉取新镜像,重建容器,一次只升一个大版本。
- 把 AIO 的容器从插件的计划更新里排除,见更新与备份容器。
检查结果
- AIO:AIO 界面里所有容器显示为运行中,
https://你的域名能登录,浏览器证书有效。路线 A:https://<NAS 的 IP>:8443能登录。 - 上传一个文件,在网页和手机 App 上都能看到。
- 备份:AIO 里创建一次备份,备份目录里出现
borg文件夹。路线 A:运行一次计划备份,备份共享文件夹里有/data的内容。 - 外部存储:在 Nextcloud 里能浏览到 OMV 共享文件夹里的文件。
- 做一次恢复演练,见恢复演练。
常见问题
AIO 校验域名失败。 域名要能解析到反向代理,反向代理要能转发到 nextcloud-aio-apache:11000。仅局域网使用时,按官方 local-instance 文档做。仔细核对后仍不行,官方的方法是在 AIO 界面地址后面加参数 skip_domain_validation,或设置环境变量 SKIP_DOMAIN_VALIDATION=true。
登录 Nextcloud 后跳转到错误的地址,或者提示不受信任的域名。 路线 A:用域名访问时,要在 Nextcloud 的 config.php 里把它加进 trusted_domains。AIO:按官方的反向代理文档,检查 APACHE_PORT 和代理转发的地址。
上传大文件失败。 反向代理限制了请求体大小或超时,按上面 NPM 的两行配置处理。
升级后起不来。 路线 A 看是不是跳过了大版本。AIO 在 AIO 界面里查看容器日志,必要时用升级前的备份恢复。