在MediaWiki上使用官方docker镜像时如何最好地添加扩展名?

Str*_*ine 6 mediawiki docker mediawiki-extensions docker-compose

我们正在使用正式的MediaWiki Docker映像,并希望能够添加其他MediaWiki扩展。

问题:

  1. 如果我们当前正在使用下面的docker-compose文件,并且我们在主机上装载了卷,那么建议的下一步是什么?是否要构建一个包含官方图像的新图像?在修改后的新图像的某处是否存在添加MediaWiki扩展的示例?
  2. 或者我们是否可以仅在当前docker-compose的主机上安装扩展卷,并根据需要进行调整LocalSettings.php

docker网站上的链接是指添加PHP扩展名和库,但是如果要添加MediaWiki特定的扩展名是相同的答案,这对我来说还是不清楚的,因为它确实说了“ PHP扩展名”。还是该文档页面实际上应该说“ MediaWiki Extensions”,即使这意味着它们是用PHP编写的?

这是我们当前用于mediawiki的docker-compose文件条目:

mediawiki:
  image: mediawiki
  container_name: mediawiki_production
  mem_limit: 4g
  volumes:
    - /var/www/mediawiki/uploads:/var/www/html/uploads
    - /var/www/mediawiki/LocalSettings.php:/var/www/html/LocalSettings.php
  environment:
    - MEDIAWIKI_DB_NAME=
    - MEDIAWIKI_DB_HOST=
    - MEDIAWIKI_DB_USER=
    - MEDIAWIKI_DB_PASSWORD=
    - VIRTUAL_HOST=wiki.exmaple.com
    - TERM=xterm
  restart: always
  network_mode: bridge
Run Code Online (Sandbox Code Playgroud)

我们正在考虑的扩展并不是最初的官方映像的一部分(但希望在以后提供可扩展的解决方案):

使用官方mediawiki映像作为其“ FROM”以包含mediawiki扩展和更新的docker-compose(如果需要两者)以添加mediawiki扩展的下游docker映像的任何示例都将有所帮助。如果mediawiki扩展本身依赖于基本图像中尚未包含的php扩展或库,或者添加不依赖任何其他php扩展或库的mediawiki扩展,则最好解释一下需要更改的内容。

Div*_*ron 10

正如 OP 所建议的,您需要创建一个包含官方 MediaWiki 图像的图像。

编写说明以制作带有额外扩展名的图像

作为一个最小的例子,我们将创建一个包含EmbedVideo扩展的图像,1.31 版起,该扩展未与 MediaWiki 捆绑在一起。在文件中添加以下说明my-mediawiki/Dockerfile

FROM mediawiki:latest

RUN git clone --depth 1 https://github.com/HydraWiki/mediawiki-embedvideo.git /var/www/html/extensions/EmbedVideo
Run Code Online (Sandbox Code Playgroud)

构建图像

使用docker build以下命令将此 Dockerfile 转换为图像:

$ docker build -t username/mediawiki ./my-mediawiki
Sending build context to Docker daemon  2.048kB
Step 1/2 : FROM mediawiki:latest
latest: Pulling from library/mediawiki
802b00ed6f79: Pull complete
# [lines omitted]
8b47ece631d8: Pull complete 
Digest: sha256:5922653b254073c6d6a535bbdb0101f8a5eadbf557e2f31d590c234001c55b60
Status: Downloaded newer image for mediawiki:latest
 ---> 27fe73856ca7
Step 2/2 : RUN git clone --depth 1 https://github.com/HydraWiki/mediawiki-embedvideo.git /var/www/html/extensions/EmbedVideo
 ---> Running in 30a411511341
Cloning into '/var/www/html/extensions/EmbedVideo'...
Removing intermediate container 30a411511341
 ---> 5b297228bb08
Successfully built 5b297228bb08
Successfully tagged username/mediawiki:latest
Run Code Online (Sandbox Code Playgroud)

测试图像

使用docker run以下方法测试图像:

$ docker run --rm -p 8080:80 username/mediawiki
Run Code Online (Sandbox Code Playgroud)

当此容器运行时,请localhost:8080使用 Web 浏览器访问。系统将要求您执行设置过程。当您进入选项页面时,EmbedVideo 扩展程序将包含在扩展程序列表中。

执行其余的设置

需要其他步骤才能在 docker 中运行 MediaWiki,例如提供LocalSettings.php文件并将其连接到数据库。按照官方 MediaWiki Docker 文档了解这些步骤,用您的username/mediawiki图像替换官方mediawiki图像。

添加额外的插件

可以通过RUNmy-mediawiki/Dockerfile. 例如,要添加Scribunto,请将以下内容附加到文件底部:

RUN git clone --depth 1 -b $MEDIAWIKI_BRANCH \
      https://gerrit.wikimedia.org/r/p/mediawiki/extensions/Scribunto \
      /var/www/html/extensions/Scribunto \
      && chmod a+x /var/www/html/extensions/Scribunto/includes/engines/LuaStandalone/binaries/lua*_linux_*/lua
Run Code Online (Sandbox Code Playgroud)

Dockerfile使用以下方法修改更新图像后:

docker build -t username/mediawiki ./my-mediawiki
Run Code Online (Sandbox Code Playgroud)

大多数扩展都需要您修改LocalSettings.php,并且像 Scribunto 一样,有些扩展需要在下载后运行额外的安装命令(检查每个扩展的README)。像可视化编辑器这样的复杂扩展需要额外的容器来运行 Parsoid 等守护进程。我自己的Dockerfiledocker-compose.yml说明了如何配置其他插件。

  • 我按照@Streamline 的要求上传并链接到 [我自己的配置](https://github.com/divinenephron/docker-mediawiki)。 (2认同)