Nextcloud:自建网盘的真实体验,和它最容易崩的三个地方
自建网盘要先想清楚一件事:你要的是「同步」还是「平台」。
- 只要文件在多台设备之间同步 → 用 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
三个必须做对的地方:
- 数据库字符集用 utf8mb4,排序规则统一。用默认配置起 MariaDB,中文文件名和 emoji 会出现乱码或建表失败;
- 必须配 Redis。不配的话文件锁会退化成数据库轮询,多人同时编辑同一目录就会互相卡住;
- 配置 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 的十倍,收益却差不多。先把需求缩小到「同步」或「平台」,再决定要不要上。
相关阅读
版权声明:如无特殊标注,文章均为本站原创,转载时请以链接形式注明文章出处。








评论