Nextcloud:自建网盘的真实体验,和它最容易崩的三个地方

admin 开源软件 2026-10-20 6 0

自建网盘要先想清楚一件事:你要的是「同步」还是「平台」。

  • 只要文件在多台设备之间同步 → 用 Syncthing,几乎零维护;
  • 要网页访问、在线预览、多人共享、外链分享 → 才轮到 Nextcloud。

它的复杂度来自功能:PHP 应用 + 数据库 + Redis + 一堆后台任务(cron)。每多一个组件,就多一个可能坏的地方。

一、部署要点

services:
  db:
    image: mariadb:10.11
    environment:
      - MYSQL_ROOT_PASSWORD=改成强密码
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_PASSWORD=改成强密码
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
    volumes: ["./db:/var/lib/mysql"]

  redis:
    image: redis:7-alpine
    restart: always

  app:
    image: nextcloud:stable
    restart: always
    ports: ["8080:80"]
    environment:
      - MYSQL_HOST=db
      - REDIS_HOST=redis
      - NEXTCLOUD_TRUSTED_DOMAINS=你的域名
    volumes:
      - ./html:/var/www/html
      - ./data:/var/www/html/data

三个必须做对的地方:

  1. 数据库字符集用 utf8mb4,排序规则统一。用默认配置起 MariaDB,中文文件名和 emoji 会出现乱码或建表失败;
  2. 必须配 Redis。不配的话文件锁会退化成数据库轮询,多人同时编辑同一目录就会互相卡住;
  3. 配置 cron 任务。默认走 AJAX 触发后台任务,页面一关就停。改成系统 cron 每 5 分钟跑一次:*/5 * * * * php -f cron.php。

二、最容易崩的三个地方

1. 大版本升级

它要求逐个主版本升级(比如 26 → 27 → 28),不能跳。而且升级过程中如果中断,可能停在半途——修复比重新部署还麻烦。

做法:升级前整包备份 html 和 data 目录、导出数据库;用固定版本号而非 stable 标签,避免某天重启后自动跨版本。

2. 上传大小限制

网页上传有四个地方限制大小:PHP 的 upload_max_filesize、post_max_size,nginx 的 client_max_body_size,以及它自己的配置。漏改一个,传大文件就失败,而且报错信息不指向真正原因。

3. 后台任务堆积

预览图生成、全文检索索引、文件扫描都靠后台任务。任务堆积时表现为「文件传上去了但看不到缩略图」「搜索搜不到新文件」。查 occ status 和后台任务列表能看出来。

三、和 Immich 的分工

它做照片管理能用,但不专业——没有人脸聚类、没有时间轴滑动、没有移动端自动备份的体验。站内已有自建相册的方案,两者可以并存:网盘放文档和工程文件,相册专门管理照片视频。

具体见 用 Docker 自建私有云相册:Immich 完整部署指南。

四、访问速度怎么优化

  • 开启缓存:APCu + Redis 双层,页面渲染快一倍;
  • 预览图预生成:默认按需生成,第一次打开目录会卡;用 occ preview:pre-generate 批量跑;
  • 把 data 目录放到独立磁盘:文件多了以后 IO 会拖慢系统盘;
  • 外链走 CDN 或反代:分享给别人的大文件直接走对象存储更合适。

五、什么时候别用它

如果你的需求只是「手机照片自动备份到家里那台机器」,它的部署成本是 Syncthing 的十倍,收益却差不多。先把需求缩小到「同步」或「平台」,再决定要不要上。

相关阅读

评论

访问统计