MediaWiki

0 简介

MediaWiki 是 Wikipedia 使用的网站解决方案的开源版,以个人观点来看,Wiki 在这个时代显得不够时尚,且不支持 MarkDown 等新兴的标记语言,另外页面的组织方式采用了自己的一套管理语言,上手需要一定的学习成本。不过经典总归是经典。

MediaWiki 也提供了官方的 Docker image,这就节省了不少安装环境的工作量,接下来就来看看私有 MediaWiki 站点是如何搭建起来的吧。

1 使用 docker 安装 MediaWiki

第一部分中的命令除非特殊说明,都需要 root 权限。

1.1 安装 Docker

第一部自然是要先安装 docker,我们使用官方的 docker 安装脚本来规避不同操作系统安装命令不同的问题,命令运行结束后,docker 就安装好了,如果你的环境中还没有 wget 命令,CentOS 和 RedHat 用 yum install -y wget,Debian 和 Ubuntu 系统用 apt install -y wget 安装。

# wget -qO- https://get.docker.com/ | sh

接下来需修改 docker 的下载源:

# cat /etc/docker/daemon.json
{"registry-mirrors": ["https://registry.docker-cn.com","http://hub.c.163.com"]
}# systemctl restart docker.service

1.2 下载所需的 docker images

MediaWiki 需要 MySQL,且 MediaWiki 镜像中不提供 MySQL,所以 MySQL 镜像也须要下载。

# docker pull wikimedia/mediawiki:1.30.0-wmf4
# docker pull mysql/mysql-server:5.7

1.3 启动 MediaWiki 和 MySQL,并关联

MediaWiki 需要依赖于 MySQL,所以要先启动 MySQL,再启动 MediaWiki,不然启动会失败。而且需要开启 MySQL 的远程连接权限。

# docker run -d --name mediawiki-mysql -e MYSQL_ROOT_PASSWORD=<mysql-root-password> mysql/mysql-server:5.7
# docker exec -it mediawiki-mysql /bin/bash
bash-4.2# mysql -uroot -p<mysql-root-password>
......
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '<mysql-root-password>' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;

然后启动 MediaWiki。

# docker run --name facethink-mediawiki --link mediawiki-mysql:mysql -p 80:80 -e MEDIAWIKI_DB_PASSWORD=<mysql-root-password> -d wikimedia/mediawiki:1.30.0-wmf4

需要注意的是,启动 MediaWiki 时,需要使用 --link 参数来关联之前启动的 MySQL。
另外 -p 将 MediaWiki docker 中的 80 端口和 docker 宿主机上的 80 端口绑定在了一起。在浏览器中访问 docker 宿主机的 IP 就可以访问刚刚建好的 MediaWiki 网站了。不过要保证宿主机上 80 端口没有被其他程序占用,不然 docker run 命令无法执行成功。

下面就是刚刚建好的 wiki 站点页面,过程并不复杂,如果遇到问题,可以流言讨论:

MediaWiki main page

2. MediaWiki 配置

2.1 MediaWiki 的默认管理员

Wiki 是有了,不过这么素的界面,当然是要做些配置,那么就需要管理员权限了,可在安装过程中,我们并不知道这些信息。不过我们可以从 MySQL 中找到。

# docker exec -it mediawiki-mysql -- mysql -uroot -p<mysql-root-password>
......
mysql> use mediawiki;
mysql> select * from user;
mysql> select * from user;
+---------+-----------+----------------+-------------------------------------------------------------------------------------------------------------------------------------------+------------------+-------------------+---------------------+----------------+----------------------------------+--------------------------+----------------------------------+--------------------------+-------------------+----------------+-----------------------+
| user_id | user_name | user_real_name | user_password                                                                                                                             | user_newpassword | user_newpass_time | user_email          | user_touched   | user_token                       | user_email_authenticated | user_email_token                 | user_email_token_expires | user_registration | user_editcount | user_password_expires |
+---------+-----------+----------------+-------------------------------------------------------------------------------------------------------------------------------------------+------------------+-------------------+---------------------+----------------+----------------------------------+--------------------------+----------------------------------+--------------------------+-------------------+----------------+-----------------------+
|       1 | Admin     |                | :pbkdf2:sha512:30000:64:CyuznKx44JuAClGG7avxow==:V9MLp3r/obJIjv+BR2Bs0eCvyWkyDK0eveqEE+9HiUgxvMjzu26kGBz+BcZSmlRssLswzq1j3a+PVuh6AFEaxQ== |                  | NULL              | NULL                | 20180622063649 | 490898f83d4ad9d1ec1c0276a740209b | NULL                     | d3bcbd107e31220c891334c8e1ba0440 | 20180629063644           | 20180622050411    |              0 | NULL
+---------+-----------+----------------+-------------------------------------------------------------------------------------------------------------------------------------------+------------------+-------------------+---------------------+----------------+----------------------------------+--------------------------+----------------------------------+--------------------------+-------------------+----------------+-----------------------+

