关于上传文件夹的权限?

起初,我尝试使用半默认设置运行 Discourse,运行得相当顺利,我可以上传文件以及进行其他操作。

然后我意识到 app.yml 中的路径是 /var/discourse,我将其更新为 /var/www/discourse,停止并销毁了容器,完全删除了之前的文件夹。我再次启动并运行它……但注意到现在我无法再上传文件了。

uploads 文件夹需要什么样的权限?我可以手动进行一些更改,但我想确切地知道是什么以及它是否总体上没问题(启动器在从头开始启动时,不应该负责设置正确的权限吗?)

在日志中,我看到了 nginx 错误,例如

2024/07/12 19:11:23 [crit] 76#76: *160552 stat() “/var/www/discourse/public/uploads/default/original/1X/971c712ff3f1758abc63ac777ad708042cc41ddf.png” failed (13: Permission denied), client: 172.17.0.1, server: _, request: “GET /phorum/uploads/default/original/1X/971c712ff3f1758abc63ac777ad708042cc41ddf.png HTTP/1.0”, host: “myhost.com”, referrer: “https://myhost.com/phorum/admin/site_settings/category/branding”

uploads 的权限如下:

drwxr--r--+ 3 discourse www-data 21 Jul 12 11:47 uploads

这是推荐的。

/var/www/discourse 路径是容器内 discourse 的路径。/var/discourse 是容器外 Discourse_docker 的正常路径。

既然你刚开始,我建议你重新开始,这次不要重命名任何东西。

我猜你没有在你的 app.yml 中更新路径,所以它正在尝试访问不存在的东西。

我的服务器上还有许多其他项目,它们都很好地位于我的 /var/www 文件夹中,所以我希望保持这样 :slight_smile: 我不在乎容器内部是什么样的。

但我确实更新了?在 mounts 中,或者它还应该去哪里?

抱歉,帮不了你。但我非常确定你的 Nginx 不在那里 :wink: Docker 容器的情况也是如此。

抱歉,我没明白你说的是哪个 Nginx?日志来自 Discourse 的 Nginx,我的 SSL 终止 Nginx 在它上面。

这正是我说的。因为您的反向代理 nginx 不在该路径中,所以 docker 容器也不应该在该路径中。

但是容器有自己的生命周期,容器的路径不应该影响其 Nginx 的功能。您还更改了其他设置吗?

我检查了我拥有的内容:

lrwxrwxrwx 1 root root 15 Jul 12 10:10 uploads -> /shared/uploads

并且举例说明 /var/www/discourse/public/uploads/default/original/1X 上的一个图像看起来像这样:

-rw-r--r-- 1 discourse www-data 7100 May 19 2022 08335563eac3a393e60a902d4d38cffdfa6d967d

我知道这么多。否则 Docker 对我来说就是一个巨大的谜 :rofl:

所以基本上是全局可写?这在安全方面不是被认为很糟糕吗?

您真的不想冒着将您的 app.yml 中的秘密暴露给世界的风险。

1 个赞

在 Docker 里面?我不这么认为。而且……我不在乎,因为所有这些都是由 CDCK 计划和完成的,我相信他们知道自己在做什么 :smirking_face:

当然,但我并没有暴露任何东西 :slight_smile:

无论是在里面还是外面,权限都是一样的。而且 uploads 文件夹是挂载的。

好的,什么都没起作用,所以我最终将 uploads 文件夹的权限更改为 755,现在一切正常。重建后,上传本身似乎没问题(从引擎方面来看),但是 nginx 无法读取它们。

我不完全明白你为什么要这么做。将容器放在全球可见的路径中是你的选择,如果你犯了一个小错误,但那是你的选择。但其他一切……为什么?

在 Discourse 前面设置反向代理非常简单,否则你的设置将是一个标准的安装,没有所有这些麻烦。当然,如果你想玩,那是你的爱好,但很快就会有人出来说,你只能获得标准安装的支持,而最大的问题是实际上没有人知道你做了什么。或者为什么。

“这样做”是指什么?我的设置相对标准 :slight_smile: 我正在尝试修复这个问题。

如果您愿意,可以上传一个文件,查看其权限,然后复制它。

也许可以上传几个文件,然后执行

 find uploads -ls |less

您在修复一个您在执行其他操作时遇到的问题,而这是标准操作所需要的。即使使用了反向代理。

这就是为什么您离标准操作如此之远 :smirking_face: 因为有两种选择:

  • 您遇到了一个别人都没有的 bug
  • 您做了一些奇怪的事情

也许这是一个 bug。您可以通过进行一次标准的、安全的(在很多方面)安装,并同时正确连接您的反向代理来确认这一点。因为如果它仍然坏了,我敢打赌问题出在虚拟主机和/或端口上。但如果它工作正常……那么我们就回到了“奇怪”的选项——没有人知道您做了什么。

您看到问题所在了吗?

无论如何——使用反向代理将导致没有支持……这是这里的政策。但其他用户可以并且很可能提供帮助。

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.