使用 Docker 部署 MediaWiki

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MediaWiki0 简介MediaWiki 是 Wikipedia 使用的网站解决方案的开源版,以个人观点来看,Wiki 在这个时代显得不够时尚,且不支持 MarkDown 等新兴的标记语言,另外页面的组织方式采用了自己的一套管理语言,上手需要一定的学习成本。
img_a80ef2d9f964c94fff6885c646e0c7da.png
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 站点页面,过程并不复杂,如果遇到问题,可以流言讨论:

img_b462fba1d5c490f97447b93535d215a6.png
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;

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

img_8491905554e1feab2536816a0bf8968e.png
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 页面上传文件:

img_f18d78d380147cc80a62abd50952bb15.png
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数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
19天前
|
Kubernetes Java Docker
利用(K8S)配合Docker部署jar包
通过Docker打包并部署到Kubernetes(K8S)集群的过程。首先,通过SpringBoot生成jar包,接着在K8S环境中创建并编辑Dockerfile文件。随后构建Docker镜像,并将其推送到镜像仓库。最后,通过一系列kubectl命令(如get pods、get svc、logs等),展示了如何在K8S中管理应用,包括查看Pod状态、服务信息、Pod日志以及重启Pod等操作。
79 2
|
22天前
|
NoSQL 关系型数据库 MySQL
docker部署jumpserver及入门
docker部署jumpserver及入门
|
25天前
|
Kubernetes Devops 持续交付
DevOps实践:使用Docker和Kubernetes实现持续集成和部署网络安全的守护盾:加密技术与安全意识的重要性
【8月更文挑战第27天】本文将引导读者理解并应用DevOps的核心理念,通过Docker和Kubernetes的实战案例,深入探讨如何在现代软件开发中实现自动化的持续集成和部署。文章不仅提供理论知识,还结合真实示例,旨在帮助开发者提升效率,优化工作流程。
|
8天前
|
人工智能 API 数据库
FastGPT一站式解决方案[1-部署篇]:轻松实现RAG-智能问答系统(含sealos云端部署、docker部署、OneAPI&Xinference模型接入)
【9月更文挑战第5天】 FastGPT一站式解决方案[1-部署篇]:轻松实现RAG-智能问答系统(含sealos云端部署、docker部署、OneAPI&Xinference模型接入)
 FastGPT一站式解决方案[1-部署篇]:轻松实现RAG-智能问答系统(含sealos云端部署、docker部署、OneAPI&Xinference模型接入)
|
18天前
|
Docker 容器
Docker自建仓库之Harbor高可用部署实战篇
关于如何部署Harbor高可用性的实战教程,涵盖了从单机部署到镜像仓库同步的详细步骤。
58 15
Docker自建仓库之Harbor高可用部署实战篇
|
18天前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
17天前
|
虚拟化 Docker Windows
window 10专业版部署docker环境
本文介绍了如何在Windows 10专业版上部署Docker环境,包括安装步骤、配置镜像加速以及可能遇到的错误处理。
41 2
window 10专业版部署docker环境
|
6天前
|
Devops jenkins 持续交付
DevOps实践:构建和部署一个Docker化的应用
【9月更文挑战第14天】在当今快节奏的软件开发领域,DevOps已经成为提升效率、加速交付的关键。本文将引导你理解DevOps的核心概念,并通过一个实际的示例—构建和部署一个Docker化的应用—来深入探讨其实践方法。我们将从简单的应用出发,逐步实现Docker容器化,并最终通过CI/CD流水线自动化部署过程。这不仅是对DevOps流程的一次实操演练,也是对现代软件开发理念的一次深刻体验。
|
18天前
|
存储 关系型数据库 MySQL
使用Docker快速部署Mysql服务器
本文介绍了如何使用Docker快速部署MySQL服务器,包括下载官方MySQL镜像、启动容器、设置密码、连接MySQL服务器以及注意事项。
101 18
|
18天前
|
存储 测试技术 数据安全/隐私保护
Docker自建仓库之Harbor部署实战
关于如何部署和使用Harbor作为Docker企业级私有镜像仓库的详细教程。
37 12