MediaWiki是维基百科背后的一套开源Wiki引擎,功能成熟、扩展丰富,非常适合用来搭建团队知识库、产品文档站或者个人笔记系统。不过官方文档的安装流程对新手并不算友好,需要自己准备PHP环境、配置数据库、调整Web服务器,任何一步出问题都可能卡半天。而Docker把这一切都封装进了镜像里,拉取镜像、启动容器,几分钟就能得到一个可以访问的Wiki站点。这篇文章就从零开始,完整演示Docker部署MediaWiki的流程,并把实际使用中最容易踩的坑提前说明。

准备工作:为什么推荐docker-compose而不是单容器运行
MediaWiki本身依赖数据库存储内容,如果只用docker run分别启动MediaWiki容器和MySQL容器,容器之间的网络连接、启动顺序、重启策略都要手动维护,时间一长命令忘了就很难管理。docker-compose用一个YAML文件把这些信息全部固化下来,一条docker compose up -d就能把整套服务拉起来,换服务器部署时也只需要拷贝这个文件加数据目录即可,这也是容器化最大的价值所在。
开始之前需要确认服务器环境。Docker版本建议20.10以上,同时安装docker-compose-plugin(新版本Docker已内置compose子命令)。可以用下面的命令验证环境是否就绪:
docker --version docker compose version
两条命令都有正常输出就可以继续。如果使用的是CentOS或Ubuntu等云服务器,记得在安全组里放行80端口,否则浏览器访问不到页面。内存方面建议至少1GB,MediaWiki加MySQL同时运行时,512MB内存的机器很容易触发OOM导致MySQL被杀掉。
编写docker-compose.yml:完整可用的编排文件
下面这份配置文件可以直接使用,包含了MediaWiki、MySQL两个服务,并且做好了数据卷映射,保证容器重建后数据不丢失。文件里注释写得比较细,建议先通读一遍再执行:
version: "3.8"
services:
mediawiki:
image: mediawiki:lts
container_name: mywiki
restart: unless-stopped
ports:
- "8080:80"
volumes:
- ./images:/var/www/html/images
- ./LocalSettings.php:/var/www/html/LocalSettings.php
depends_on:
- db
db:
image: mysql:8.0
container_name: wiki-db
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: rootpass123
MYSQL_DATABASE: wikidb
MYSQL_USER: wikiuser
MYSQL_PASSWORD: wikiuserpass
volumes:
- ./mysql-data:/var/lib/mysql
command: --default-authentication-plugin=mysql_native_password几个细节值得注意。mediawiki:lts是长期支持版本标签,比latest更稳定,生产环境不建议用latest;MySQL 8.0那行command参数很关键,因为新版PHP的MySQL驱动与MySQL 8默认的认证插件不完全兼容,不加这个参数可能会在安装阶段报连接错误。密码部分请务必换成自己的强密码,不要直接用示例值。
在文件所在目录执行docker compose up -d,然后浏览器访问http://服务器IP:8080,会看到MediaWiki的安装向导界面。安装向导中数据库地址填db(这是compose网络里的服务名,容器之间通过它互相访问),库名、用户名密码对应前面环境变量里设置的值。
安装最后一步会提示下载LocalSettings.php,下载后放到compose文件同级目录,再执行一次docker compose up -d让挂载生效,整个安装就完成了。如果安装完成后页面一直要求重新安装,多半就是这个文件没挂载进去。
进阶配置:数据持久化、文件上传与反向代理
默认配置下Wiki并不能上传大文件,图片也只支持常见几种格式。这些限制需要修改LocalSettings.php来解除。在文件末尾追加以下内容:
$wgEnableUploads = true;
$wgMaxUploadSize = 100 * 1024 * 1024; // 上传上限100MB
$wgUploadSizeWarning = 50 * 1024 * 1024;
$wgFileExtensions = array_merge($wgFileExtensions,
['pdf', 'doc', 'docx', 'xls', 'xlsx', 'zip', 'mp4']);
$wgLanguageCode = 'zh-cn'; // 站点语言改为简体中文除了Wiki层的限制,PHP本身也有post体积上限,需要覆盖php.ini。在compose文件里给MediaWiki服务追加一个挂载:./php.ini:/usr/local/etc/php/conf.d/custom.ini,php.ini内容写成upload_max_filesize = 100M和post_max_size = 108M两行即可。两层限制都改掉,大文件才能正常上传。
如果站点要绑定域名并启用HTTPS,通常做法是在前面加一层Nginx反代。Nginx的关键配置是把请求转给8080端口,同时带上X-Forwarded-Proto头,否则MediaWiki在HTTPS环境下可能生成错误的http链接,出现样式丢失或重定向异常。对应的Nginx片段如下:
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}同时在LocalSettings.php中加上$wgServer = "https://你的域名";,让Wiki生成链接时使用正确的协议。
常见问题与避坑指南
忘记管理员密码怎么办。不需要重建容器,进入MediaWiki容器执行维护脚本即可重置:
docker exec -it mywiki php maintenance/changePassword.php --user=Admin --password=新密码
页面或编辑内容出现乱码。一般是数据库字符集问题。建库时确保使用utf8mb4,可以在MySQL容器的environment里加一行command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci,注意已存在的旧库需要手动ALTER转换字符集,改配置只对新表生效。
容器重启后数据丢失。这是没做数据卷挂载的典型症状。检查compose文件中./mysql-data:/var/lib/mysql和./images:/var/www/html/images两条挂载是否存在,LocalSettings.php也必须挂载。升级MediaWiki时不要直接换镜像标签就完事,先备份数据目录和数据库,docker exec wiki-db mysqldump -uroot -p wikidb > backup.sql导出一份再操作。
可视化编辑器装不上。VisualEditor扩展依赖Parsoid服务,新版MediaWiki已内置,但在Docker里需要额外启动一个Parsoid容器并在LocalSettings.php中指向它。新手建议先用WikiEditor工具栏扩展代替,配置简单且能满足大部分编辑需求。
整体来看,Docker部署MediaWiki的核心就是compose文件的编写和数据卷的规划,把这两块理解透,后续无论是升级版本、迁移服务器还是做定期备份,都只是几个命令的事。搭好之后不妨先从写几篇团队规范文档开始,让Wiki真正运转起来。
MediaWiki部署Docker搭建Wiki数据库配置修改时间:2026-09-03 18:13:03