代码之家  ›  专栏  ›  技术社区  ›  Streamline

如何在使用MediaWiki的docker官方图像时最好地添加扩展?

  •  14
  • Streamline  · 技术社区  · 8 年前

    我们正在使用官方 MediaWiki Docker image 并希望能够添加其他MediaWiki扩展。

    问题:

    1. 如果我们当前正在使用下面的docker compose文件,如果我们在主机上装载卷,建议下一步是什么?是为了建立一个新的形象来包装官方形象吗?是否有此修改后的新图像添加mediawiki扩展的示例?
    2. 或者我们可以在当前docker compose中的主机上装载一个扩展卷,如果需要,可以对 LocalSettings.php ?

    link on the docker website 指添加PHP扩展和库,但我不清楚如果要添加MediaWiki特定的扩展,这是否是相同的答案,因为它明确表示“PHP扩展”。或者这个文档页面是否应该实际上说“MediaWiki扩展”,即使这意味着它们是用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
    

    我们首先考虑的不是官方形象的扩展是(但希望以后有一个可扩展的解决方案):

    任何使用官方mediawiki图像作为其“发件人”的下游docker图像示例都会很有帮助,其中包括mediawiki扩展和更新的docker compose(如果两者都需要)以添加mediawiki扩展。如果mediawiki扩展本身依赖于未包含在基础映像中的php扩展或库,而添加了不依赖于任何其他php扩展或库的mediawiki扩展,那么最好解释一下需要更改什么。

    1 回复  |  直到 8 年前
        1
  •  13
  •   Divinenephron flodel    7 年前

    正如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
    

    构建图像

    使用将此Dockerfile转换为图像 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 使用web浏览器。系统将要求您执行设置程序。当您进入选项页面时,EmbeddeVideo扩展将包含在扩展列表中。

    执行其余设置

    要在docker中运行MediaWiki,还需要其他步骤,例如提供 LocalSettings.php 文件并将其连接到数据库。遵循 official MediaWiki Docker documentation 对于这些步骤,请替换 username/mediawiki 官方形象 mediawiki 形象

    添加其他插件

    通过附加更多插件,可以安装多个插件 RUN 结束说明 我的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
    

    修改后 Dockerfile 使用以下内容更新图像:

    docker build -t username/mediawiki ./my-mediawiki
    

    大多数扩展都需要您修改 本地设置。php ,并且像Scribunto一样,有些需要在下载后运行额外的安装命令(检查每个扩展的 README )。复杂的扩展,如 VisualEditor 将需要其他容器来运行Parsoid之类的守护程序。我自己的 Dockerfile docker-compose.yml 说明如何配置其他插件。

    推荐文章