keithkhl
(Keith Lee)
1
从上面的链接中,我可以看到图片和附件存储在 Discourse 安装的更深层的共享文件夹中,而不是在 docker 内部。鉴于我想使用从我的第二个存储链接的图片文件夹,我将其 NFS 挂载到其他服务器。并且,在辅助服务器上,我想运行 Discourse 的 docker 容器,作为负载均衡/故障转移的一种方式……,并且希望使用来自 NFS 挂载的同一个图片文件夹。以防万一,我已经从另一个网络服务器获取了数据库。
我刚刚测试了设置,但结果不理想。我将所有图片文件从 /var/discourse/shared/standalone/uploads 复制到 /var/www/image/uploads
然后,
- 创建到 NFS 挂载的图片文件夹的符号链接
- chmod & chown w/ www-data:www-data 和 /uploads 文件夹的 755
我可以在图片文件夹原生挂载的主服务器上看到图片,但在 NFS 挂载的辅助服务器上却看不到。图片丢失,容器大小也一样。
此外,即使在主服务器上,我也能看到图片,但无法再下载它们。
我猜是因为文件权限问题。想知道理想的设置是什么。
不确定是原始设置还是由于几十次重建,但默认文件夹中的图片是 755/644(文件夹/文件),并且在我的服务器上是 main_id:www-data。我也采用了同样的策略,但没有成功。可能是符号链接或 NFS 特定的问题,但我无法再追踪了。
keithkhl
(Keith Lee)
3
@NateDhaliwal 谢谢你的建议。
我很久以前就不再使用 S3 等 CDN 服务了。我只使用 Cloudflare,但它实际上并不存储图片。
如果我没记错的话,你指的是本地化 CDN,比如简单的 Nginx 域名映射,并使用 Discourse 的 CDN 扩展,就像 为你的 Discourse 启用 CDN - 文档 / 自托管 - Discourse Meta 中那样。
如果没有其他解决方案,我将这样做。我以为文件权限是更简单的解决方案。
1 个赞
pfaffman
(Jay Pfaffman)
4
与其使用符号链接,不如将 Docker 挂载指向你的 NFS 挂载点。
但是,在容器内部、容器外部以及远程 NFS 服务器上同步权限可能确实很棘手。
1 个赞
keithkhl
(Keith Lee)
5
这是我最初的尝试。在 Docker 内部,我发现我的文件系统有点混乱,就像我之前发现的那样。在看到 /default/ 之前,它嵌套在 /uploads/uploads/uploads 中。不确定到底发生了什么,但我将内部的所有文件复制到我的镜像挂载中,并将挂载文件夹添加为卷。
在这里,情况与符号链接没有太大差别。文件权限确实造成了同样的问题。在理解文件实际上存储在 Docker 容器外部后,我认为符号链接可以是一个更简单的解决方案。
对于两者,我几乎肯定这是文件权限问题,但自定义 CDN 只需 Nginx 服务器块听起来比 Docker 卷简单得多,只要符号链接不起作用。
pfaffman
(Jay Pfaffman)
6
我很确定使用符号链接不会有什么好处。一个问题是很难让符号链接在容器内外都保持一致,我猜你遇到的嵌套上传问题就与此有关。我见过有人建议不要使用符号链接,我认为这就是原因。
keithkhl
(Keith Lee)
7
Discourse 是否支持基于自定义 CNAME 的 CDN?我记得在管理员设置中看到过 S3 配置,并且在元帖子中看到过 Fastly 的配置,但不太记得自定义 CDN 的配置了。
keithkhl
(Keith Lee)
8
找到了帖子。看来我需要设置一个自托管的 S3 兼容 CDN 版本。仅仅 Nginx 图片服务器是不够的。