看以看到默认账户是 Admin,但密码是加密的,好在 root 用户是有权限修改这个密码的,

mysql> UPDATE user SET user_password = MD5( CONCAT( user_id, '-', MD5( 'NEWPASS' ) ) ) WHERE user_id =1;

至此,我们终于可以用管理员的权限登陆了。

login page

2.2 使用 php 变量配置 MediaWiki 站点地址

假设已经为站点申请了域名:wiki.example.com,如何让 wiki 自己能够识别这个域名呢?
这需要登陆到 MediaWiki 的 docker 中去,修改配置文件。MediaWiki 是 php 语言编写的,所以配置文件以 .php 后缀结尾。

$ sudo docker exec -it facethink-mediawiki /bin/bash
root@1a0f3692a08d:/# vi /var/www/html/LocalSettings.php
...
$wgServer = "http://wiki.example.com";
...

php 可以动态读取配置文件,所以无需重启即可生效。

2.3 修改 Logo

默认 logo 是金色的葵花,那么如何更换成自己心仪的图标呢?
首先需要开启 wiki 的文件上传功能:

$ sudo docker exec -it facethink-mediawiki /bin/bash
root@1a0f3692a08d:/# vi /var/www/html/LocalSettings.php
...
$wgEnableUploads = true;
...

然后给 /var/www/html/images 目录添加全部用户开启所有权限。

$ sudo docker exec -it facethink-mediawiki /bin/bash
root@1a0f3692a08d:/# chmod 777 /var/www/html/images

然后在 Upload File 页面上传文件:

upload file page

找到文件所在目录:

# ll /var/www/html/images/thumb/6/64/example.png/120px-example.png

修改 php 配置文件:

$ sudo docker exec -it facethink-mediawiki /bin/bash
root@1a0f3692a08d:/# vi /var/www/html/LocalSettings.php
...
$wgLogo = $wgScriptPath . "images/thumb/6/64/example.png/120px-example.png";
...

好了,刷新一下页面,看看更换 logo 之后效果如何吧。

2.4 邮箱配置

MediaWiki 的邮箱配置很坑,调试不太方便,而且默认配置很容易被判定成垃圾邮件, 或者无效,被拒掉,需要调整发件人的地址来规避。这里用的是 Elastic Email 的邮件服务器系统,这里大家需要自己注册。

配置部分还是需要修改 /var/www/html/LocalSettings.php

# cat  /var/www/html/LocalSettings.php
...
$wgServerName = "example.com";
$wgPasswordSender = "";$wgSMTP = array('host' => 'smtp.elasticemail.com','port' => 2525,'IDHost' => 'wiki.example.com','username' => <user-id>,'password' => <password>,'auth' => true
);
...

同时需要安装 PHP 与邮件发送相关的插件,这里还需要说明一点,MediaWiki 的 docker 虽然能运行 PHP 代码,但实际上并没有安装 PHP,原因是 Apache 能够解析运行 PHP,LAMP 果然是集成度很高。而安装 pear 是要依赖于 PHP 环境的,所以必须要安装 PHP。

# apt install php, php-pear
# pear install mail, net_smtp

2.5 限制用户权限

如果不想开放 Wiki 的公开注册,并且在未登陆时,限制可见的页面的话,还是需要通过对 LocalSettings.php 的定制实现。

# cat /var/www/html/LocalSettings.php
...
# Prevent new user registrations
$wgWhitelistAccount = array("user" => 0, "sysop" => 1, "developer" => 1);
$wgGroupPermissions['*']['createaccount'] = false;
$wgGroupPermissions['*']['read'] = true;
$wgGroupPermissions['*']['edit'] = false;
$wgWhitelistRead = array("Main Page", "Special:Userlogin", "Wikipedia:Help");
...

2.6 添加用户

现在已经关闭了用户注册,那用户只能手动添加了。MediaWiki 也提供添加用户的脚本:

# apt install php-mbstring, php-mysql
# php /usr/src/mediawiki/maintenance/createAndPromote.php --conf=/var/www/html/LocalSettings.php --force <user-id> <password>

3. 参考文档

  • MySQL Docker
  • MediaWiki docker file
  • MediaWiki default admin user and password
  • MediaWiki configuration settings
  • Trouble uploading after installation

