因为最近布置了独立的域名,所着手将各种服务迁移至二级域名下。
在迁移 API 的时候看到的之前的 API 手册使用了 ShowDoc,因为 ShowDoc 比较简单,没有主题之类的东西,也不是特别好看(x
于是想着要不要换成 Mediawiki。突然想到之前说挖坑要写 Mediawiki 安装的来着,就换吧 XD

准备材料

Mediawiki 加载的东西略多,对性能整体要求略高,在我上次布置的经验下,至少需要1核2G加上5M的带宽才能得到比较好的体验,在确定了服务器之后,我们需要准备一些文件:

  • Mediawiki 本体压缩包(下载地址):Mediawiki 可以通过 git
    直接获取本体,但是 git 安装方式会缺少部分基础插件,所以我们选择下载完整包。
    再准备好文件后,我们需要对服务器环境进行布置,此处不详细介绍,你需要准备:
  • PHP 4.7.3 及以上版本,同时启用 proc_open() 函数。
  • MySQL 5.5.8 及以上版本,创建空库和访问账户,授予库权限。

初始化 Mediawiki

其实 Mediawiki 的安装方式和其他 PHP 软件包一样简单,解压进 Web 目录然后直接访问根目录。

解压并访问目录

将 Mediawiki 解压至 Web 目录并直接访问,如果没有问题将会看见如下界面,提示缺失配置文件需要初始化:
Mediawiki Install Index.png
接下来就可以根据引导进行基础的配置,第一页 Mediawiki 将进行环境自检,提示“环境检查已经完成。您可以安装MediaWiki。”后继续安装。

配置数据库

接下来是配置数据库信息,由于 Mediawiki 不会自行创建库,所以我在准备列表处已经要求自行初始化完成数据库,Mediawiki 支持大部分常见的数据库,我使用了 MySQL。
Mediawiki Installer SQL.png

Mediawiki 设置

接下来进行 Mediawiki 的基础信息设置以及管理员账户创建。
Snipaste_2021-04-26_16-18-55.png
接下来是对 wiki 自带插件的配置,如果你不清楚这些插件是啥,可以上 这个界面 检索查看。
Snipaste_2021-04-26_16-24-51.png

保存配置

在完成上面的所有步骤后 Mediawiki 会进行配置、启用插件、初始化数据库等操作,在完成操作后继续会下载 LocalSettings.php,这是 wiki 的配置文件,请下载并保存这个文件,在离开配置界面后将无法下载。
最后,将下载的 LocalSettings.php 上传放置进 wiki 的根目录内就完成配置了。关于这个文件的详细内容解释,见后文附录。
访问网页根目录,可以看到 wiki 已经完成了初始化。
Mediawiki Index.png


伪静态

在布置完成站点之后,我们首先想到的就是伪静态。其实 Mediawiki 有 相关界面 介绍了伪静态,可以自行取用。
因为我使用的 IIS8,所以以下是 IIS8 相关的内容。

Mediawiki 页面结构

Mediawiki 官方推荐的结构是 wiki 本体位于/wiki下,而 api、load 等功能界面位于/下,而上面官方给的方法都是以此结构布置的。
我更偏向于将这些放一起,可以直接在根目录下访问 wiki 主体,所以我们按照 以下指引 进行修改:

web.config

修改 web.config 文件,添加文档提供的 URL 重写规则

<rewrite>
    <outboundRules>
        <preConditions>
            <preCondition name="ResponseIsHtml1">
                <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
            </preCondition>
        </preConditions>
    </outboundRules>
    <rules>
        <rule name="RewriteUserFriendlyURL1" stopProcessing="true">
            <match url="^wiki/([^/]+/?[^/]*/?[^/]*)/?$" />
            <conditions>
                <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
            </conditions>
            <action type="Rewrite" url="w/index.php?title={R:1}" logRewrittenUrl="true" />
        </rule>
    </rules>
</rewrite>

我们可以看到 14 行和 19 行位置,将 wiki/w/ 去除,改为如下:

<rewrite>
    <outboundRules>
        <preConditions>
            <preCondition name="ResponseIsHtml1">
                <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
            </preCondition>
        </preConditions>
    </outboundRules>
    <rules>
        <rule name="RewriteUserFriendlyURL1" stopProcessing="true">
            <match url="^([^/]+/?[^/]*/?[^/]*)/?$" />
            <conditions>
                <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
            </conditions>
            <action type="Rewrite" url="index.php?title={R:1}" logRewrittenUrl="true" />
        </rule>
    </rules>
</rewrite>

LocalSettings.php

接下来修改 LocalSettings.php 文件告诉 Mediawiki Scrpit 位置和主页位置:

$wgScriptPath = "";
$wgArticlePath = "/$1";
$wgUsePathInfo = true;

重新进入根目录,伪静态就完成了。

URL RW.png


好!到这儿我们已经完成了对 Mediawiki 的配置,简称能用了。
接下来是对 MediaWiki 的各种功能的介绍。

LocalSettings.php

以下是目前为止生成和修改的 LocalSettings.php 部分内容的内容和相关解释:

## 站点名和主命名空间
$wgSitename = "SS WIKI";
$wgMetaNamespace = "SS_WIKI";

## URL 设置
$wgScriptPath = "";
$wgArticlePath = "/$1";
$wgUsePathInfo = true;

## 域名
$wgServer = "https://wiki.stapxs.cn";

## 资源地址
$wgResourceBasePath = $wgScriptPath;

## 站点图标地址
$wgLogos = [ '1x' => "$wgResourceBasePath/resources/assets/wiki.png" ];

## 邮箱服务设置(见下文)
$wgEnableEmail = true;
$wgEnableUserEmail = true; # UPO
$wgEmergencyContact = "apache@a.invalid";
$wgPasswordSender = "apache@a.invalid";
$wgEnotifUserTalk = false; # UPO
$wgEnotifWatchlist = false; # UPO
$wgEmailAuthentication = true;


## 数据库设置
$wgDBtype = "***";
$wgDBserver = "***";
$wgDBname = "***";
$wgDBuser = "***";
$wgDBpassword = "***";
$wgDBprefix = "***";
$wgDBTableOptions = "ENGINE=InnoDB, DEFAULT CHARSET=binary";
$wgSharedTables[] = "actor";
$wgMainCacheType = CACHE_NONE;
$wgMemCachedServers = [];

## 其他辅助功能设置
$wgEnableUploads = true;
$wgUseInstantCommons = false;
$wgPingback = true;
$wgShellLocale = "C.UTF-8";
$wgLanguageCode = "zh-cn";
$wgGroupPermissions['*']['createaccount'] = false;
$wgGroupPermissions['*']['edit'] = false;

## 重置 key
$wgSecretKey = "***";

## 输出完整日志
$wgAuthenticationTokenVersion = "1";

## 更新 key
$wgUpgradeKey = "***";

## 版权声明
$wgRightsPage = "";
$wgRightsUrl = "https://www.gnu.org/copyleft/fdl.html";
$wgRightsText = "GNU自由文档许可证1.3或更高版本";
$wgRightsIcon = "$wgResourceBasePath/resources/assets/licenses/gnu-fdl.png";
$wgDiff3 = "";

## 皮肤设置
$wgDefaultSkin = "vector";

wfLoadSkin( 'MonoBook' );
wfLoadSkin( 'Timeless' );
wfLoadSkin( 'Vector' );

## 插件设置
wfLoadExtension( 'CodeEditor' );
wfLoadExtension( 'ImageMap' );
wfLoadExtension( 'InputBox' );
wfLoadExtension( 'Interwiki' );
wfLoadExtension( 'OATHAuth' );
wfLoadExtension( 'PageImages' );
wfLoadExtension( 'PdfHandler' );
wfLoadExtension( 'SyntaxHighlight_GeSHi' );
wfLoadExtension( 'TemplateData' );
wfLoadExtension( 'TextExtracts' );
wfLoadExtension( 'VisualEditor' );
wfLoadExtension( 'WikiEditor' );

美化

按照个人习惯,在布置好站点之后就会开始进行美化(x

皮肤

Mediawiki 自带皮肤系统,在上一节 LocalSettings.php 解释中也提到了皮肤相关设置,装载皮肤的方式也很简单。

解压皮肤

寻找一个好看的皮肤,比如 这个 ,将它解压放入 skins 文件夹。
Skins

修改设置

LocalSettings.php 文件内添加加载语句

wfLoadSkin( '文件夹名' );

如果需要默认加载这个皮肤,可以修改下面的设置

$wgDefaultSkin = "皮肤名";

不过需要注意的是,用户依旧可以在用户设置内改变他自己想要使用的皮肤,如果你只想保留这个皮肤请顺手注释掉其他几个默认皮肤的加载设置。

(未完待续)