foozmeat
(James Moore)
1
今天我尝试添加第二台服务器来托管我们的一个 Discourse 实例。该容器配置为使用外部 Redis、PostgreSQL 和存储服务器,仅作为 Web 应用运行。到目前为止,我们一直将单服务器站点部署在 HAProxy 后面,运行正常。当在 HAProxy 后面运行两台服务器时,我们观察到 Nginx 返回大量针对 JS 文件的 404 错误。从 HAProxy 中移除任意一台服务器后,问题即消失。这些返回 404 的文件 URL 看起来完全相同,因此我百思不得其解,为何两台服务器都无法提供这些文件。
开发者设置中没有进行任何覆盖。我们运行的是 2.4.3 稳定版。
1 个赞
Falco
(Falco)
3
如果您运行了多个 Web 容器,您需要某种机制来确保它们都能访问静态文件。
最简单的方案是 使用对象存储处理上传(S3 克隆)
4 个赞
foozmeat
(James Moore)
4
@Falco 您好,感谢您的回复。这两个服务器通过 NFS 使用共享存储。在我的容器配置中,我有以下内容:
volumes:
- volume:
host: {{ discourse_nas_path }}/data
guest: /shared
- volume:
host: {{ discourse_nas_path }}/logs
guest: /var/log
不过,每个容器都存储由 assets:precompile 步骤生成的资产的独立副本。是否必须共享预编译后的资产?
1 个赞
schleifer
(Andrew Schleifer)
6
除了添加和移除 Haproxy 后端之外,你还做了哪些测试?
你的 Haproxy 配置是随机选择后端还是保持会话亲和性?404 错误是由 Haproxy 记录的吗?是由 nginx 记录的吗?是第一个还是第二个后端报错?你的网站是否需要登录?你能否绕过代理服务器直接连接 nginx 来复现这些错误?请求的文件在磁盘上是否存在?是所有 JS 文件都报错,还是只有特定的几个?
3 个赞
foozmeat
(James Moore)
7
感谢 @Falco 的提示,我在容器配置中添加了以下内容,现在一切按预期运行:
- volume:
host: {{ discourse_nas_path }}/assets
guest: /var/www/discourse/public/assets
3 个赞
system
(system)
关闭
8
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.