在WSL2部署mediaWiki(一)

最近在探索一个小型团队可用的wiki系统,一开始准备用VuePress,思来想去感觉纯前端的静态系统还是不太适合。于是研究了当下主流选择,wiki.js、confluence、dokuwiki、Gitbook云云。最后的决定是用mediaWiki,主要因为这几点:

  1. 服务器端渲染,可以实现登录鉴权,以及简单的用户管理,保护数据安全

  2. 拥有Navigation popups(或者Page Previews),快速预览词条,在我看来是wiki的灵魂

  3. 界面接受度高,只要用过wikiPedia就不会感觉太陌生,毕竟

    让大家写文档比选个好用的 wiki 要难的多

接下来就是实战了,本来准备在vps上搞,无奈内存太小,放弃。想到要在win10笔电上跑PHP就头大,好在有WSL这个神器,于是正式开始折腾。

a. 最终效果

本着在兼容的前提下尽量安装更新的版本(减少bug),最后完成的程序清单如下

WSL2/ Debian 10(buster)

zsh 5.7.1

Apache 2.4.38 Nginx 1.19.10

PHP 7.4.18

Mariadb 10.5

mediaWiki 1.35.2

WSLWindows Terminal Preview的安装过程略去,最好是照着微软官方文档撸下来。至于为什么装Debian而不用Ubuntu,可能单纯图新鲜吧(后面发现网络资源上和Ubuntu真的没法比,有点后悔了

b. proxy/ zsh/ apt源配置

首先设置root密码,更换apt国内源,安装curl、wget、vim、git。至于Proxy,这里参考ZingLix同学的脚本实现快速切换。

然后安装ZSH,注意chsh -s $(which zsh)不要在root状态下执行。重新登陆后根据说明设定好,再安装oh-my-zsh,之后的操作就要方便很多。注意设置Proxy的alias要在.zshrc里进行添加。

c. 安装nginx/ PHP 7.4

mediaWiki官方建议装PHP 7.4.3之后的版本,并且不建议上8.0。一开始按照网上Ubuntu的教程没有走通,Debian 10下推荐这样:

1
2
3
4
5
6
7
8
sudo apt-cache madison php7.4 #看看7.4版在不在仓库
sudo apt install gnupg2 -y
wget -qO - https://packages.sury.org/php/apt.gpg | sudo apt-key add -
echo "deb https://packages.sury.org/php/ buster main" \\
| sudo tee /etc/apt/sources.list.d/php7.x.list
sudo apt update
sudo apt install php7.4 php7.4-fpm
php -v #检查版本

Nginx的安装类似:

1
2
3
4
5
6
curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add -
echo "deb http://nginx.org/packages/mainline/debian buster nginx" \\
| sudo tee /etc/apt/sources.list.d/nginx.list
sudo apt update
sudo apt install nginx
nginx -v #检查版本

修改nginx的配置,略去不表,最头疼的权限问题来了。

首先top一下观察nginx和php-fpm运行在哪个用户名,最后决定统一在www-data用户组下

1
2
3
4
5
sudo usermod -a -G www-data nginx #给与nginx恰当的用户组
sudo usermod -a -G www-data <user> #同时设置当前用户,也许可以跳过
sudo chown -R <user>:www-data html #设定根目录用户所有权
sudo service nginx restart
service php7.4-fpm restart

然后在根目录建立phpinfo,用来测试php能否跑通。浏览器打开,运气好的话你就能看见熟悉的紫色表格。

d. 安装Mariadb和mediaWiki

参考了官方教程,直接上代码吧

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
apt-cache madison mariadb-server #查看仓库版本
wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup
echo "9f73807c80d14930494021d23abc222c9dd5a1c2731510a2b4d0f835fcc0ae4e mariadb_repo_setup" \\
| sha256sum -c -
sudo chmod +x mariadb_repo_setup
sudo apt install apt-transport-https #下一步命令需要
sudo ./mariadb_repo_setup \\
--mariadb-server-version="mariadb-10.5"
sudo apt update
# 安装数据库及相关的扩展
sudo apt install mariadb-server php7.4-mysql php7.4-xml php7.4-mbstring php7.4-intl php7.4-apcu php7.4-gd
# 启动并初始化数据库
sudo service mariadb start
sudo mysql_secure_installation
# 用root登陆后创建用户
MariaDB [(none)]> CREATE USER IF NOT EXISTS mediawiki IDENTIFIED BY 'abcd';
mysql -u mediawiki -p #测试登录
# 按照官方教程创建数据库并给予新用户权限(略)
# 修改php和nginx配置
upload_max_filesize = 20M # php.ini
client_max_body_size 20M; # nginx

e. 重要Bug

按照忆兰居士的介绍,配置好后看上去一切正常,然而VisualEditor却不工作,一直报错「Error contacting the Parsoid/RESTBase server: http-bad-status」。一番搜索发现是共性问题,测试后发现,和配置里的$wgGroupPermissions['*']['read'] = false;有关。也即这个问题出现在私有wiki中。因为是在WSL上搭建的,所以无法验证是不是跟本地访问有关。最后的解决办法是,在LocationSettings.php最后加上这个

1
2
3
4
if ( $_SERVER['REMOTE_ADDR'] == '127.0.0.1' ) {
$wgGroupPermissions['*']['read'] = true;
$wgGroupPermissions['*']['edit'] = true;
}

并且,只有从nginx换到apache2才起作用。而且这个方案不是对所有人有效,不过暂时是可以使用编辑器了。最后献上默认的菊花Logo,建站完成第一件事就是替换掉它

2021.05.27更新

终于搞明白了apache2、php、nginx三者之间的关系了。似乎装php的时候libapache2-mod-php7.4默认也附带上了,有了这个其实就可以愉快的玩耍php了(debian10 默认安装了apache2)只需要控制apache2的开关就能附带控制php。php7.4-fpm是搭配Nginx用的,不启用也没关系。

mediawiki

参考

我想给团队搭建一个 wiki,大家有什么方便使用的开源 wiki 推荐吗 ? - V2EX

Debian 10 Buster 国内常用镜像源 - 云+社区 - 腾讯云 (tencent.com)

WSL2 中访问宿主机 Windows 的代理 - ZingLix Blog

Installing ZSH · ohmyzsh/ohmyzsh Wiki (github.com)

How to Install Nginx and PHP 7.4 on Debian 10 | Hostup

Upgrade to MariaDB Community Server 10.5 on Debian 10 — MariaDB Enterprise documentation

Installing Apache, MariaDB And PHP In Debian 10 — mercurial | by Sizil Krishna | Medium

Error contacting the Parsoid/RESTBase server: http-bad-status on Extension talk:VisualEditor (mediawiki.org)

MediaWiki简介及安装 - 知乎 (zhihu.com)