1230 字
6 分钟
Nextcloud 各种踩坑记录?

一定要使用容器!#

Nextcloud这一大坨在维护和迁移过程中极其麻烦,直接使用容器可以极大地减少运维成本

无论是普通版本还是aio,请使用Docker/Podman

如果接入对象存储#

在服务器本身存储受限的情况下,我们可以考虑接入对象存储

Nextcloud自带的外部存储功能并不符合“将对象存储作为主存储”的需求,而按照官方文档: Configuring Object Storage as Primary Storage的接入方式性能极差(尝试用netcup rs德国 直接接入 Wasabi Frankfurt,上下行只有约5 MB/s),并且和部分提供商不兼容,不可以透过Cloudflare传输(无法利用Cloudflare Bandwidth Alliance节省Egress流量),如果有加密需求,Nextcloud自带的加密模块也不是一个很好用的东西,所以需要考虑更优的解决办法

最简单的方式是用s3fs或者类似物将bucket直接挂载到服务器上,并把Nextcloud的数据目录放在上面,这样我们就将对象存储的工作交给了性能更好的其它软件上,让Nextcloud本身无法感知,从而提升性能

可能是更好一点的方法:我使用了JuiceFS来连接对象存储,这样我们就可以将所有工作都交给JFS,只需要维护元数据,它的性能要远高于s3fs和efs,并且支持RSA + AES-GCM加密,在绝大多数支持AES-NI的服务器上性能损耗很小,可以替代Nextcloud的服务器加密,加密后也可以防止因为用户上传CASM/版权内容导致对象存储账号被扬

这类分布式文件系统优点非常明显,迁移和维护方便(只需要动元数据库),性能优秀(支持缓存和预取)… 它还可以透过Cloudflare接入bucket而不是只能使用Endpoint(不知道为什么,这点我在很多使用对象存储的应用上都做不到)

在用了一短时间后,没有发现很致命的缺点,小问题有:单机下会受限于网络和本机性能,IOPS可能没有大容量HDD服务器高,但得益于缓存、缓冲区、预取,在应用层面感知不大;消耗流量,接入对象存储本来就非常消耗流量,jfs的Prefetch功能会带来一定的读放大,会消耗流量(可能还会增加存储桶的操作计数),所以在使用时应该尽量选择大流量/无限流量的服务器和支持Cloudflare Bandwidth Alliance/不计次数和免费Egress的服务提供商来平衡成本

禁用公共可读的System Address Book#

也许是Nextcloud专为彼此认识的公司/团队设计,在安装后system_addressbook_exposed为yes,在contacts功能中你将默认可以看到所有用户的用户名和Email,在共享对话框和各种输入框中也会根据这个系统地址簿显示自动补全,如果你是个人使用或者作为公共服务提供,那么这个默认行为明显不合理,使用命令 occ config:app:set dav system_addressbook_exposed --value="no" 来禁用它,并在共享中关闭允许在共享对话框中自动完成帐户名称并允许访问系统地址簿以保护你和其它人的隐私

启用OPCACHE#

这里不是踩坑,只是记一下推荐的OPCACHE参数

opcache.enable = 1
opcache.interned_strings_buffer = 128
opcache.max_accelerated_files = 50000
opcache.max_wasted_percentage=15
opcache.memory_consumption = 512
opcache.validate_timestamps = 0
opcache.revalidate_freq = 0
opcache.save_comments = 1
opcache.fast_shutdown=1
opcache.jit = 1255
opcache.jit_buffer_size = 256M

配置Redis作为memcache#

即便官方不推荐,我也将 ‘memcache.local’ ‘memcache.distributed’ ‘memcache.locking’这三个字段全部写成了\OC\Memcache\Redis,不想用APCu和Memcached(

这里有个比较逆天的坑:Nextcloud将redis的端口写死在了6379,即便是在array里自定义port字段也是6379,当时无论如何都连不上redis令人头大最后改成了默认端口才好orz

如果使用nginx,不要缓存#

本身不需要缓存,如果开启后会导致问题,总之不建议开

Collabora & Talk HPB#

Collabora需要能公开访问…不知道是我傻还是Nextcloud&Collabora官方文档不清楚,我在单独配置Collabora时使用容器内网连接,在Nextcloud管理后台中可以连接成功,但无法正常使用,最后单独开了个域名把服务放出来就可以用了…

Talk HPB(高性能后端)因为没需求所以没部署(尝试过但太混乱了遂关闭),如果不想踩坑推荐直接用aio而不是自己单独部署

Finally#

因为重建了不久,所以遇到的坑暂时就这么多,后续会继续补充

如果你想试试这样部署的Nextcloud性能如何,或者需要Collabora,欢迎email我


Nextcloud 各种踩坑记录?
https://flymc.cc/posts/oh-no-nextcloud/
作者
natsuki
发布于
2025-07-06
许可协议
CC BY-NC-SA 4.0