我必须设置一个新的 MediaWiki,并且对配置建议越来越不满,因为按照官方文档中概述的配置后,这些建议似乎无法很好地发挥作用。
两台服务器。一个用于应用程序的 nginx 网络服务器。一个用于数据库的 mariadb。在网络服务器上安装并配置 MediaWiki。在数据库服务器上安装并配置 mariadb。
创建一个专属的 mediawiki db 用户,我们称之为mediawiki@nginx
。
创建一个专属的 mediawiki db 管理员用户,我们称之为mediawikiadmin@nginx
。
我创建了一个自签名 CA在数据库服务器上正确强化通信并将提到的数据库用户更改为REQUIRE X509
。要使用 MediaWiki 进行设置,没有提供太多选项。事实上,官方提到的唯一自签名证书选择是使用 LocalSettings 中的 $wgDBservers 对象。很好。所以我的设置如下所示:
$wgDBservers = [
[
'host' => "mariadb",
'dbname' => "mediawiki",
'user' => "mediawiki",
'password' => "pleasedontdothis",
'type' => "mysql",
'flags' => DBO_DEFAULT | DBO_SSL,
'sslKeyPath' => "/path/to/nginx_private.key",
'sslCertPath' => "/path/to/nginx.crt",
'sslCAFile' => "/path/to/mariadb_ca.crt",
'load' => 0,
]
];
$wgDBname = "mediawiki";
$wgDBprefix = "";
$wgDBTableOptions = "ENGINE=InnoDB, DEFAULT CHARSET=binary";
这是根据官方文档这里和这里。请注意,您被迫保留数据库名称的重复配置条目。这在重要笔记在文档中。我个人将这些设置保存在 Web 根目录之外的包含文件中,这对于此问题而言无关紧要。
实际问题
更新。
归根结底就是这样。就实际的 wiki 而言,上述设置运行得很好。事实上,我甚至可以从 CLI 运行。但事情开始让php ./maintenance/run.php update
我很烦恼。
不是在这种状态下工作?
http(s)://media.wiki/mw-config..
使用进行 GUI 更新$wgUpgradeKey
。
会发生什么?- 该死的 mediawiki 软件试图使用默认用户设置连接数据库!
Cannot access the database: :real_connect(): (HY000/1698): Access denied for user 'wikiuser'@'localhost'
。
好吧,干杯,猜猜看,我的数据库在远程服务器上,我告诉过你。我还告诉你要与谁连接,以及如何在你的配置设置中进行连接。你实际上可以很好地运行 wiki...
您可能希望在此处使用来自的用户$wgDBservers
...我怀疑某个地方存在权限问题,但我在 LocalSettings 中所做的更改确实反映在此步骤的错误输出中,因此我暂时排除了这种可能性。LocalSettings 只能由 Web 服务器(显然也是 root)读取。
现在让我们来更有趣一点。我添加了在官方文档:
$wgDBadminuser = "mediawikiadmin";
$wgDBadminpassword = "idareyoutrythis";
此时一切都变得疯狂起来。我使用 CLI 手动测试了此用户与数据库的连接,使用了我设置的所有偏执安全措施,包括仅 TLSv1.3、X509 以及仅从这一个主机。数据库设置正常,此用户实际上可以连接。
发生了什么?
- 现在 GUI 更新突然尝试连接
'mediawikiadmin'@'localhost'
?? - 运行之前相同的 CLI 命令时,udpate 脚本现在突然在 ../includes/libs/rdbms/ServerInfo.php 的第 154 行引发错误:
PHP Fatal error: Uncaught UnexpectedValueException: Duplicate server name "mediawikidb" in ...
此问题已通过从设置中删除管理员用户得到解决! - 我可以强制 GUI 更新使用正确的远程服务器还添加
$wgDBserver
(单数!)变量重新混合,导致配置重复!
即使这样做,仍然出现 的访问被拒绝错误'mediawikiadmin'@'nginx'
,尽管这实际上是正确的用户,并且此数据库管理员用户可以从 MediaWiki 外部完美连接!
请记住,所有这些都是在通常的数据库用户正常运行 Wiki 时发生的……
总结
有人有在职的MediaWiki 配置,包括更新,用适当的分离数据库, 使用TLS用于 SQL 客户端/服务器通信和设置 $wgDBadminuser
?
我也可以删除管理员用户,但是使用此设置我也无法使其工作。(见上文,更新脚本默认为错误的用户设置)