我正在尝试部署 最新的 mediawiki 镜像(1.42.3),但我有一个预 Docker 化且稍微过时的
LocalSettings.php
(我没有运行安装脚本,因为我有一个现有的数据库,尽管我确实运行了maintenance/update.php
)。主要问题是我没有获得样式或脚本,但我可以看到我的文章和其他页面。这是因为,如我的浏览器控制台所示,对 load.php
的请求返回 404
。因此,当它尝试渲染样式表时,它认为 "Load.php"
是一篇文章,并在需要 CSS/JS 的地方传递 HTML。以下是相关设置:
$wgScriptPath = "/wiki";
$wgArticlePath = "/wiki/$1";
$wgServer = "https://example.org";
注意,我使用的是我的实际域名,而不是“example.org”。我已经尝试过
wgScriptPath
的其他值,例如 "/"
和 "/w"
。该图像将 mediawiki 安装放在容器内的 /var/www/html
处。请注意,我预期的 wiki 访问路径位于 https://example.org/wiki
。
我不确定问题是否出在 URL 重写或我的 NGINX 配置上。 在 mediawiki 图像中,apache 据称已预先配置为 URL 重写。这是我的反向代理配置:
location /wiki {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
注意:8080 映射到 80(mediawiki 容器中的 apache 服务器)。
请告诉我你的想法。
我寻求替代解决方案。切换到 mediawiki:stable-fpm 图像并修改我的 nginx 以在
/wiki
位置内包含一个 php 块
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_split_path_info ^/wiki(.+\.php)(.*)$;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
// also including PATH_INFO, SERVER_NAME, SERVER_PROTOCOL
}
您还必须在 Docker 上以绑定方式挂载以下 wiki 目录:
/images/
、/resources/assets/
,还有一些皮肤资源,具体取决于您使用的皮肤。
您还可以扩展图像以使用扩展来构建。
总而言之,这个设置对我来说很有效。然而,这感觉有点hacky,因为mediawiki 期望静态提供几个不同的目录,这与Docker 项目寻求实现的目标相冲突。您可能会丢失随机资源,您所能做的就是为保存这些资源的目录创建一个绑定安装,这意味着您还必须为这些安装提供文件本身。
如果您碰巧知道解决此问题的优雅解决方案,请发布答案。