使用 MediaWiki 官方 docker 图片时如何最好地添加扩展?
How to best add extensions when using official docker image for MediaWiki?
我们正在使用官方 MediaWiki Docker image 并希望能够添加额外的 MediaWiki 扩展。
问题:
- 如果我们当前正在使用下面的 docker-compose 文件,建议的下一步是什么,我们是在主机上安装卷吗?是不是要构建一个新的镜像来包裹官方镜像?这个修改后的新图像的某处是否有用于添加 mediawiki 扩展的示例?
- 或者我们可以在当前的 docker-compose 中在主机上安装一个扩展卷,如果需要,可以对
LocalSettings.php
进行任何调整吗?
这个 link on the docker website 指的是添加 PHP 扩展和库,但我不清楚如果想要添加 MediaWiki 特定扩展,这是否试图成为相同的答案,因为它明确地说 "PHP Extensions"。或者这个文档页面实际上应该说 "MediaWiki Extensions" 即使这意味着它们是用 PHP 编写的?
这是我们当前的 docker-compose mediawiki 文件条目:
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
我们正在考虑的不属于官方图像的扩展首先是(但希望以后有更多可扩展的解决方案):
使用官方 mediawiki 图像作为其 "FROM" 以包含 mediawiki 扩展和更新的 docker-compose(如果两者都包含)的下游 docker 图像的任何示例是必需的)能够添加 mediawiki 扩展会有所帮助。如果 mediawiki 扩展本身依赖 php 尚未包含在基本图像中的扩展或库,而不是添加不依赖任何其他 php 扩展或库。
按照 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
构建图像
使用 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
测试图片
使用 docker run
测试图像:
$ docker run --rm -p 8080:80 username/mediawiki
虽然此容器 运行正在使用网络浏览器访问 localhost:8080
。系统将要求您执行设置过程。当您到达选项页面时,EmbedVideo 扩展将包含在扩展列表中。
执行其余设置
需要其他步骤才能在 docker 中获取 MediaWiki 运行,例如提供 LocalSettings.php
文件并将其连接到数据库。按照 official MediaWiki Docker documentation 执行这些步骤,用您的 username/mediawiki
图片替换官方 mediawiki
图片。
添加额外的插件
可以通过在 my-mediawiki/Dockerfile
末尾附加更多 RUN
指令来安装多个插件。例如,要添加 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
修改 Dockerfile
后更新图片使用:
docker build -t username/mediawiki ./my-mediawiki
大多数扩展都需要您修改 LocalSettings.php
,并且像 Scribunto 一样,某些扩展在下载后需要额外的安装命令 运行(检查每个扩展的 README
)。 VisualEditor will require additional containers to run daemons such as Parsoid. My own Dockerfile
and docker-compose.yml
等复杂扩展说明了如何配置其他插件。
我们正在使用官方 MediaWiki Docker image 并希望能够添加额外的 MediaWiki 扩展。
问题:
- 如果我们当前正在使用下面的 docker-compose 文件,建议的下一步是什么,我们是在主机上安装卷吗?是不是要构建一个新的镜像来包裹官方镜像?这个修改后的新图像的某处是否有用于添加 mediawiki 扩展的示例?
- 或者我们可以在当前的 docker-compose 中在主机上安装一个扩展卷,如果需要,可以对
LocalSettings.php
进行任何调整吗?
这个 link on the docker website 指的是添加 PHP 扩展和库,但我不清楚如果想要添加 MediaWiki 特定扩展,这是否试图成为相同的答案,因为它明确地说 "PHP Extensions"。或者这个文档页面实际上应该说 "MediaWiki Extensions" 即使这意味着它们是用 PHP 编写的?
这是我们当前的 docker-compose mediawiki 文件条目:
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
我们正在考虑的不属于官方图像的扩展首先是(但希望以后有更多可扩展的解决方案):
使用官方 mediawiki 图像作为其 "FROM" 以包含 mediawiki 扩展和更新的 docker-compose(如果两者都包含)的下游 docker 图像的任何示例是必需的)能够添加 mediawiki 扩展会有所帮助。如果 mediawiki 扩展本身依赖 php 尚未包含在基本图像中的扩展或库,而不是添加不依赖任何其他 php 扩展或库。
按照 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
构建图像
使用 docker build
:
$ 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
测试图片
使用 docker run
测试图像:
$ docker run --rm -p 8080:80 username/mediawiki
虽然此容器 运行正在使用网络浏览器访问 localhost:8080
。系统将要求您执行设置过程。当您到达选项页面时,EmbedVideo 扩展将包含在扩展列表中。
执行其余设置
需要其他步骤才能在 docker 中获取 MediaWiki 运行,例如提供 LocalSettings.php
文件并将其连接到数据库。按照 official MediaWiki Docker documentation 执行这些步骤,用您的 username/mediawiki
图片替换官方 mediawiki
图片。
添加额外的插件
可以通过在 my-mediawiki/Dockerfile
末尾附加更多 RUN
指令来安装多个插件。例如,要添加 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
修改 Dockerfile
后更新图片使用:
docker build -t username/mediawiki ./my-mediawiki
大多数扩展都需要您修改 LocalSettings.php
,并且像 Scribunto 一样,某些扩展在下载后需要额外的安装命令 运行(检查每个扩展的 README
)。 VisualEditor will require additional containers to run daemons such as Parsoid. My own Dockerfile
and docker-compose.yml
等复杂扩展说明了如何配置其他插件。