使用 Docker 部署 MediaWiki相关推荐

  1. docker 部署 mediawiki

    docker 部署 mediawiki Wiki 是在万维网上开放,且可供多人协同创作的超文本系统.mediawiki 属于比较经典的 wiki 程序,官方还有 docker 镜像,安装部署十分方便. ...

  2. Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数Demo

    Docker 部署SpringBoot项目整合 Redis 镜像做访问计数Demo 最终效果如下 大概就几个步骤 1.安装 Docker CE 2.运行 Redis 镜像 3.Java 环境准备 4. ...

  3. Docker 部署SpringBoot项目不香吗?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:流星007 链接:toutiao.com/i68433912 ...

  4. docker部署springboot_Docker+SpringBoot快速构建和部署应用

    前言 Docker技术发展为当前流行的微服务提供了更加便利的环境,使用SpringBoot+Docker部署和发布应用,其实也是一件比较简单的事情.当前,前提是得有Docker的基础. 构建一个Spr ...

  5. docker初体验:docker部署nginx负载均衡集群

    Docker 是一个用于开发,交付和运行应用程序的开放平台.Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件.今天来为大家演示一下docker部署nginx负载均衡集群 环境 ce ...

  6. docker初体验:docker部署nginx服务

    Docker 是一个用于开发,交付和运行应用程序的开放平台.Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件.今天来为大家演示一下docker部署nginx 环境 centos7 ...

  7. Docker系列 四.Docker部署SpringBoot

    四.Docker部署SpringBoot 环境&工具: 阿里云轻量级服务器.CentOS 7系统.FinalShell(其他连接客户端也可以).IDEA 1. 创建springboot项目 这 ...

  8. Docker部署文档

    Docker部署文档 目录 Docker部署文档 1 一.什么是Docker 3 1.1Docker简介 3 1.2对比传统虚拟机总结 4 1.3Docker通常用于如下场景: 5 1.4基本概念 5 ...

  9. Docker部署Zookeeper集群

    Docker部署Zookeeper集群 官方网站: http://zookeeper.apache.org/ http://zookeeper.apache.org/doc/r3.4.8/zookee ...

  10. 部署go的web应用_使用Docker部署Go Web应用

    为什么需要Docker? 使用docker的主要目标是容器化.也就是为你的应用程序提供一致的环境,而不依赖于它运行的主机. 想象一下你是否也会遇到下面这个场景,你在本地开发了你的应用程序,它很可能有很 ...

最新文章

  1. 原创 | 从智慧交通、智慧安防、智能电网三大应用场景看我国智慧城市建设现状...
  2. Permission is only granted to system app
  3. linux设置用户密码、查看linux用户信息、root用户管理普通用户(passwd命令使用)
  4. [源码和文档分享]C语言实现的基于Huffman哈夫曼编码的数据压缩与解压缩
  5. 面试题:实现call、apply、bind
  6. heap python_数据结构-堆(Heap) Python实现
  7. 使用sp_monitor 查看SQL Server统计信息
  8. 卫星轨道的估计问题(Matlab)(三):标准重采样粒子滤波(SIR)对新问题的尝试
  9. Unity 序列化的问题
  10. informix 如何下载
  11. 学习Samba基础命令详解之大话西游01
  12. 3K热敏电阻测温程序
  13. 苹果27寸一体机拆机图解_21.5/27寸新iMac完全拆解:维修要你命
  14. 多测师肖sir_高级金牌讲师_项目介绍之保险项目的案例
  15. 算法导论 2-3 霍纳(Horner)规则的正确性
  16. mysql 在线语法检查工具,符合多个数据库的在线SQL语法检查器
  17. H5页面拉起第三方App
  18. react-native 报错Cannot add a child that doesn't have a YogaNode to a parent without a measur
  19. openwrt wifi 出现missing ACKs和deauthenticated due to inactivity 频繁掉线问题解决方案
  20. LeetCode221117_125、904. 水果成篮

热门文章

  1. python构造自定义数据包_Python发送网络封包,自定义封包结构与内容并发出去
  2. MAE:视觉自监督2021(原理+代码)
  3. uniapp h5微信分享
  4. 什么是世界观、人生观、价值观?
  5. django+djangorestframework开发代码编辑器
  6. 网站百度竞价有展现,点击无咨询原因
  7. C++二进制数转十进制
  8. Win系统 - 如何查看电脑有几个内存条插槽?
  9. 无法启动程序,.dll不是有效的Win32应用程序
  10. 如何把网站从万网转到百度的服务器,百度域名服务上线“域名转入”功能 附转入教程...