仅让我的MediaWiki在本地域上运行(在Synology nas上作为容器运行)。现在,我要配置,以便只有域用户可以访问Wiki并自动登录。这仅是通过页面编辑跟踪用户名的目的。我的本地域是abc.local
,域控制器是Windows Server 2008 R2。
我已经完成以下操作:
1)已安装的扩展名LDAPProvider
,LDAPAuthentication2
和PluggableAuth
。
2)在我的LocalSettings.php
的底部添加了以下内容。
wfLoadExtension( 'PluggableAuth' );
$wgPluggableAuth_EnabledAutoLogin = true;
wfLoadExtension( 'LDAPAuthentication2' );
wfLoadExtension( 'LDAPProvider' );
$LDAPProviderDomainConfigProvider = function () {
$config = [
'LDAP' => [
'connection' => [
"server" => "abc.local",
"user" => "cn=Administrator,dc=abc,dc=local",
"pass" => 'passwordhere',
"options" => [
"LDAP_OPT_DEREF" => 1
],
"basedn" => "dc=abc,dc=local",
"groupbasedn" => "dc=abc,dc=local",
"userbasedn" => "dc=abc,dc=local",
"searchstring" => "uid=USER-NAME,dc=abc,dc=local",
"emailattribute" => "mail"
"usernameattribute" => "uid",
"realnameattribute" => "cn",
"searchattribute" => "uid",
]
]
];
return new \MediaWiki\Extension\LDAPProvider\DomainConfigProvider\InlinePHPArray( $config );
};
插件正在运行:
当我进入主页时,我不会自动登录,因此我尝试使用域凭据登录并获得以下信息:
我在这里很绿,不知道如何配置。有什么想法吗?
谢谢,鲁斯
EDIT:添加$wgShowExceptionDetails = true;
后,我收到以下错误消息:
EDIT2:从phpinfo()剪断
EDIT3:从新容器开始,尝试使php-ldap扩展正常工作并解决ldap_connect()
错误。这是我最后一次尝试时采取的步骤:
参考:https://wiki.chairat.me/books/docker/page/how-to-setup-mediawiki-with-docker
从控制面板终端和SNMP启用SSH服务,然后打开到Synology框的SSH连接(使用Putty)。以管理员身份登录。
运行以下命令,根据最新的mediawiki映像创建一个名为mediawiki的新Docker容器:
sudo docker容器运行-d --name mediawiki -p 8080:80 mediawiki
运行以下命令,根据最新的MySQL映像创建一个名为mediakwiki-mysql的新Docker容器。替换为所需的MySQL根密码:
sudo docker容器运行-d --name mediawiki-mysql -v mediawiki-mysql:/ var / lib / mysql -e MYSQL_ROOT_PASSWORD = mysql
运行以下3个命令以创建docker网络,然后将2个映像绑定到其中:
sudo docker网络创建mediawiki
sudo docker网络连接mediawiki mediawiki
sudo docker网络连接mediawiki mediawiki-mysql
接下来,在mediawiki-mysql容器中打开bash终端,并在必要时将根插件设置为mysql_native_password:
mysql -uroot -p(这将打开一个mysql提示符,其中是您在3.中设置的内容,没有<>)
SELECT user,authentication_string,plugin,host from mysql.user; (列出用户属性)
ALTER USER'root'@'localhost'用mysql_native_password标识,并用'password'; (密码也是上面的设置)
用ALTER USER'root'@'%'用mysql_native_password标识'password';
在mediawiki-mysql容器中添加卷映射,以便您可以向容器中复制文件或从中复制文件,以及可以通过Synology上的File Station访问的共享。
如果容器正在运行,请停止它。
右键单击并选择编辑,然后单击音量。
单击“添加文件夹”,然后选择要使用的共享卷。对于“挂载路径”,请输入/ var / lib / mysql
启动容器。
参考:https://computingforgeeks.com/how-to-install-php-7-3-on-debian-9-debian-8/
如果要启用ldap身份验证(例如,如果您的域具有活动目录等),则将php-ldap扩展名添加到mediawiki容器中。在mediawiki容器中打开bash终端:
php -m(这将列出所有活动的PHP模块-如果尚未安装ldap,则不会列出)
php -v(这将显示您正在运行的PHP版本)
apt-get更新
apt-get upgrade -y
apt-get install libldb-dev libldap2-dev
cd / usr / local / bin
docker-php-ext-install ldap(这需要一段时间)
php -m(在列表中显示ldap)
在继续使用Ldap扩展程序之前先设置MediaWiki。
在浏览器中打开“ http://XXX.XXX.XXX.XXX:8080/”并进行配置。对于mysql,使用“ mediawiki-mysql”代替“ localhost”。将LocalSettings.php放入/ usr / www / html文件夹。
安装支持LdapAuthentication2所需的LDAPProvider mediawiki扩展
wget“ https://extdist.wmflabs.org/dist/extensions/LDAPProvider-master-04dc101.tar.gz”
tar -xzf LDAPProvider-master-04dc101.tar.gz -C / var / www / html / extensions
rm LDAPProvider-master-04dc101.tar.gz
添加“ wfLoadExtension('LDAPProvider');”到LocalSettings.php文件。
运行“ php maintenance / update.php”以创建所需的数据库(需要几秒钟)。
wget“ https://extdist.wmflabs.org/dist/extensions/PluggableAuth-REL1_34-17fb1ea.tar.gz”
tar -xzf PluggableAuth-REL1_34-17fb1ea.tar.gz -C / var / www / html / extensions
rm PluggableAuth-REL1_34-17fb1ea.tar.gz
添加“ wfLoadExtension('PluggableAuth');”到LocalSettings.php文件。
wget“ https://extdist.wmflabs.org/dist/extensions/LDAPAuthentication2-master-cb07184.tar.gz”
tar -xzf LDAPAuthentication2-master-cb07184.tar.gz -C / var / www / html / extensions
rm LDAPAuthentication2-master-cb07184.tar.gz
添加“ wfLoadExtension('LDAPAuthentication2');”到LocalSettings.php文件。
复制具有LDAP配置的LocalSettings.php文件(上面我的原始问题中的项目2)。
基于评论对话和上面的其他分步列表,这里有一些想法:
如果要启用ldap身份验证(例如,如果您的域具有活动目录等,则将php-ldap扩展名添加到mediawiki容器中)。在mediawiki容器中打开bash终端:
php -m(这将列出所有活动的PHP模块-如果尚未安装ldap,则不会列出)
php -v(这将显示您正在运行的PHP版本)
apt-get更新
apt-get upgrade -y
apt-get install libldb-dev libldap2-dev
cd / usr / local / bin
docker-php-ext-install ldap(这需要一段时间)
php -m(在列表中显示ldap)
我强烈怀疑这是行之有效的,即使它会行得通,但我怀疑它是否能够以可持续的方式工作。该“解决方案”的问题是:
可以解决您的问题的解决方案是,根据mediawiki:最新的docker映像创建自己的映像。然后,您可以在其中添加所有必需的库,并使用该映像代替基本映像。为此,您需要执行以下步骤:
Dockerfile
:此文件是Docker知道如何构建映像的一组说明。# inherit from the official mediawiki image
FROM mediawiki:latest
# Install the required libraries for adding the ldap extension for php
RUN apt-get update && \
apt-get install -y libldb-dev libldap2-dev && \
rm -rf /var/lib/apt/lists/*
RUN docker-php-ext-install ldap
docker build -t mediawiki:local .
-t
为生成的图像创建一个标签,以便您可以使用这个有意义的名称代替图像的校验和。但是,您可以选择所需的名称和标签。docker run -v /path/to/LocalSettings.php:/var/www/html/LocalSettings.php -p 8080:80 --rm=true -d mediawiki:local
。该命令可能与您使用的命令不同,重要的一点是新映像名称,即mediawiki:local
或之前在构建步骤中使用的任何标记。生成的容器已安装ldap插件,也可以从处理传入请求的php守护程序中使用它。
对后续设置的一些说明:如果我对它的理解是正确的,那么您还可以通过在容器中使用外壳并降级扩展来在容器本身中安装扩展。这也不是最好的主意,因为正如我已经说过的那样,当您重新创建容器时(应该总是可能的,并且您不必考虑这一点),扩展也将被删除。您应该将扩展目录作为一个卷注入到容器中,并将扩展保存在主机磁盘上。或者,您也可以在Dockerfile
中安装MediaWiki扩展,同时也要安装ldap php扩展。