MediaWiki-Docker/Configuration recipes/Alternative databases
Alternative databasesEdit
The default configuration uses SQLite for the database backend, but you can use MySQL (with replication or without) or Postgres instead.
MySQL (database replication)Edit
These instruction assume a new installation (no LocalSettings.php).
docker-compose.override.yml
version: '3.7'
services:
mariadb-main:
image: 'bitnami/mariadb:latest'
volumes:
- mariadbdata:/bitnami/mariadb
environment:
- MARIADB_REPLICATION_MODE=master
- MARIADB_REPLICATION_USER=repl_user
- MARIADB_REPLICATION_PASSWORD=repl_password
- MARIADB_ROOT_PASSWORD=main_root_password
- MARIADB_USER=my_user
- MARIADB_PASSWORD=my_password
- MARIADB_DATABASE=my_database
mariadb-replica:
image: 'bitnami/mariadb:latest'
depends_on:
- mariadb-main
environment:
- MARIADB_REPLICATION_MODE=slave
- MARIADB_REPLICATION_USER=repl_user
- MARIADB_REPLICATION_PASSWORD=repl_password
- MARIADB_MASTER_HOST=mariadb-main
- MARIADB_MASTER_PORT_NUMBER=3306
- MARIADB_MASTER_ROOT_PASSWORD=main_root_password
volumes:
mariadbdata:
driver: local
Install MediaWiki with the following command:
docker compose exec mediawiki php maintenance/install.php --server=http://localhost:8080 --scriptpath="/w" --dbname=my_database --dbuser=my_user --dbpass=my_password --dbserver=mariadb-main --lang en --pass dockerpass mediawiki admin
After installing, add these snippets so that MediaWiki knows to read from the replica but write to the main database.
LocalSettings.php
$wgDBname = 'my_database';
$dockerMainDb = [
'host' => "mariadb-main",
'dbname' => 'my_database',
'user' => 'root',
'password' => 'main_root_password',
'type' => "mysql",
'flags' => DBO_DEFAULT,
'load' => 0,
];
$dockerReplicaDb = [
'host' => "mariadb-replica",
'dbname' => 'my_database',
'user' => 'root',
'password' => 'main_root_password',
'type' => "mysql",
'flags' => DBO_DEFAULT,
'max lag' => 60,
'load' => 1,
];
// Integration tests fail when run with replication, due to not having the temporary tables.
if ( !defined( 'MW_PHPUNIT_TEST' ) ) {
$wgDBservers = [ $dockerMainDb, $dockerReplicaDb ];
} else {
$wgDBserver = $dockerMainDb['host'];
$wgDBuser = $dockerMainDb['user'];
$wgDBpassword = $dockerMainDb['password'];
$wgDBtype = $dockerMainDb['type'];
}
MySQL (single database server)Edit
Better support for this will be built in to the existing dev-image and its tooling. |
These instruction assume a new installation (no LocalSettings.php).
docker-compose.override.yml
version: '3.7'
services:
database:
image: mariadb
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: 1
volumes:
- ./cache/dbdata:/var/lib/mysql
volumes:
dbdata:
driver: local
Install MediaWiki with the following command:
docker compose exec mediawiki /bin/bash -c 'php maintenance/install.php --server="${MW_SERVER}" --scriptpath="${MW_SCRIPT_PATH}" --dbuser root --dbserver database --lang en --skins=Vector --with-extensions --pass ${MEDIAWIKI_PASSWORD} my_wiki ${MEDIAWIKI_USER}'
Postgres (single database server)Edit
These instruction assume a new installation (no LocalSettings.php).
docker-compose.override.yml
version: '3.7'
services:
database:
image: postgres
environment:
POSTGRES_PASSWORD: example
volumes:
- dbdata:/var/lib/postgresql/data
volumes:
dbdata:
driver: local
To install the MediaWiki database tables, use:
docker compose exec mediawiki php maintenance/install.php --dbuser postgres --dbpass example --dbserver database --dbtype postgres --lang en --pass dockerpass mediawiki admin