MediaWiki Install 2022-09-01
- Previous Version: https://wiki.traxel.com/index.php/MediaWiki_Install_2022-01-22
Notes
Additional Modules
- Survey Extension, should work well for HeatSync
- https://www.mediawiki.org/wiki/Extension:Survey
- "Not working on any current version of MediaWiki"
- Tested, verified not working.
- I sure would like to have a survey tool that ran outside the oligarchy.
Create a Host
I'm not going to document this part. Pick your favorite hosting service and create a Debian 10 host.
If your provider supports it, get a permanent IP address and point it at the new host. This will let you blow away the host, create a new one, point the IP at the new host, and redo the install without having to update the DNS entry and wait for the cascade.
If your provider has default-deny firewalling, make sure ports 22, 80, and 443 are open, which will allow SSH, HTTP, and HTTPS, respectively.
Note the IP address.
IP: 35.160.237.84
System Update and Core Software
Following is based, in part, on MediaWiki Installation Requirements.
Log in to your host.
Create the setup script:
$ mkdir bin $ cat > bin/system-update.sh sudo apt update -y sudo apt upgrade -y sudo apt install -y emacs-nox sudo apt install -y apache2 certbot python3-certbot-apache sudo apt install -y mariadb-server php php-mysql libapache2-mod-php sudo apt install -y php-xml php-mbstring php-apcu php-intl php-cli php-curl sudo apt install -y git imagemagick texlive
Control-d will exit and save the file.
$ chmod ug+x bin/system-update.sh $ ./bin/system-update.sh
If you're not sure that it all ran correctly, you can safely re-run the script. You'll know it ran correctly if the output is roughly 40 lines saying things like, "already the newest", "0 upgraded", and "... Done".
MediaWiki Tarball
I am installing from the tarball instead of using the Debian package because other package tools, like RPM or Snap, or other distros than Debian, might put directories in different places. Following the MediaWiki tarball instructions should be close to universal.
$ mkdir apps $ cd apps $ wget https://releases.wikimedia.org/mediawiki/1.38/mediawiki-1.38.2.tar.gz
One difference on other distros may be the location of web content directories. Debian puts them in /var/www. Adjust the following commands to match your distro's structure if you're not using Deb 10.
I'm moving the stock Apache site to a directory for static content, and linking mediawiki to the wiki engine directory. The symlink will make it a bit easier to upgrade to the next version of MediaWiki.
$ cd /var/www $ sudo tar -xvzf ~/apps/mediawiki-1.38.2.tar.gz $ sudo mv html static $ sudo ln -s mediawiki-1.38.2 mediawiki
Configure MariaDB
Pick a username for MediaWiki to use (I'm using wiki_wiki as an example).
Pick a database name (I'm using traxel_wiki as an example).
Pick a password other than "CHANGE THIS PASSWORD".
$ cd ~/bin $ sudo cat > mariadb-wiki-account.sh create database traxel_wiki; grant all on traxel_wiki.* to 'wiki_wiki'@'localhost' identified by 'CHANGE THIS PASSWORD'; flush privileges;
Control-D to write the file.
$ sudo mariadb < mariadb-wiki-account.sh
Then you can verify it worked if you like. (there won't be any tables, but it shouldn't give you an auth error)
$ mariadb -u wiki_wiki -p MariaDB> show tables in traxel_wiki; MariaDB> exit
Configure Temporary DNS
This is assuming that there is a legacy wiki running on wiki.domain.com, and you will be bringing up the new machine with the temporary name wiki-new.domain.com. Once you have the new machine running and validated, you will migrate wiki.domain.com to the new machine.
Go to your domain name registrar and add an A Record for the machine and two CNAME records; one for the wiki engine and one for static content. I'm using "jimbo2" as the machine name, you can use whatever you like.
Type | Host | Value | TTL |
---|---|---|---|
A Record | jimbo2 | 35.160.237.84 | Automatic |
CNAME | wiki-new | jimbo2.traxel.com | Automatic |
CNAME | wiki-static-new | jimbo2.traxel.com | Automatic |
It may take a bit to cascade through your resolvers. If you want to be able to hit it immediately, you can update your /etc/hosts file. Add a line like "35.160.237.84 mediawiki.domain.com" but with your IP and domain, after the localhost mappings.
Configure Apache
Next we'll add an Apache config for wiki-new.domain.com that points to the MediaWiki engine, and another for wiki-static-new.domain.com that points to a static content directory.
/etc/apache2/sites-available/wiki-new.conf
<VirtualHost *:80> ServerName wiki-new.traxel.com ServerAdmin webmaster@localhost DocumentRoot /var/www/mediawiki ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
/etc/apache2/sites-available/wiki-static-new.conf
<VirtualHost *:80> ServerName wiki-static-new.traxel.com ServerAdmin webmaster@localhost DocumentRoot /var/www/static ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
Activate Host Configs
Activate the mediawiki conf and bounce the server.
$ sudo a2ensite wiki-static wiki-static-new $ sudo service apache2 restart
Check Sites
Now you should be able to see the two Apache configs at the desired host addresses:
- http://wiki-new.traxel.com/ (should show the MediaWiki logo page with a link to the config script)
- http://wiki-static-new.traxel.com/ (should show the static Apache2 root directory)
If you went through this script quickly, the DNS may not have cascaded yet. You could try editing your /etc/hosts file, or go get a cup of coffee and read Reddit for half an hour, then try again.
Enable TLS (SSL)
To keep your errors easy to diagnose and resolve, do one site at a time and verify / fix errors independently.
$ sudo certbot --apache -d wiki-new.traxel.com
When it asks about redirects, choose, "2: Redirect - Make all requests redirect to secure HTTPS access."
Hit http://wiki-new.traxel.com and verify it redirects to https:// and shows the correct content. If there are any errors, fix them before moving on.
$ sudo certbot --apache -d wiki-static-new.traxel.com
When it asks about redirects, choose, "2: Redirect - Make all requests redirect to secure HTTPS access."
Hit http://wiki-static-new.traxel.com and verify it redirects to https:// and shows the correct content. Fix any errors before moving on.
Run The MediaWiki Config Script
https://wiki-new.traxel.com/mw-config/index.php
The configuration wizard is pretty helpful in most cases. Continue to the advanced questions when it asks if you're getting bored.
On the first advanced options screen, it offers additional editors. I recommend taking them all, since they are each good at different things.
Lower on the same screen is a section for adding your wiki graphics. Doing it now, using the wizard, is much easier than doing it later.
Download the LocalSettings.php file, store a copy of it, and push a copy to the server at /var/www/mediawiki/LocalSettings.php
Bounce Apache to pick up the settings.
$ sudo service apache2 restart
Now the wiki should be live.
LocalSettings.php
Compare the LocalSettings.php from the legacy server with the new LocalSettings.php file.
I used diff and did a line by line check. It was pretty quick and I only found one difference that mattered - I enabled $wgEnableUploads.
I tested image uploads and found that it couldn't write to the images directory (with a rather unhelpful error message).
$ cd /var/www/mediawiki $ sudo chown www-data images
Copy the Database
Stop the old server.
Dump the database.
$ mysqldump -p -u wiki_wiki traxel_wiki | bzip2 > traxel-wiki-dump-2022-09-04t17_49.sql.bz2
Transfer the database dump to the new server.
Prep the database
$ sudo mariadb -u root create database old_wiki; create database new_base_wiki; grant all on old_wiki.* to 'wiki_wiki'@'localhost'; grant all on new_base_wiki.* to 'wiki_wiki'@'localhost'; flush privileges; exit;
Load the database dump into the new server.
$ bzip2 -dc traxel-wiki-dump-2022-09-04t17_49.sql.bz2 | mariadb -p -u wiki_wiki old_wiki
Make a backup of the base wiki that we just created during the MediaWiki installation:
$ mysqldump -p -u wiki_wiki hsl_wiki | bzip2 > base-wiki-dump-2022-09-04t18_16.sql.bz2 $ bzip2 -dc base-wiki-dump-2022-09-04t18_16.sql.bz2 | mariadb -p -u wiki_wiki new_base_wiki
Hunh. I was really expecting more problems, but I just went into LocalSettings.php and flipped the schema name to old_wiki, and everything seems to have just worked.
Set Up Nightly Backups
This script will make the backup available on the static content site. Until the DNS cutover, you can see it at https://wiki-static-new.traxel.com/backups Later it will be available at https://wiki-static.traxel.com/backups .
This assumes that the administrator user account is "admin".
sudo mkdir /var/www/static/backups sudo chown admin /var/www/static/backups
/home/admin/bin/nightly_backup.sh
export db_pass=YOUR_PASSWORD export dstamp=`date +%Y-%m-%d` export bundle_dir=wiki-backup-$dstamp export bundle_path=/tmp/$bundle_dir export dump_path=/tmp/wiki-backup-$dstamp/hsl_wiki.sql.bz2 export conf_path=/tmp/wiki-backup-$dstamp/LocalSettings.php export tarball_path=/var/www/static/backups/wiki-backup.tar.bz2 mkdir -p $bundle_path mysqldump -u wiki_wiki --password=$db_pass hsl_wiki | bzip2 > $dump_path cp /var/www/mediawiki/LocalSettings.php $conf_path sed -i s/$db_pass/YOUR_PASSWORD/ $conf_path tar -C /tmp -cvjf $tarball_path $bundle_dir
Pull Them Somewhere
Backups don't do much good if they're not being stored somewhere. Set up a cron script, maybe on one of HSL's on-prem servers, to periodically pull a copy of the wiki backup.
Switch DNS
Until now, all we had to do was restart Apache on the legacy wiki server to revert. Now we will begin the cutover to the new server.