Difference between revisions of "Pymediawikidocker"

From BITPlan Wiki
Jump to navigation Jump to search
(87 intermediate revisions by the same user not shown)
Line 3: Line 3:
 
{{OsProject
 
{{OsProject
 
|id=pymediawikidocker
 
|id=pymediawikidocker
 +
|state=active
 
|owner=WolfgangFahl
 
|owner=WolfgangFahl
|title=Python controlled mediawiki docker image installation
+
|title=pymediawikidocker
 
|url=https://github.com/WolfgangFahl/pymediawikidocker
 
|url=https://github.com/WolfgangFahl/pymediawikidocker
|version=0.5.0
+
|version=0.13.0
|date=2022-10-27
+
|description=Python controlled mediawiki docker image installation
 +
|date=2024-08-02
 +
|since=2021-06-08
 
|storemode=property
 
|storemode=property
 
}}
 
}}
  
 +
=tickets=
 
= Motivation =
 
= Motivation =
 
[https://hub.docker.com/_/mediawiki Official Mediawiki docker images] are available for the different Mediawiki versions.
 
[https://hub.docker.com/_/mediawiki Official Mediawiki docker images] are available for the different Mediawiki versions.
  
These images need additional infrastructure to create useable Mediawiki environments. The goal of this project is to semi-automatically create
+
These images need additional infrastructure to create useable Mediawiki environments.
 +
<source lang='bash'>
 +
docker run --name local-mediawiki -p 8080:80 -d mediawiki
 +
</source>
 +
 
 +
will only install part of a LAMP environment to install Mediawiki and make it available via http://localhost:8080/. E.g. the database needs to be installed separately.
 +
 +
The goal of this project is to semi-automatically create
 
such environments and test the functionality. Python was choosen as a development environment for the [https://github.com/WolfgangFahl/pymediawikidocker/blob/main/requirements.txt libraries that are needed and available] to perform the tasks:
 
such environments and test the functionality. Python was choosen as a development environment for the [https://github.com/WolfgangFahl/pymediawikidocker/blob/main/requirements.txt libraries that are needed and available] to perform the tasks:
 
* https://github.com/gabrieldemarmiesse/python-on-whales - to automate the docker configuration and start
 
* https://github.com/gabrieldemarmiesse/python-on-whales - to automate the docker configuration and start
Line 23: Line 34:
 
= How it works =
 
= How it works =
 
The core concept is a "MediawikiCluster" that is a set of docker applications that run MediaWiki instances with varying versions of MediaWiki and the underlying database.
 
The core concept is a "MediawikiCluster" that is a set of docker applications that run MediaWiki instances with varying versions of MediaWiki and the underlying database.
 +
The graphic belows shows the docker containers which are created for different versions of Mediawiki
  
 
<graphviz>
 
<graphviz>
// generated by /Users/wf/Documents/pyworkspace/pymediawikidocker/tests/test_install.py on 2022-10-24T09:48:13.054379
+
// generated by /Users/wf/py-workspace/pymediawikidocker/tests/test_install.py on 2024-08-02T15:00:35.398570
 
digraph mwcluster {
 
digraph mwcluster {
   mew0 [ label="Mediawiki 1.27.7\nport 9080" ]
+
  rankdir="RL"
   mdb0 [ label="MariaDB 10.9\nport 9306" ]
+
   mew0 [ label="mw-135-mw\nMediaWiki 1.35.13\nport 9080" ]
 +
   mdb0 [ label="mw-135-db\nMariaDB 10.11\nport 9306" ]
 
   subgraph cluster_0{
 
   subgraph cluster_0{
     label="mw1_27_7"
+
     label="mw-135"
 
     mew0->mdb0
 
     mew0->mdb0
 
   }
 
   }
   mew1 [ label="Mediawiki 1.31.16\nport 9081" ]
+
   mew1 [ label="mw-138-mw\nMediaWiki 1.38.6\nport 9081" ]
   mdb1 [ label="MariaDB 10.9\nport 9307" ]
+
   mdb1 [ label="mw-138-db\nMariaDB 10.11\nport 9307" ]
 
   subgraph cluster_1{
 
   subgraph cluster_1{
     label="mw1_31_16"
+
     label="mw-138"
 
     mew1->mdb1
 
     mew1->mdb1
 
   }
 
   }
   mew2 [ label="Mediawiki 1.35.8\nport 9082" ]
+
   mew2 [ label="mw-139-mw\nMediaWiki 1.39.8\nport 9082" ]
   mdb2 [ label="MariaDB 10.9\nport 9308" ]
+
   mdb2 [ label="mw-139-db\nMariaDB 10.11\nport 9308" ]
 
   subgraph cluster_2{
 
   subgraph cluster_2{
     label="mw1_35_8"
+
     label="mw-139"
 
     mew2->mdb2
 
     mew2->mdb2
 
   }
 
   }
   mew3 [ label="Mediawiki 1.37.6\nport 9083" ]
+
   mew3 [ label="mw-140-mw\nMediaWiki 1.40.4\nport 9083" ]
   mdb3 [ label="MariaDB 10.9\nport 9309" ]
+
   mdb3 [ label="mw-140-db\nMariaDB 10.11\nport 9309" ]
 
   subgraph cluster_3{
 
   subgraph cluster_3{
     label="mw1_37_6"
+
     label="mw-140"
 
     mew3->mdb3
 
     mew3->mdb3
 
   }
 
   }
   mew4 [ label="Mediawiki 1.38.4\nport 9084" ]
+
   mew4 [ label="mw-141-mw\nMediaWiki 1.41.2\nport 9084" ]
   mdb4 [ label="MariaDB 10.9\nport 9310" ]
+
   mdb4 [ label="mw-141-db\nMariaDB 10.11\nport 9310" ]
 
   subgraph cluster_4{
 
   subgraph cluster_4{
     label="mw1_38_4"
+
     label="mw-141"
 
     mew4->mdb4
 
     mew4->mdb4
 +
  }
 +
  mew5 [ label="mw-142-mw\nMediaWiki 1.42.1\nport 9085" ]
 +
  mdb5 [ label="mw-142-db\nMariaDB 10.11\nport 9311" ]
 +
  subgraph cluster_5{
 +
    label="mw-142"
 +
    mew5->mdb5
 
   }
 
   }
 
}
 
}
Line 65: Line 84:
 
=== Ubuntu 22.04 LTS installation ===
 
=== Ubuntu 22.04 LTS installation ===
 
see https://docs.docker.com/engine/install/ubuntu/ on how to setup the docker repositorysudo  
 
see https://docs.docker.com/engine/install/ubuntu/ on how to setup the docker repositorysudo  
<source lang='bash' highlight='1-3'>
+
<source lang='bash' highlight='1-2,4'>
 
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
 
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
 
docker --version
 
docker --version
 +
Docker version 23.0.2, build 569dd73
 
docker run hello-world
 
docker run hello-world
Docker version 20.10.20, build 9fdeb9c
+
Hello from Docker!
 +
This message shows that your installation appears to be working correctly.
 +
 
 +
...
 
</source>
 
</source>
  
Line 77: Line 100:
 
docker 2>&1 | grep compose
 
docker 2>&1 | grep compose
 
   compose*    Docker Compose (Docker Inc., v2.4.1)
 
   compose*    Docker Compose (Docker Inc., v2.4.1)
# test on an Ubuntu machine 2022-10-23
+
# test on an Ubuntu machine 2023-04-07
 
docker 2>&1 | grep compose
 
docker 2>&1 | grep compose
  compose*    Docker Compose (Docker Inc., v2.12.0)
+
compose*    Docker Compose (Docker Inc., v2.17.2)
 
</source>
 
</source>
  
Line 87: Line 110:
 
No LSB modules are available.
 
No LSB modules are available.
 
Distributor ID: Ubuntu
 
Distributor ID: Ubuntu
Description: Ubuntu 22.04.1 LTS
+
Description: Ubuntu 22.04.e LTS
 
Release: 22.04
 
Release: 22.04
 
Codename: jammy
 
Codename: jammy
 
</source>
 
</source>
 +
==== docker-ce from docker repo ====
 +
<source lang='bash'>
 +
# Update existing list of packages
 +
sudo apt update
 +
 +
# Install prerequisite packages which let apt use packages over HTTPS
 +
sudo apt install apt-transport-https ca-certificates curl software-properties-common
 +
 +
# Add Docker’s official GPG key
 +
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
 +
 +
# Add Docker repository to APT sources
 +
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
 +
 +
# Update the package database with Docker packages from the newly added repo
 +
sudo apt update
 +
 +
# Make sure you are about to install from the Docker repo instead of the default Ubuntu repo
 +
apt-cache policy docker-ce
 +
 +
# Install Docker CE
 +
sudo apt install docker-ce
 +
</source>
 +
==== docker compose (not docker-compose) ====
 
<source lang='bash' highlight='1'>
 
<source lang='bash' highlight='1'>
 
docker compose version
 
docker compose version
Docker Compose version v2.12.0
+
Docker Compose version v2.26.1
 
</source>
 
</source>
 
<source lang='bash' highlight='1-2,7'>
 
<source lang='bash' highlight='1-2,7'>
Line 100: Line 147:
 
docker-compose version 1.29.2, build unknown
 
docker-compose version 1.29.2, build unknown
 
docker-py version: 5.0.3
 
docker-py version: 5.0.3
CPython version: 3.10.6
+
CPython version: 3.10.12
 
OpenSSL version: OpenSSL 3.0.2 15 Mar 2022
 
OpenSSL version: OpenSSL 3.0.2 15 Mar 2022
 
which docker-compose
 
which docker-compose
Line 121: Line 168:
 
<source lang='bash' highlight='1'>
 
<source lang='bash' highlight='1'>
 
mwcluster -V
 
mwcluster -V
mwCluster v0.5.0 (2022-10-27)
+
mwcluster (v0.13.0,2024-08-02)
 
</source>
 
</source>
  
Line 127: Line 174:
 
<source lang='bash' highlight='1'>
 
<source lang='bash' highlight='1'>
 
mwcluster -h
 
mwcluster -h
usage: mwCluster [-h] [-bp BASEPORT] [-c] [-cn CONTAINER_NAME] [-d]
+
usage: mwcluster [-h] [-cn CONTAINER_NAME] [-d] [-el [EXTENSIONNAMELIST ...]]
                [-el [EXTENSIONNAMELIST ...]] [-ej EXTENSIONJSONFILE] [-f]
+
                [-ej EXTENSIONJSONFILE] [-f] [-fu] [--host HOST]
                 [--logo LOGO] [-mv MARIADBVERSION] [-p PASSWORD]
+
                 [-dp DOCKER_PATH] [--logo LOGO] [-mv MARIADBVERSION]
                 [-sp SQLPORT] [-smw SMWVERSION] [-u USER] [-V]
+
                [--mysqlPassword MYSQLPASSWORD] [-rp] [-p PASSWORD]
                 [-vl [VERSIONS ...]] [-wl [WIKIIDLIST ...]]
+
                 [-pl PASSWORD_LENGTH] [--prefix PREFIX] [--prot PROT]
 +
                [--script_path SCRIPT_PATH] [--url URL] [-sp SQL_PORT]
 +
                [-smw SMW_VERSION] [-u USER] [-q] [-bp BASE_PORT]
 +
                 [-vl [VERSIONS ...]] [--about] [--create] [--down] [--check]
 +
                [--list] [-V]
  
mwcluster Created by Wolfgang Fahl on 2021-06-21. Copyright 2021-2022 Wolfgang
+
Copyright 2020-2023 contributors. All rights reserved. Licensed under the
Fahl. All rights reserved. Licensed under the Apache License 2.0
+
Apache License 2.0 http://www.apache.org/licenses/LICENSE-2.0 Distributed on
http://www.apache.org/licenses/LICENSE-2.0 Distributed on an "AS IS" basis
+
an "AS IS" basis without warranties or conditions of any kind, either express
without warranties or conditions of any kind, either express or implied.
+
or implied.
  
 
options:
 
options:
 
   -h, --help            show this help message and exit
 
   -h, --help            show this help message and exit
  -bp BASEPORT, --basePort BASEPORT
 
                        set how base html port 80 to be exposed - incrementing
 
                        by one for each version [default: 9080]
 
  -c, --check          check the wikis [default: False]
 
 
   -cn CONTAINER_NAME, --container_name CONTAINER_NAME
 
   -cn CONTAINER_NAME, --container_name CONTAINER_NAME
 
                         set container name (only valid and recommended for
 
                         set container name (only valid and recommended for
                         single version call) (default: None)
+
                         single version call) (default: mw-139)
   -d, --debug          set debug level [default: False]
+
   -d, --debug          enable debug mode [default: False]
 
   -el [EXTENSIONNAMELIST ...], --extensionList [EXTENSIONNAMELIST ...]
 
   -el [EXTENSIONNAMELIST ...], --extensionList [EXTENSIONNAMELIST ...]
 
                         list of extensions to be installed [default: ['Admin
 
                         list of extensions to be installed [default: ['Admin
Line 153: Line 200:
 
                         'Variables']]
 
                         'Variables']]
 
   -ej EXTENSIONJSONFILE, --extensionJson EXTENSIONJSONFILE
 
   -ej EXTENSIONJSONFILE, --extensionJson EXTENSIONJSONFILE
                         additional extension descriptions default: None
+
                         additional extension descriptions default: [default:
                         (default: None)
+
                         None]
   -f, --forceRebuild    shall the applications rebuild be forced (with stop
+
   -f, --forceRebuild    force rebuilding [default: False]
                        and remove of existing containers) (default: False)
+
  -fu, --force_user    force overwrite of wikiuser (default: False)
 +
  --host HOST          the host to serve / listen from [default:
 +
                        fix.bitplan.com]
 +
  -dp DOCKER_PATH, --docker_path DOCKER_PATH
 +
                        the base directory to store docker and jinja template
 +
                        files [default: /Users/wf/.pymediawikidocker]
 
   --logo LOGO          set Logo [default:
 
   --logo LOGO          set Logo [default:
 
                         $wgResourceBasePath/resources/assets/wiki.png]
 
                         $wgResourceBasePath/resources/assets/wiki.png]
 
   -mv MARIADBVERSION, --mariaDBVersion MARIADBVERSION
 
   -mv MARIADBVERSION, --mariaDBVersion MARIADBVERSION
                         mariaDB Version to be installed [default: 10.9]
+
                         mariaDB Version to be installed [default: 10.11]
 +
  --mysqlPassword MYSQLPASSWORD
 +
                        set sqlRootPassword [default: None] - random password
 +
                        if None
 +
  -rp, --random_password
 +
                        create random password and create wikiuser while at it
 +
                        (default: False)
 
   -p PASSWORD, --password PASSWORD
 
   -p PASSWORD, --password PASSWORD
 
                         set password for initial user [default: sysop-1234!]
 
                         set password for initial user [default: sysop-1234!]
   -sp SQLPORT, --sqlBasePort SQLPORT
+
  -pl PASSWORD_LENGTH, --password_length PASSWORD_LENGTH
 +
                        set the password length for random passwords[default:
 +
                        15]
 +
  --prefix PREFIX      the container name prefix to use [default: mw]
 +
  --prot PROT          change to https in case [default: http]
 +
  --script_path SCRIPT_PATH
 +
                        change to any script_path you might need to set
 +
                        [default: ]
 +
  --url URL            will set prot host,script_path, and optionally port
 +
                        based on the url given [default: None]
 +
   -sp SQL_PORT, --sql_base_port SQL_PORT
 
                         set base mySql port 3306 to be exposed - incrementing
 
                         set base mySql port 3306 to be exposed - incrementing
 
                         by one for each version [default: 9306]
 
                         by one for each version [default: 9306]
   -smw SMWVERSION, --smwVersion SMWVERSION
+
   -smw SMW_VERSION, --smw_version SMW_VERSION
 
                         set SemanticMediaWiki Version to be installed default
 
                         set SemanticMediaWiki Version to be installed default
 
                         is None - no installation of SMW (default: None)
 
                         is None - no installation of SMW (default: None)
 
   -u USER, --user USER  set username of initial user with sysop rights
 
   -u USER, --user USER  set username of initial user with sysop rights
 
                         [default: Sysop]
 
                         [default: Sysop]
 +
  -q, --quiet          not verbose [default: False]
 +
  -bp BASE_PORT, --base_port BASE_PORT
 +
                        set how base html port 80 to be exposed - incrementing
 +
                        by one for each version [default: 9080]
 +
  -vl [VERSIONS ...], --version_list [VERSIONS ...]
 +
                        mediawiki versions to create docker applications for
 +
                        [default: ['1.35.13', '1.38.6', '1.39.7', '1.40.3',
 +
                        '1.41.1']]
 +
  --about              show about info [default: False]
 +
  --create              create wikis [default: False]
 +
  --down                shutdown wikis [default: False]
 +
  --check              check the wikis [default: False]
 +
  --list                list the wikis [default: False]
 
   -V, --version        show program's version number and exit
 
   -V, --version        show program's version number and exit
  -vl [VERSIONS ...], --versionList [VERSIONS ...]
 
                        mediawiki versions to create docker applications for
 
                        [default: ['1.27.7', '1.31.16', '1.35.8', '1.37.6',
 
                        '1.38.4']]
 
  -wl [WIKIIDLIST ...], --wikiIdList [WIKIIDLIST ...]
 
                        list of wikiIDs to be used for for py-3rdparty-
 
                        mediawiki wikiuser quick access (default: None)
 
 
</source>
 
</source>
  
 
= Examples =
 
= Examples =
see also {{Link|target=Pymediawikidocker_example_2022-10-26}}
+
{{Link|target=Pymediawikidocker_example_2022-10-26}}
== Default settings ==
+
== create with default settings ==
Starts a cluster with versions 1.27.7, 1.31.16, 1.35.8, 1.37.6 and 1.38.4 using MariaDB 10.9
+
Starts a cluster with versions 1.35.13,1.38.6 and 1.39.8, 1.40.4, 1.41.2 and 1.42.1 using MariaDB 10.11.
 +
Essentially this is automatic generation of the configuration with a docker compose up for all versions asked for.
 
<source lang='bash' highlight='1'>
 
<source lang='bash' highlight='1'>
mwcluster -f
+
mwcluster --create -f
creating docker applications for mediawiki versions ['1.27.7', '1.31.16', '1.35.8', '1.37.6', '1.38.4']
+
creating docker compose applications for mediawiki versions ['1.35.13', '1.38.6', '1.39.8', '1.40.4', '1.41.2', '1.42.1']
 
...
 
...
starting mediawiki 1.27.7 docker application ...
 
..
 
 
Initializing MediaWiki SQL tables
 
Initializing MediaWiki SQL tables
Trying DB-Connection to wiki on localhost port 9308 with user wikiuser with max 6 tries and 10s timeout per try - initial sleep 2.5s
+
Executing docker command /root/installExtensions.sh
Connection to wiki on localhost with user wikiuser established database returns: ('wiki',)
+
Executing docker command /root/initdb.sh
 +
Executing docker command /root/update.sh
 +
Executing docker command /root/addSysopUser.sh
 +
Executing docker command /root/addCronTabEntry.sh
 +
...
 
</source>
 
</source>
 
Mediawiki applications will be available at
 
Mediawiki applications will be available at
Line 201: Line 278:
 
# {{mwlink|port=9083}}
 
# {{mwlink|port=9083}}
 
# {{mwlink|port=9084}}
 
# {{mwlink|port=9084}}
 +
# {{mwlink|port=9085}}
  
 
=== check ===
 
=== check ===
 
<source lang='bash' highlight='1'>
 
<source lang='bash' highlight='1'>
mwcluster -c
+
mwcluster --check -f
mwcluster -c
+
checking docker access for mediawiki versions ['1.35.13', '1.38.6', '1.39.8', '1.40.4', '1.41.2', '1.42.1']
checking docker access for mediawiki versions ['1.27.7', '1.31.16', '1.35.8', '1.37.6', '1.38.4']
+
1:checking 1.35.13 ...
0:checking 1.27.7 ...
+
mediawiki webserver container mw-135-mw:✅
mediawiki webserver container mw1_27_7-mw:✅
+
mediawiki database container mw-135-db:✅
mediawiki database container mw1_27_7-db:✅
 
 
port binding 9080= expected  port 9080?:✅
 
port binding 9080= expected  port 9080?:✅
Checking http://localhost:9080/index.php/Special:Version ...
+
Checking http://fixit.bitplan.com:9080/index.php/Special:Version ...
 
Special Version accessible ...:✅
 
Special Version accessible ...:✅
Mediawiki Version 1.27.7= expected  1.27.7?:✅
+
Mediawiki Version 1.35.13= expected  1.35.13?:✅
Maria DB Version 10.9 fitting expected 10.9?:✅
+
Maria DB Version 10.11 fitting expected 10.11?:✅
1:checking 1.31.16 ...
+
2:checking 1.38.6 ...
mediawiki webserver container mw1_31_16-mw:✅
+
mediawiki webserver container mw-138-mw:✅
mediawiki database container mw1_31_16-db:✅
+
mediawiki database container mw-138-db:✅
 
port binding 9081= expected  port 9081?:✅
 
port binding 9081= expected  port 9081?:✅
Checking http://localhost:9081/index.php/Special:Version ...
+
Checking http://fixit.bitplan.com:9081/index.php/Special:Version ...
 
Special Version accessible ...:✅
 
Special Version accessible ...:✅
Mediawiki Version 1.31.16= expected  1.31.16?:✅
+
Mediawiki Version 1.38.6= expected  1.38.6?:✅
Maria DB Version 10.9 fitting expected 10.9?:✅
+
Maria DB Version 10.11 fitting expected 10.11?:✅
2:checking 1.35.8 ...
+
3:checking 1.39.8 ...
mediawiki webserver container mw1_35_8-mw:✅
+
mediawiki webserver container mw-139-mw:✅
mediawiki database container mw1_35_8-db:✅
+
mediawiki database container mw-139-db:✅
 
port binding 9082= expected  port 9082?:✅
 
port binding 9082= expected  port 9082?:✅
Checking http://localhost:9082/index.php/Special:Version ...
+
Checking http://fixit.bitplan.com:9082/index.php/Special:Version ...
 
Special Version accessible ...:✅
 
Special Version accessible ...:✅
Mediawiki Version 1.35.8= expected  1.35.8?:✅
+
Mediawiki Version 1.39.8= expected  1.39.8?:✅
Maria DB Version 10.9 fitting expected 10.9?:✅
+
Maria DB Version 10.11 fitting expected 10.11?:✅
3:checking 1.37.6 ...
+
4:checking 1.40.4 ...
mediawiki webserver container mw1_37_6-mw:✅
+
mediawiki webserver container mw-140-mw:✅
mediawiki database container mw1_37_6-db:✅
+
mediawiki database container mw-140-db:✅
 
port binding 9083= expected  port 9083?:✅
 
port binding 9083= expected  port 9083?:✅
Checking http://localhost:9083/index.php/Special:Version ...
+
Checking http://fixit.bitplan.com:9083/index.php/Special:Version ...
 
Special Version accessible ...:✅
 
Special Version accessible ...:✅
Mediawiki Version 1.37.6= expected  1.37.6?:✅
+
Mediawiki Version 1.40.4= expected  1.40.4?:✅
Maria DB Version 10.9 fitting expected 10.9?:✅
+
Maria DB Version 10.11 fitting expected 10.11?:✅
4:checking 1.38.4 ...
+
5:checking 1.41.2 ...
mediawiki webserver container mw1_38_4-mw:✅
+
mediawiki webserver container mw-141-mw:✅
mediawiki database container mw1_38_4-db:✅
+
mediawiki database container mw-141-db:✅
 
port binding 9084= expected  port 9084?:✅
 
port binding 9084= expected  port 9084?:✅
Checking http://localhost:9084/index.php/Special:Version ...
+
Checking http://fixit.bitplan.com:9084/index.php/Special:Version ...
 
Special Version accessible ...:✅
 
Special Version accessible ...:✅
Mediawiki Version 1.38.4= expected  1.38.4?:✅
+
Mediawiki Version 1.41.2= expected  1.41.2?:✅
Maria DB Version 10.9 fitting expected 10.9?:✅
+
Maria DB Version 10.11 fitting expected 10.11?:✅
 +
6:checking 1.42.1 ...
 +
mediawiki webserver container mw-142-mw:✅
 +
mediawiki database container mw-142-db:✅
 +
port binding 9085= expected  port 9085?:✅
 +
Checking http://fixit.bitplan.com:9085/index.php/Special:Version ...
 +
Special Version accessible ...:✅
 +
Mediawiki Version 1.42.1= expected  1.42.1?:✅
 +
Maria DB Version 10.11 fitting expected 10.11?:✅
 +
</source>
 +
 
 +
== down ==
 +
<source lang='bash' highlight='1'>
 +
mwcluster --down -f
 +
running docker compose down for mediawiki versions ['1.35.13', '1.38.6', '1.39.8', '1.40.4', '1.41.2', '1.42.1']
 +
running docker compose down for mw-135 1.35.13 docker application ...
 +
[+] Running 6/6
 +
✔ Container mw-135-mw      Removed                                      1.1s
 +
✔ Container mw-135-db      Removed                                      0.5s
 +
✔ Volume mw-135_wiki-etc    Removed                                      0.3s
 +
✔ Volume mw-135_mysql-data  Removed                                      0.3s
 +
✔ Volume mw-135_wiki-www    Removed                                      0.3s
 +
✔ Network mw-135_default    Removed                                      0.1s
 +
running docker compose down for mw-138 1.38.6 docker application ...
 +
[+] Running 6/6
 +
✔ Container mw-138-mw      Removed                                      1.2s
 +
✔ Container mw-138-db      Removed                                      0.5s
 +
✔ Volume mw-138_wiki-etc    Removed                                      0.0s
 +
✔ Volume mw-138_mysql-data  Removed                                      0.0s
 +
✔ Volume mw-138_wiki-www    Removed                                      0.4s
 +
✔ Network mw-138_default    Removed                                      0.1s
 +
running docker compose down for mw-139 1.39.8 docker application ...
 +
[+] Running 6/6
 +
✔ Container mw-139-mw      Removed                                      1.2s
 +
✔ Container mw-139-db      Removed                                      0.5s
 +
✔ Volume mw-139_wiki-www    Removed                                      0.3s
 +
✔ Volume mw-139_wiki-etc    Removed                                      0.3s
 +
✔ Volume mw-139_mysql-data  Removed                                      0.3s
 +
✔ Network mw-139_default    Removed                                      0.1s
 +
running docker compose down for mw-140 1.40.4 docker application ...
 +
[+] Running 6/6
 +
✔ Container mw-140-mw      Removed                                      1.2s
 +
✔ Container mw-140-db      Removed                                      0.5s
 +
✔ Volume mw-140_wiki-etc    Removed                                      0.0s
 +
✔ Volume mw-140_mysql-data  Removed                                      0.0s
 +
✔ Volume mw-140_wiki-www    Removed                                      0.4s
 +
✔ Network mw-140_default    Removed                                      0.1s
 +
running docker compose down for mw-141 1.41.2 docker application ...
 +
[+] Running 6/6
 +
✔ Container mw-141-mw      Removed                                      1.2s
 +
✔ Container mw-141-db      Removed                                      0.5s
 +
✔ Volume mw-141_mysql-data  Removed                                      0.4s
 +
✔ Volume mw-141_wiki-etc    Removed                                      0.4s
 +
✔ Volume mw-141_wiki-www    Removed                                      0.4s
 +
✔ Network mw-141_default    Removed                                      0.1s
 +
running docker compose down for mw-142 1.42.1 docker application ...
 +
[+] Running 6/6
 +
✔ Container mw-142-mw      Removed                                      1.2s
 +
✔ Container mw-142-db      Removed                                      0.5s
 +
✔ Volume mw-142_wiki-www    Removed                                      0.4s
 +
✔ Volume mw-142_mysql-data  Removed                                      0.0s
 +
✔ Volume mw-142_wiki-etc    Removed                                      0.0s
 +
✔ Network mw-142_default    Removed                                      0.1s
 
</source>
 
</source>
  
== Single 1.35.8 ==
+
== Single 1.35.13 LTS ==
 
<source lang='bash' highlight="2">
 
<source lang='bash' highlight="2">
 
# python mwdocker/mwcluster.py  can be used instead of mwcluster if you test from your locally cloned environment
 
# python mwdocker/mwcluster.py  can be used instead of mwcluster if you test from your locally cloned environment
 
mwcluster \
 
mwcluster \
 +
  --create \
 
   --forceRebuild\
 
   --forceRebuild\
   --versionList 1.35.8\
+
   --version_list 1.35.13\
   --basePort 8480\
+
   --base_port 8480\
   --sqlBasePort 10306\
+
   --sql_base_port 10306\
   --mariaDBVersion 10.9\
+
   --mariaDBVersion 10.11\
 
   --container_name mw135lts\
 
   --container_name mw135lts\
 
   --logo https://upload.wikimedia.org/wikipedia/commons/thumb/f/f9/Bigsmile_smiley_yellow_simple.svg/128px-Bigsmile_smiley_yellow_simple.svg.png
 
   --logo https://upload.wikimedia.org/wikipedia/commons/thumb/f/f9/Bigsmile_smiley_yellow_simple.svg/128px-Bigsmile_smiley_yellow_simple.svg.png
 +
creating docker compose applications for mediawiki versions ['1.35.13']
 +
starting mw135lts 1.35.13 docker application ..
 
</source>
 
</source>
 
Mediawiki application will be available at
 
Mediawiki application will be available at
Line 268: Line 410:
 
There might be more current versions of SMW available see https://www.semantic-mediawiki.org/wiki/Semantic_MediaWiki_Version_History and adapt
 
There might be more current versions of SMW available see https://www.semantic-mediawiki.org/wiki/Semantic_MediaWiki_Version_History and adapt
 
the example below if you see the need to do so.
 
the example below if you see the need to do so.
=== Version 4.0.2 ===
+
=== Version 4.1.2 ===
 
<source lang='bash' highlight='1-9'>
 
<source lang='bash' highlight='1-9'>
 
mwcluster \
 
mwcluster \
   --container_name mw135smw4\
+
  --create \
 +
   --container_name smw4\
 
   --forceRebuild\
 
   --forceRebuild\
   --versionList 1.35.8\
+
   --version_list 1.35.13\
   --basePort 8481\
+
   --base_port 8481\
   --sqlBasePort 10307\
+
   --sql_base_port 10307\
   --mariaDBVersion 10.9\
+
   --mariaDBVersion 10.11\
   --wikiIdList mw135smw4_test\
+
   --smw_version 4.1.2
  -smw 4.0.2
+
creating docker compose applications for mediawiki versions ['1.35.13']
 +
starting smw4 1.35.13 docker application ...
 
</source>
 
</source>
  
 
==== debug docker compose results - ports and other configuration parts ====
 
==== debug docker compose results - ports and other configuration parts ====
 
<source lang='bash' highlight='1-2,4'>
 
<source lang='bash' highlight='1-2,4'>
cd ~/.pymediawikidocker/mw135smw4
+
cd ~/.pymediawikidocker/smw4
 
docker-compose up
 
docker-compose up
 
# in another terminal session:
 
# in another terminal session:
 
docker ps
 
docker ps
CONTAINER ID  IMAGE         COMMAND                  CREATED       STATUS       PORTS                    NAMES
+
CONTAINER ID  IMAGE                   COMMAND                  CREATED             STATUS         PORTS                    NAMES
3ab643a8e647  mw135smw4_mw   "docker-php-entrypoi…"  18 hours ago  Up 18 hours   0.0.0.0:8481->80/tcp      mw135smw4-mw
+
87a795d444eb   smw4_mw                "docker-php-entrypoi…"  About a minute ago  Up 7 seconds   0.0.0.0:8481->80/tcp      smw4-mw
a456c87a83a6   mariadb:10."docker-entrypoint.s…"  18 hours ago  Up 18 hours   0.0.0.0:10307->3306/tcp  mw135smw4-db
+
7ca3a0434d31   mariadb:10.11          "docker-entrypoint.s…"  About a minute ago  Up 7 seconds   0.0.0.0:10307->3306/tcp  smw4-db
 
</source>
 
</source>
 
==== open bash in docker container ====
 
==== open bash in docker container ====
 
<source lang='bash' highlight='1'>
 
<source lang='bash' highlight='1'>
docker exec -it mw135smw4-mw /bin/bash
+
docker exec -it smw4-mw /bin/bash
 +
root@87a795d444eb:/var/www/html#
 
</source>
 
</source>
 
'''check installExtensions.sh script'''
 
'''check installExtensions.sh script'''
 
<source lang='bash' highlight='1'>
 
<source lang='bash' highlight='1'>
cat /tmp/installExtensions.sh  
+
cat /root/installExtensions.sh  
 
#!/bin/bash
 
#!/bin/bash
 
# install the required extensions
 
# install the required extensions
Line 324: Line 469:
 
# enable Support for Semantic MediaWiki
 
# enable Support for Semantic MediaWiki
 
# see https://www.semantic-mediawiki.org/wiki/Help:EnableSemantics
 
# see https://www.semantic-mediawiki.org/wiki/Help:EnableSemantics
# Version of SemanticMediaWiki at install time: 4.0.2
+
# Version of SemanticMediaWiki at install time: 4.1.1
 
wfLoadExtension( 'SemanticMediaWiki' );
 
wfLoadExtension( 'SemanticMediaWiki' );
enableSemantics();    
+
enableSemantics();
 +
# https://www.semantic-mediawiki.org/wiki/Help:$smwgQMaxInlineLimit
 
</source>
 
</source>
=== Version 3.2.3 ===
+
=== SMW Version 3.2.3 ===
 
==== Installation ====
 
==== Installation ====
<source lang='bash' highlight='1-9'>
+
<source lang='bash' highlight='1-10'>
 
mwcluster \
 
mwcluster \
   --container_name mw135smw3\
+
  --create \
 +
   --container_name smw3\
 
   --forceRebuild\
 
   --forceRebuild\
   --versionList 1.35.8\
+
   --version_list 1.35.13\
   --basePort 8482\
+
   --base_port 8482\
   --sqlBasePort 10308\
+
   --sql_base_port 10308\
   --mariaDBVersion 10.9\
+
   --mariaDBVersion 10.11\
  --wikiIdList mw135smw3_test\
+
   --logo https://www.semantic-mediawiki.org/w/images/4/4e/SMW_logo_180.png\
   --logo https://www.semantic-mediawiki.org/w/images/4/4e/SMW_logo_180.png
+
   --smw_version 3.2.3
   -smw 3.2.3
 
 
</source>
 
</source>
  
 
==== Check ====
 
==== Check ====
<source lang='bash' highlight='1-9'>
+
<source lang='bash' highlight='1'>
mwcluster \
+
mwcluster --check --container_name smw3 --version_list 1.35.13
  --container_name mw135smw3\
+
</source>
  --forceRebuild\
+
 
  --versionList 1.35.8\
+
==== Down ====
  --basePort 8482\
+
<source lang='bash' highlight='1'>
  --sqlBasePort 10308\
+
mwcluster --down --container_name smw3 --version_list 1.35.13 -f
  --mariaDBVersion 10.9\
+
running docker compose down for mediawiki versions ['1.35.13']
  --wikiIdList mw135smw3_test\
+
running docker compose down for smw3 1.35.10 docker application ...
  -smw 3.2.3 --check
+
[+] Running 3/3
checking docker access for mediawiki versions ['1.35.8']
+
⠿ Volume smw3_wiki-etc    Removed                                0.0s
0:checking 1.35.8 ...
+
⠿ Volume smw3_mysql-data Removed                                0.1s
mediawiki webserver container mw135smw3-mw:✅
+
  ⠿ Volume smw3_wiki-www    Removed                                1.2s
mediawiki database container mw135smw3-db:✅
 
port binding 8482= expected port 8482?:✅
 
Checking http://localhost:8482/index.php/Special:Version ...
 
Special Version accessible ...:✅
 
Mediawiki Version 1.35.8= expected 1.35.8?:✅
 
Maria DB Version 10.9 fitting expected 10.9?:✅
 
 
</source>
 
</source>
  
Line 385: Line 525:
 
<source lang='bash' highlight='1'>
 
<source lang='bash' highlight='1'>
 
docker images | grep mw
 
docker images | grep mw
mw1_38_4_mw   latest    c647ad44a344   About a minute ago   996MB
+
mw-142-mw    latest   13e469c7d859  54 minutes ago      1.17GB
mw1_37_6_mw    latest    af9de508138c   About a minute ago   980MB
+
mw-141-mw    latest    99578ea06019   55 minutes ago     1.2GB
mw1_35_8_mw    latest    f41c84ab16c3   2 minutes ago       988MB
+
mw-140-mw    latest    d84a2410dbea   56 minutes ago     1.13GB
mw1_31_16_mw  latest    9a8a26949b58   2 minutes ago       897MB
+
mw-139-mw    latest    f83c36dee73d   58 minutes ago     1.06GB
mw1_27_7_mw    latest    1fa159362ec9   2 minutes ago       898MB
+
mw-138-mw    latest    8bfb68343139   59 minutes ago     1.03GB
 +
mw-135-mw    latest    bf7ae8fe499c   About an hour ago   1.03GB
 
</source>
 
</source>
 +
 
== Bash into docker containers ==
 
== Bash into docker containers ==
  
 
<source lang='bash' highlight='2-6,9-13'>
 
<source lang='bash' highlight='2-6,9-13'>
 
# Mediawiki container
 
# Mediawiki container
docker exec -it mw1_38_4-mw /bin/bash
+
docker exec -it mw-142-mw /bin/bash
docker exec -it mw1_37_6-mw /bin/bash
+
docker exec -it mw-141-mw /bin/bash
docker exec -it mw1_35_8-mw /bin/bash
+
docker exec -it mw-140-mw /bin/bash
docker exec -it mw1_31_16-mw /bin/bash
+
docker exec -it mw-139-mw /bin/bash
docker exec -it mw1_27_7-mw /bin/bash
+
docker exec -it mw-138-mw /bin/bash
 +
docker exec -it mw-135-mw /bin/bash
  
 
# MariaDB container
 
# MariaDB container
docker exec -it mw1_38_4-db /bin/bash
+
docker exec -it mw-142-db /bin/bash
docker exec -it mw1_37_6-db /bin/bash
+
docker exec -it mw-141-db /bin/bash
docker exec -it mw1_35_8-db /bin/bash
+
docker exec -it mw-140-db /bin/bash
docker exec -it mw1_31_16-db /bin/bash
+
docker exec -it mw-139-db /bin/bash
docker exec -it mw1_27_7-db /bin/bash
+
docker exec -it mw-138-db /bin/bash
 +
docker exec -it mw-135-db /bin/bash
 
</source>
 
</source>
  
Line 434: Line 578:
 
docker cp mw1_36_0_db_1:/tmp/wiki.sql /tmp
 
docker cp mw1_36_0_db_1:/tmp/wiki.sql /tmp
 
</source>
 
</source>
== Stop and Remove all running containers ==
+
== Docker cleanup procedure ==
These commands will stop and remove '''all''' running docker containers (not only the ones created pymediawikidocker/the mwcluster command)
 
 
<source lang='bash'>
 
<source lang='bash'>
 +
#!/bin/bash
 +
# WF 2023-04-08
 +
#
 +
# ⚠️ ⚠️ ⚠️
 +
#
 +
#  kids  don't do this at home ...
 +
#
 +
# ⚠️ These commands will stop and remove all running docker containers (not only the ones created pymediawikidocker/the mwcluster command)
 
# kill/stop all running containers
 
# kill/stop all running containers
 
docker kill $(docker ps -q)
 
docker kill $(docker ps -q)
Line 442: Line 593:
 
# remove all docker containers
 
# remove all docker containers
 
docker rm $(docker ps -aq)
 
docker rm $(docker ps -aq)
</source>
 
=== Recreate Clean docker state ===
 
⚠️ This command will remove all your images not only the ones created by pymediawikidocker (docker will hopefully refuse to do this without the -f option)
 
<source lang='bash'>
 
 
# remove all images
 
# remove all images
 +
# ⚠️ This command will remove all your images not only the ones created by pymediawikidocker (docker will hopefully refuse to do this without the -f option)
 
docker rmi $(docker images -q)
 
docker rmi $(docker images -q)
 +
# ⚠️ these commands will remove all your volumes - you might loose valuable data if you don't check what your volumes contain before starting this command
 +
# see https://stackoverflow.com/a/46091568/1497139
 +
docker volume rm $(docker volume ls -qf dangling=true | xargs)
 +
#⚠️ WARNING! This will remove:
 +
#  - all stopped containers
 +
#  - all networks not used by at least one container
 +
#  - all dangling images
 +
#  - all dangling build cache
 +
docker system prune --force
 
</source>
 
</source>
  
 
= Links =
 
= Links =
 
* [https://www.wikidata.org/wiki/Q83 Wikidata entry for Mediawiki software]
 
* [https://www.wikidata.org/wiki/Q83 Wikidata entry for Mediawiki software]

Revision as of 16:06, 2 August 2024

OsProject

OsProject
edit
id  pymediawikidocker
state  active
owner  WolfgangFahl
title  pymediawikidocker
url  https://github.com/WolfgangFahl/pymediawikidocker
version  0.13.0
description  Python controlled mediawiki docker image installation
date  2024-08-02
since  2021-06-08
until  

tickets

Motivation

Official Mediawiki docker images are available for the different Mediawiki versions.

These images need additional infrastructure to create useable Mediawiki environments.

docker run --name local-mediawiki -p 8080:80 -d mediawiki

will only install part of a LAMP environment to install Mediawiki and make it available via http://localhost:8080/. E.g. the database needs to be installed separately.

The goal of this project is to semi-automatically create such environments and test the functionality. Python was choosen as a development environment for the libraries that are needed and available to perform the tasks:

python on whales was chosen over:

Since it works on the command line interface and not via the SDK and supports docker compose.

How it works

The core concept is a "MediawikiCluster" that is a set of docker applications that run MediaWiki instances with varying versions of MediaWiki and the underlying database. The graphic belows shows the docker containers which are created for different versions of Mediawiki

Installation

Prerequisites

Docker on Windows, Mac or Linux suppporting "docker compose up" using the Docker composer V2 CLI

Ubuntu 22.04 LTS installation

see https://docs.docker.com/engine/install/ubuntu/ on how to setup the docker repositorysudo

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
docker --version
Docker version 23.0.2, build 569dd73
docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.

...

Compatibility test

# test on a Mac OS machine 2022-07-02
docker 2>&1 | grep compose
  compose*    Docker Compose (Docker Inc., v2.4.1)
# test on an Ubuntu machine 2023-04-07
docker 2>&1 | grep compose
 compose*    Docker Compose (Docker Inc., v2.17.2)

Installation of Docker Compose V2 CLI

lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 22.04.e LTS
Release:	22.04
Codename:	jammy

docker-ce from docker repo

# Update existing list of packages
sudo apt update

# Install prerequisite packages which let apt use packages over HTTPS
sudo apt install apt-transport-https ca-certificates curl software-properties-common

# Add Docker’s official GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# Add Docker repository to APT sources
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

# Update the package database with Docker packages from the newly added repo
sudo apt update

# Make sure you are about to install from the Docker repo instead of the default Ubuntu repo
apt-cache policy docker-ce

# Install Docker CE
sudo apt install docker-ce

docker compose (not docker-compose)

docker compose version
Docker Compose version v2.26.1
sudo apt  install docker-compose
docker-compose version
docker-compose version 1.29.2, build unknown
docker-py version: 5.0.3
CPython version: 3.10.12
OpenSSL version: OpenSSL 3.0.2 15 Mar 2022
which docker-compose
/usr/bin/docker-compose

pymediawikidocker installation via pip

pip install pymediawikidocker
# alternatively if your pip is not a python3 pip
pip3 install pymediawikidocker

upgrade

pip install pymediawikidocker -U
# alternatively if your pip is not a python3 pip
pip3 install pymediawikidocker -U

check version

mwcluster -V
mwcluster (v0.13.0,2024-08-02)

Usage

mwcluster -h
usage: mwcluster [-h] [-cn CONTAINER_NAME] [-d] [-el [EXTENSIONNAMELIST ...]]
                 [-ej EXTENSIONJSONFILE] [-f] [-fu] [--host HOST]
                 [-dp DOCKER_PATH] [--logo LOGO] [-mv MARIADBVERSION]
                 [--mysqlPassword MYSQLPASSWORD] [-rp] [-p PASSWORD]
                 [-pl PASSWORD_LENGTH] [--prefix PREFIX] [--prot PROT]
                 [--script_path SCRIPT_PATH] [--url URL] [-sp SQL_PORT]
                 [-smw SMW_VERSION] [-u USER] [-q] [-bp BASE_PORT]
                 [-vl [VERSIONS ...]] [--about] [--create] [--down] [--check]
                 [--list] [-V]

Copyright 2020-2023 contributors. All rights reserved. Licensed under the
Apache License 2.0 http://www.apache.org/licenses/LICENSE-2.0 Distributed on
an "AS IS" basis without warranties or conditions of any kind, either express
or implied.

options:
  -h, --help            show this help message and exit
  -cn CONTAINER_NAME, --container_name CONTAINER_NAME
                        set container name (only valid and recommended for
                        single version call) (default: mw-139)
  -d, --debug           enable debug mode [default: False]
  -el [EXTENSIONNAMELIST ...], --extensionList [EXTENSIONNAMELIST ...]
                        list of extensions to be installed [default: ['Admin
                        Links', 'Header Tabs', 'SyntaxHighlight',
                        'Variables']]
  -ej EXTENSIONJSONFILE, --extensionJson EXTENSIONJSONFILE
                        additional extension descriptions default: [default:
                        None]
  -f, --forceRebuild    force rebuilding [default: False]
  -fu, --force_user     force overwrite of wikiuser (default: False)
  --host HOST           the host to serve / listen from [default:
                        fix.bitplan.com]
  -dp DOCKER_PATH, --docker_path DOCKER_PATH
                        the base directory to store docker and jinja template
                        files [default: /Users/wf/.pymediawikidocker]
  --logo LOGO           set Logo [default:
                        $wgResourceBasePath/resources/assets/wiki.png]
  -mv MARIADBVERSION, --mariaDBVersion MARIADBVERSION
                        mariaDB Version to be installed [default: 10.11]
  --mysqlPassword MYSQLPASSWORD
                        set sqlRootPassword [default: None] - random password
                        if None
  -rp, --random_password
                        create random password and create wikiuser while at it
                        (default: False)
  -p PASSWORD, --password PASSWORD
                        set password for initial user [default: sysop-1234!]
  -pl PASSWORD_LENGTH, --password_length PASSWORD_LENGTH
                        set the password length for random passwords[default:
                        15]
  --prefix PREFIX       the container name prefix to use [default: mw]
  --prot PROT           change to https in case [default: http]
  --script_path SCRIPT_PATH
                        change to any script_path you might need to set
                        [default: ]
  --url URL             will set prot host,script_path, and optionally port
                        based on the url given [default: None]
  -sp SQL_PORT, --sql_base_port SQL_PORT
                        set base mySql port 3306 to be exposed - incrementing
                        by one for each version [default: 9306]
  -smw SMW_VERSION, --smw_version SMW_VERSION
                        set SemanticMediaWiki Version to be installed default
                        is None - no installation of SMW (default: None)
  -u USER, --user USER  set username of initial user with sysop rights
                        [default: Sysop]
  -q, --quiet           not verbose [default: False]
  -bp BASE_PORT, --base_port BASE_PORT
                        set how base html port 80 to be exposed - incrementing
                        by one for each version [default: 9080]
  -vl [VERSIONS ...], --version_list [VERSIONS ...]
                        mediawiki versions to create docker applications for
                        [default: ['1.35.13', '1.38.6', '1.39.7', '1.40.3',
                        '1.41.1']]
  --about               show about info [default: False]
  --create              create wikis [default: False]
  --down                shutdown wikis [default: False]
  --check               check the wikis [default: False]
  --list                list the wikis [default: False]
  -V, --version         show program's version number and exit

Examples

Pymediawikidocker_example_2022-10-26

create with default settings

Starts a cluster with versions 1.35.13,1.38.6 and 1.39.8, 1.40.4, 1.41.2 and 1.42.1 using MariaDB 10.11. Essentially this is automatic generation of the configuration with a docker compose up for all versions asked for.

mwcluster --create -f
creating docker compose applications for mediawiki versions ['1.35.13', '1.38.6', '1.39.8', '1.40.4', '1.41.2', '1.42.1']
...
Initializing MediaWiki SQL tables
Executing docker command /root/installExtensions.sh
Executing docker command /root/initdb.sh
Executing docker command /root/update.sh
Executing docker command /root/addSysopUser.sh
Executing docker command /root/addCronTabEntry.sh
...

Mediawiki applications will be available at

http://localhost:9080 http://localhost:9080/index.php/Special:Version

http://localhost:9081 http://localhost:9081/index.php/Special:Version

http://localhost:9082 http://localhost:9082/index.php/Special:Version

http://localhost:9083 http://localhost:9083/index.php/Special:Version

http://localhost:9084 http://localhost:9084/index.php/Special:Version

http://localhost:9085 http://localhost:9085/index.php/Special:Version

check

mwcluster --check -f
checking docker access for mediawiki versions ['1.35.13', '1.38.6', '1.39.8', '1.40.4', '1.41.2', '1.42.1']
1:checking 1.35.13 ...
mediawiki webserver container mw-135-mw:✅
mediawiki database container mw-135-db:✅
port binding 9080= expected  port 9080?:✅
Checking http://fixit.bitplan.com:9080/index.php/Special:Version ...
Special Version accessible ...:✅
Mediawiki Version 1.35.13= expected  1.35.13?:✅
Maria DB Version 10.11 fitting expected 10.11?:✅
2:checking 1.38.6 ...
mediawiki webserver container mw-138-mw:✅
mediawiki database container mw-138-db:✅
port binding 9081= expected  port 9081?:✅
Checking http://fixit.bitplan.com:9081/index.php/Special:Version ...
Special Version accessible ...:✅
Mediawiki Version 1.38.6= expected  1.38.6?:✅
Maria DB Version 10.11 fitting expected 10.11?:✅
3:checking 1.39.8 ...
mediawiki webserver container mw-139-mw:✅
mediawiki database container mw-139-db:✅
port binding 9082= expected  port 9082?:✅
Checking http://fixit.bitplan.com:9082/index.php/Special:Version ...
Special Version accessible ...:✅
Mediawiki Version 1.39.8= expected  1.39.8?:✅
Maria DB Version 10.11 fitting expected 10.11?:✅
4:checking 1.40.4 ...
mediawiki webserver container mw-140-mw:✅
mediawiki database container mw-140-db:✅
port binding 9083= expected  port 9083?:✅
Checking http://fixit.bitplan.com:9083/index.php/Special:Version ...
Special Version accessible ...:✅
Mediawiki Version 1.40.4= expected  1.40.4?:✅
Maria DB Version 10.11 fitting expected 10.11?:✅
5:checking 1.41.2 ...
mediawiki webserver container mw-141-mw:✅
mediawiki database container mw-141-db:✅
port binding 9084= expected  port 9084?:✅
Checking http://fixit.bitplan.com:9084/index.php/Special:Version ...
Special Version accessible ...:✅
Mediawiki Version 1.41.2= expected  1.41.2?:✅
Maria DB Version 10.11 fitting expected 10.11?:✅
6:checking 1.42.1 ...
mediawiki webserver container mw-142-mw:✅
mediawiki database container mw-142-db:✅
port binding 9085= expected  port 9085?:✅
Checking http://fixit.bitplan.com:9085/index.php/Special:Version ...
Special Version accessible ...:✅
Mediawiki Version 1.42.1= expected  1.42.1?:✅
Maria DB Version 10.11 fitting expected 10.11?:✅

down

mwcluster --down -f
running docker compose down for mediawiki versions ['1.35.13', '1.38.6', '1.39.8', '1.40.4', '1.41.2', '1.42.1']
running docker compose down for mw-135 1.35.13 docker application ...
[+] Running 6/6
 ✔ Container mw-135-mw       Removed                                       1.1s 
 ✔ Container mw-135-db       Removed                                       0.5s 
 ✔ Volume mw-135_wiki-etc    Removed                                       0.3s 
 ✔ Volume mw-135_mysql-data  Removed                                       0.3s 
 ✔ Volume mw-135_wiki-www    Removed                                       0.3s 
 ✔ Network mw-135_default    Removed                                       0.1s 
running docker compose down for mw-138 1.38.6 docker application ...
[+] Running 6/6
 ✔ Container mw-138-mw       Removed                                       1.2s 
 ✔ Container mw-138-db       Removed                                       0.5s 
 ✔ Volume mw-138_wiki-etc    Removed                                       0.0s 
 ✔ Volume mw-138_mysql-data  Removed                                       0.0s 
 ✔ Volume mw-138_wiki-www    Removed                                       0.4s 
 ✔ Network mw-138_default    Removed                                       0.1s 
running docker compose down for mw-139 1.39.8 docker application ...
[+] Running 6/6
 ✔ Container mw-139-mw       Removed                                       1.2s 
 ✔ Container mw-139-db       Removed                                       0.5s 
 ✔ Volume mw-139_wiki-www    Removed                                       0.3s 
 ✔ Volume mw-139_wiki-etc    Removed                                       0.3s 
 ✔ Volume mw-139_mysql-data  Removed                                       0.3s 
 ✔ Network mw-139_default    Removed                                       0.1s 
running docker compose down for mw-140 1.40.4 docker application ...
[+] Running 6/6
 ✔ Container mw-140-mw       Removed                                       1.2s 
 ✔ Container mw-140-db       Removed                                       0.5s 
 ✔ Volume mw-140_wiki-etc    Removed                                       0.0s 
 ✔ Volume mw-140_mysql-data  Removed                                       0.0s 
 ✔ Volume mw-140_wiki-www    Removed                                       0.4s 
 ✔ Network mw-140_default    Removed                                       0.1s 
running docker compose down for mw-141 1.41.2 docker application ...
[+] Running 6/6
 ✔ Container mw-141-mw       Removed                                       1.2s 
 ✔ Container mw-141-db       Removed                                       0.5s 
 ✔ Volume mw-141_mysql-data  Removed                                       0.4s 
 ✔ Volume mw-141_wiki-etc    Removed                                       0.4s 
 ✔ Volume mw-141_wiki-www    Removed                                       0.4s 
 ✔ Network mw-141_default    Removed                                       0.1s 
running docker compose down for mw-142 1.42.1 docker application ...
[+] Running 6/6
 ✔ Container mw-142-mw       Removed                                       1.2s 
 ✔ Container mw-142-db       Removed                                       0.5s 
 ✔ Volume mw-142_wiki-www    Removed                                       0.4s 
 ✔ Volume mw-142_mysql-data  Removed                                       0.0s 
 ✔ Volume mw-142_wiki-etc    Removed                                       0.0s 
 ✔ Network mw-142_default    Removed                                       0.1s

Single 1.35.13 LTS

# python mwdocker/mwcluster.py  can be used instead of mwcluster if you test from your locally cloned environment
mwcluster \
  --create \
  --forceRebuild\
  --version_list 1.35.13\
  --base_port 8480\
  --sql_base_port 10306\
  --mariaDBVersion 10.11\
  --container_name mw135lts\
  --logo https://upload.wikimedia.org/wikipedia/commons/thumb/f/f9/Bigsmile_smiley_yellow_simple.svg/128px-Bigsmile_smiley_yellow_simple.svg.png
creating docker compose applications for mediawiki versions ['1.35.13']
starting mw135lts 1.35.13 docker application ..

Mediawiki application will be available at

http://localhost:8480 http://localhost:8480/index.php/Special:Version PyMediaWikiDocker-ExampleMW135WithLogo.png

Single 1.35 with Semantic Mediawiki

There might be more current versions of SMW available see https://www.semantic-mediawiki.org/wiki/Semantic_MediaWiki_Version_History and adapt the example below if you see the need to do so.

Version 4.1.2

mwcluster \
  --create \
  --container_name smw4\
  --forceRebuild\
  --version_list 1.35.13\
  --base_port 8481\
  --sql_base_port 10307\
  --mariaDBVersion 10.11\
  --smw_version 4.1.2
creating docker compose applications for mediawiki versions ['1.35.13']
starting smw4 1.35.13 docker application ...

debug docker compose results - ports and other configuration parts

cd ~/.pymediawikidocker/smw4
docker-compose up
# in another terminal session:
docker ps
CONTAINER ID   IMAGE                   COMMAND                  CREATED              STATUS         PORTS                     NAMES
87a795d444eb   smw4_mw                 "docker-php-entrypoi…"   About a minute ago   Up 7 seconds   0.0.0.0:8481->80/tcp      smw4-mw
7ca3a0434d31   mariadb:10.11           "docker-entrypoint.s…"   About a minute ago   Up 7 seconds   0.0.0.0:10307->3306/tcp   smw4-db

open bash in docker container

docker exec -it smw4-mw /bin/bash
root@87a795d444eb:/var/www/html#

check installExtensions.sh script

cat /root/installExtensions.sh 
#!/bin/bash
# install the required extensions
# WF 2021-06-23
cd /var/www/html/extensions

# Admin Links
# https://www.mediawiki.org/wiki/Extension:Admin_Links
git clone https://github.com/wikimedia/mediawiki-extensions-AdminLinks --single-branch --branch REL1_35 AdminLinks

# Header Tabs
# https://www.mediawiki.org/wiki/Extension:Header_Tabs
git clone https://github.com/wikimedia/mediawiki-extensions-HeaderTabs --single-branch --branch REL1_35 HeaderTabs

# SyntaxHighlight
# https://www.mediawiki.org/wiki/Extension:SyntaxHighlight
# no installation script command specified

# Variables
# https://www.mediawiki.org/wiki/Extension:Variables
git clone https://github.com/wikimedia/mediawiki-extensions-Variables --single-branch --branch REL1_35 Variables

check Semantic MediaWiki settings in LocalSettings.php

grep -i semantic LocalSettings.php 
# enable Support for Semantic MediaWiki
# see https://www.semantic-mediawiki.org/wiki/Help:EnableSemantics
# Version of SemanticMediaWiki at install time: 4.1.1
wfLoadExtension( 'SemanticMediaWiki' );
enableSemantics();
# https://www.semantic-mediawiki.org/wiki/Help:$smwgQMaxInlineLimit

SMW Version 3.2.3

Installation

mwcluster \
  --create \
  --container_name smw3\
  --forceRebuild\
  --version_list 1.35.13\
  --base_port 8482\
  --sql_base_port 10308\
  --mariaDBVersion 10.11\
  --logo https://www.semantic-mediawiki.org/w/images/4/4e/SMW_logo_180.png\
  --smw_version 3.2.3

Check

mwcluster --check --container_name smw3 --version_list 1.35.13

Down

mwcluster --down --container_name smw3 --version_list 1.35.13 -f
running docker compose down for mediawiki versions ['1.35.13']
running docker compose down for smw3 1.35.10 docker application ...
[+] Running 3/3
 ⠿ Volume smw3_wiki-etc    Removed                                0.0s
 ⠿ Volume smw3_mysql-data  Removed                                0.1s
 ⠿ Volume smw3_wiki-www    Removed                                1.2s

Extensions

see Pymediawikidocker/Extensions

Debugging

Docker files

You'll find the files created by pymediawikidocker in ".pymediawikidocker" in your homedirectory.

pwd
/Users/***/.pymediawikidocker/mw1_35_2
ls -l
total 176
-rw-r--r--  1 wf  staff   1057 22 Jun 07:03 Dockerfile
-rw-r--r--  1 wf  staff   4580 22 Jun 07:03 LocalSettings.php
-rw-r--r--  1 wf  staff   1161 22 Jun 07:03 docker-compose.yml
-rw-r--r--  1 wf  staff    317 22 Jun 07:03 initdb.sh
-rw-r--r--  1 wf  staff    125 22 Jun 07:03 phpinfo.php
-rw-r--r--  1 wf  staff  64515 22 Jun 07:03 wiki.sql

Check installed docker images

docker images | grep mw
mw-142-mw     latest    13e469c7d859   54 minutes ago      1.17GB
mw-141-mw     latest    99578ea06019   55 minutes ago      1.2GB
mw-140-mw     latest    d84a2410dbea   56 minutes ago      1.13GB
mw-139-mw     latest    f83c36dee73d   58 minutes ago      1.06GB
mw-138-mw     latest    8bfb68343139   59 minutes ago      1.03GB
mw-135-mw     latest    bf7ae8fe499c   About an hour ago   1.03GB

Bash into docker containers

# Mediawiki container
docker exec -it mw-142-mw /bin/bash
docker exec -it mw-141-mw /bin/bash
docker exec -it mw-140-mw /bin/bash
docker exec -it mw-139-mw /bin/bash
docker exec -it mw-138-mw /bin/bash
docker exec -it mw-135-mw /bin/bash

# MariaDB container
docker exec -it mw-142-db /bin/bash
docker exec -it mw-141-db /bin/bash
docker exec -it mw-140-db /bin/bash
docker exec -it mw-139-db /bin/bash
docker exec -it mw-138-db /bin/bash
docker exec -it mw-135-db /bin/bash

Monkey patching

# Enable raw html in for the wiki
docker exec  mw1_35_8-mw sh -c "echo '\$wgRawHtml = true;\n' >> /var/www/html/LocalSettings.php"

No space left on device issue

e.g. when starting mariadb container see https://stackoverflow.com/questions/37645879/how-can-i-fix-docker-mac-no-space-left-on-device-error

Wiki Backup

The passwords are available from the docker files e.g.

grep PASS docker-compose.yml 
      MYSQL_PASSWORD: "TnbKf2zGRmZPjUvz7B"
      MYSQL_ROOT_PASSWORD: "QWehnR9yLMY7YAb9pw"

In a docker bash a dump can be created

mysqldump wiki -u wikiuser --password=TnbKf2zGRmZPjUvz7B > /tmp/wiki.sql

and then copied to your local machine

docker cp mw1_36_0_db_1:/tmp/wiki.sql /tmp

Docker cleanup procedure

#!/bin/bash
# WF 2023-04-08
# 
# ⚠️ ⚠️ ⚠️ 
#
#  kids  don't do this at home ...
#
# ⚠️ These commands will stop and remove all running docker containers (not only the ones created pymediawikidocker/the mwcluster command) 
# kill/stop all running containers
docker kill $(docker ps -q)
#docker stop $(docker ps -aq)
# remove all docker containers
docker rm $(docker ps -aq)
# remove all images
# ⚠️ This command will remove all your images not only the ones created by pymediawikidocker (docker will hopefully refuse to do this without the -f option) 
docker rmi $(docker images -q)
# ⚠️ these commands will remove all your volumes - you might loose valuable data if you don't check what your volumes contain before starting this command 
# see https://stackoverflow.com/a/46091568/1497139
docker volume rm $(docker volume ls -qf dangling=true | xargs)
#⚠️ WARNING! This will remove:
#  - all stopped containers
#  - all networks not used by at least one container
#  - all dangling images
#  - all dangling build cache
docker system prune --force

Links