跳转到内容

Nextcloud:私有云盘 ​

完成后,你有一个能在网页、手机和电脑上同步文件、分享链接的私有云盘。你也会分清 Nextcloud 在 OMV 上的三种部署方式,知道为什么 AIO 不在 Compose 插件的备份范围内,以及怎么把 OMV 的共享文件夹挂进 Nextcloud。

Nextcloud 是本章里最难伺候的应用:组件多、对域名和 HTTPS 有要求、升级规则严格。先确认你真的需要它。

适合谁 ​

你的需求更合适的方案
局域网里访问 NAS 文件SMB 共享就够了
几台设备之间同步文件夹Syncthing
只要网页上浏览和上传文件FileBrowser
同步 + 分享链接 + 日历联系人 + 多用户 + 手机 AppNextcloud

三种部署方式 ​

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 等的默认端口占用,被占用就改左边的数字。

首次设置 ​

  1. 保存,检查,上线。
  2. 浏览器打开 https://<NAS 的 IP>:8080,用 IP,不要用域名,官方提醒域名可能因为 HSTS 以后打不开。接受自签名证书的警告,页面上会给出一串 AIO 密码,保存好,以后登录 AIO 界面要用。
  3. 输入你的域名并校验。校验不通过,按官方的反向代理文档排查,确认配置没问题后才考虑 SKIP_DOMAIN_VALIDATION。
  4. 选要装的可选组件,点开始,第一次要下载一批镜像,需要一些时间。
  5. 反向代理:在 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 共享当成一个外部存储接进来:

  1. 以管理员登录 Nextcloud,在应用里启用 External storage support,然后到管理设置的外部存储页添加。
  2. 类型选 SMB/CIFS,填文件夹名、主机(NAS 的 IP)、共享名、用户名和密码,再选哪些 Nextcloud 用户可以访问。
  3. 给它一个专用的 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 的备份这样做:

  1. 在 OMV 里建一个共享文件夹,比如 nextcloud-backup,放在和 Docker、数据都不同的盘上。它的绝对路径是文件系统的挂载点加相对路径,挂载点在 存储器 → 文件系统(Storage → File Systems)里,形如 /srv/dev-disk-by-uuid-<UUID>/nextcloud-backup。
  2. 在 AIO 界面的备份区域,填这个绝对路径,点 Create Backup。
  3. 把加密密钥抄到密码管理器里。
  4. 第一次备份成功后,可以开启每日备份。开启它,才能再选择「自动更新所有容器」。
  5. 外部存储里的文件不会被 AIO 备份,要另外备份,见rsync 任务。

路线 A 的备份:插件的计划备份会先停容器,再用 rsync 复制 /config 和 /data,这样数据库文件是一致的。但 /data 通常很大,要在卷行尾写 # BACKUP,或者把 最大尺寸 调大。别勾选跳过容器停止 / 启动,见更新与备份容器。Nextcloud 官方文档的备份流程是:开启维护模式,复制配置、数据、主题文件夹,再导出数据库。

升级 ​

  • AIO:官方的流程是,在 AIO 界面点 Stop containers,再点 Start and update containers。更新前先在 AIO 里创建一次备份。主容器自己的更新有单独的按钮。
  • 路线 A 和官方镜像:拉取新镜像,重建容器,一次只升一个大版本。
  • 把 AIO 的容器从插件的计划更新里排除,见更新与备份容器。

检查结果 ​

  1. AIO:AIO 界面里所有容器显示为运行中,https://你的域名 能登录,浏览器证书有效。路线 A:https://<NAS 的 IP>:8443 能登录。
  2. 上传一个文件,在网页和手机 App 上都能看到。
  3. 备份:AIO 里创建一次备份,备份目录里出现 borg 文件夹。路线 A:运行一次计划备份,备份共享文件夹里有 /data 的内容。
  4. 外部存储:在 Nextcloud 里能浏览到 OMV 共享文件夹里的文件。
  5. 做一次恢复演练,见恢复演练。

常见问题 ​

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 界面里查看容器日志,必要时用升级前的备份恢复。

参考资料 ​

OpenMediaVault 非官方中文使用指南,与 openmediavault 项目及其开发者无隶属关系。