使用 Docker 部署 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 站点页面,过程并不复杂,如果遇到问题,可以流言讨论:
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;
至此,我们终于可以用管理员的权限登陆了。
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 页面上传文件:
找到文件所在目录:
# 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相关推荐
- docker 部署 mediawiki
docker 部署 mediawiki Wiki 是在万维网上开放,且可供多人协同创作的超文本系统.mediawiki 属于比较经典的 wiki 程序,官方还有 docker 镜像,安装部署十分方便. ...
- Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数Demo
Docker 部署SpringBoot项目整合 Redis 镜像做访问计数Demo 最终效果如下 大概就几个步骤 1.安装 Docker CE 2.运行 Redis 镜像 3.Java 环境准备 4. ...
- Docker 部署SpringBoot项目不香吗?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:流星007 链接:toutiao.com/i68433912 ...
- docker部署springboot_Docker+SpringBoot快速构建和部署应用
前言 Docker技术发展为当前流行的微服务提供了更加便利的环境,使用SpringBoot+Docker部署和发布应用,其实也是一件比较简单的事情.当前,前提是得有Docker的基础. 构建一个Spr ...
- docker初体验:docker部署nginx负载均衡集群
Docker 是一个用于开发,交付和运行应用程序的开放平台.Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件.今天来为大家演示一下docker部署nginx负载均衡集群 环境 ce ...
- docker初体验:docker部署nginx服务
Docker 是一个用于开发,交付和运行应用程序的开放平台.Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件.今天来为大家演示一下docker部署nginx 环境 centos7 ...
- Docker系列 四.Docker部署SpringBoot
四.Docker部署SpringBoot 环境&工具: 阿里云轻量级服务器.CentOS 7系统.FinalShell(其他连接客户端也可以).IDEA 1. 创建springboot项目 这 ...
- Docker部署文档
Docker部署文档 目录 Docker部署文档 1 一.什么是Docker 3 1.1Docker简介 3 1.2对比传统虚拟机总结 4 1.3Docker通常用于如下场景: 5 1.4基本概念 5 ...
- Docker部署Zookeeper集群
Docker部署Zookeeper集群 官方网站: http://zookeeper.apache.org/ http://zookeeper.apache.org/doc/r3.4.8/zookee ...
- 部署go的web应用_使用Docker部署Go Web应用
为什么需要Docker? 使用docker的主要目标是容器化.也就是为你的应用程序提供一致的环境,而不依赖于它运行的主机. 想象一下你是否也会遇到下面这个场景,你在本地开发了你的应用程序,它很可能有很 ...
最新文章
- 原创 | 从智慧交通、智慧安防、智能电网三大应用场景看我国智慧城市建设现状...
- Permission is only granted to system app
- linux设置用户密码、查看linux用户信息、root用户管理普通用户(passwd命令使用)
- [源码和文档分享]C语言实现的基于Huffman哈夫曼编码的数据压缩与解压缩
- 面试题:实现call、apply、bind
- heap python_数据结构-堆(Heap) Python实现
- 使用sp_monitor 查看SQL Server统计信息
- 卫星轨道的估计问题(Matlab)(三):标准重采样粒子滤波(SIR)对新问题的尝试
- Unity 序列化的问题
- informix 如何下载
- 学习Samba基础命令详解之大话西游01
- 3K热敏电阻测温程序
- 苹果27寸一体机拆机图解_21.5/27寸新iMac完全拆解:维修要你命
- 多测师肖sir_高级金牌讲师_项目介绍之保险项目的案例
- 算法导论 2-3 霍纳(Horner)规则的正确性
- mysql 在线语法检查工具,符合多个数据库的在线SQL语法检查器
- H5页面拉起第三方App
- react-native 报错Cannot add a child that doesn't have a YogaNode to a parent without a measur
- openwrt wifi 出现missing ACKs和deauthenticated due to inactivity 频繁掉线问题解决方案
- LeetCode221117_125、904. 水果成篮
热门文章
- python构造自定义数据包_Python发送网络封包,自定义封包结构与内容并发出去
- MAE:视觉自监督2021(原理+代码)
- uniapp h5微信分享
- 什么是世界观、人生观、价值观?
- django+djangorestframework开发代码编辑器
- 网站百度竞价有展现,点击无咨询原因
- C++二进制数转十进制
- Win系统 - 如何查看电脑有几个内存条插槽?
- 无法启动程序,.dll不是有效的Win32应用程序
- 如何把网站从万网转到百度的服务器,百度域名服务上线“域名转入”功能 附转入教程...