Local MediaWiki on macOS
This page explains how to install MediaWiki on macOS. MediaWiki offers a robust platform that’s perfect for users seeking a personal knowledge management system. The installation process will cover setting up MariaDB, PHP, Apache 2, and finally MediaWiki itself.
Installation
Install MariaDB
Install MariaDB as a service:
# install mariadb as a service
brew install mariadb
brew services start mariadbConnect to restore the database:
sudo mysql -u rootAt the MariaDB prompt:
# alter mariadb root password
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MySecretPassword';
FLUSH PRIVILEGES;
EXITRun brew services to verify the service started:
Name Status User File
mysql started jano ~/Library/LaunchAgents/homebrew.mxcl.mysql.plistInstall PHP 7.4
Install PHP as a service:
# Install PHP 7.4.3 required by Mediawiki but not supported by homebrew
brew tap shivammathur/php
brew install shivammathur/php/php@7.4
brew link php@7.4
# start the FastCGI daemon for PHP
brew services start php@7.4Run brew services to verify the service started:
Name Status User File
httpd started jano ~/Library/LaunchAgents/homebrew.mxcl.httpd.plist
php@7.4 started jano ~/Library/LaunchAgents/homebrew.mxcl.php@7.4.plist
unbound noneFor additional configuration, see the php.ini file:
% php --ini
Configuration File (php.ini) Path: /opt/homebrew/etc/php/7.4
Loaded Configuration File: /opt/homebrew/etc/php/7.4/php.ini
Scan for additional .ini files in: /opt/homebrew/etc/php/7.4/conf.d
Additional .ini files parsed: /opt/homebrew/etc/php/7.4/conf.d/ext-opcache.iniInstall Apache 2
Install Apache 2 as a service:
brew install apache2
brew services start httpdRun brew services to verify the service started:
Name Status User File
httpd started jano ~/Library/LaunchAgents/homebrew.mxcl.httpd.plist
unbound noneFor additional configuration, see the conf files at:
/opt/homebrew/etc/httpd/httpd.conf
/opt/homebrew/etc/httpd/extra/httpd-ssl.confInstall MediaWiki
Download latest version and unzip at /Users/jano/MediaWiki/notes.
cd ~
mkdir MediaWiki
cd MediaWiki
curl -L -o mediawiki-1.40.0.zip https://releases.wikimedia.org/mediawiki/1.40/mediawiki-1.40.0.zip
unzip mediawiki-1.40.0.zip .
mv mediawiki-1.40.0 notesInstall dependencies
brew install imagemagickOr, if you want to restore a previous version, see Restore backup.
Configure Apache 2
Edit /opt/homebrew/etc/httpd/httpd.conf:
ServerRoot "/opt/homebrew/opt/httpd"
Listen 80
LoadModule php7_module /opt/homebrew/opt/php@7.4/lib/httpd/modules/libphp7.so
ServerAdmin jano@jano.dev
ServerName jano.notes:80
DocumentRoot "/Users/jano/MediaWiki/notes"
<Directory "/Users/jano/MediaWiki/notes">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
# replace existing IfModule dir_module
<IfModule php_module>
<FilesMatch .php$>
SetHandler application/x-httpd-php
</FilesMatch>
<IfModule dir_module>
DirectoryIndex index.html index.php
</IfModule>
</IfModule>
<IfModule !php_module>
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
</IfModule>Create a file /Users/jano/Developer/mediawiki/notes/index.php with the content below and restart Apache 2.
<?php phpinfo(); ?>Domain indirection
We’ll use the made-up domain jano.notes to serve the website locally. If we need to relocate to another domain, looking for instances of our made-up domain will facilitate the process.
Add the line below to /etc/hosts. You will need sudo.
127.0.0.1 jano.notesSet these values in /Users/jano/Developer/mediawiki/notes/LocalSettings.php:
$wgServer = "http://jano.notes";
$wgDBserver = "jano.notes";Set this value in /opt/homebrew/etc/httpd/httpd.conf:
ServerName jano.notes:80Speed up MediaWiki
File cache
The file cache stores parsed pages, internationalization, and user sessions. This will greatly improve reading unchanged information. Note that if you edit one section of a big page, the other sections remain unchanged, so the edited page will appear faster than without caching. If your MediaWiki shows “Parser profiling data” at the bottom of the page, take a look before and after.
File caching greatly decreases CPU usage using a hosted MediaWiki with a limited CPU quota. The recommended minimum requirement for MediaWiki is 256MB of RAM for a single-computer website and 85MB of storage. Keep this in mind when choosing a hosted installation since increasing your memory may be more effective than increasing your CPU.
The default value of wgMainCacheType is none. Installing Memcached for a personal website is not worth it, and Opcache is not supported, so I will install APCu (APC User Cache).
Because MediaWiki requires PHP 7.4.33 and that version is not maintained in homebrew, I had to install a tap from shivammathur/homebrew-php. This tap lacks the pcre2 header, so I had to install it and add it to the PHP include folder. Be careful here; paths may be different in your machine.
brew install pcre2
find $(brew --prefix)/Cellar/pcre2 -name "pcre2.h"
ln -s /opt/homebrew/Cellar/pcre2/10.42/include/pcre2.h /opt/homebrew/Cellar/php@7.4/7.4.33_4/include/php/ext/pcre/pcre2.hAt this point, I could build APCu using PECL:
pecl install apcuConfigure LocalSettings.php:
# APCu
$wgMainCacheType = CACHE_ACCEL;
$wgSessionCacheType = CACHE_ACCEL;
$wgMessageCacheType = CACHE_ACCEL;
Now load phpinfo.php and see if it contains an apcu extension. The default configuration can be changed in php.ini.PHP opcode cache
OPCache is a cache for compiled PHP code. It ships with a default configuration of 128 MB, which I found was enough for a single user. I explain here how to configure it, but the default settings are fine.
Check OPcache is enabled.
% php -v | grep OPcache
with Zend OPcache v7.4.33, Copyright (c), by Zend TechnologiesCheck the location of the php.ini file:
% php --ini
Configuration File (php.ini) Path: /opt/homebrew/etc/php/7.4
Loaded Configuration File: /opt/homebrew/etc/php/7.4/php.ini
Scan for additional .ini files in: /opt/homebrew/etc/php/7.4/conf.d
Additional .ini files parsed: /opt/homebrew/etc/php/7.4/conf.d/ext-opcache.iniEdit ext-opcache.ini and add the configuration below. Do not add it in php.ini, or it will be ignored.
[opcache]
; load opcache
zend_extension="/opt/homebrew/opt/php@7.4/lib/php/20190902/opcache.so"
; enable opcache
opcache.enable=1
; 64Mb for compiled PHP code
opcache.memory_consumption=64
; 8Mb for interned strings
opcache.interned_strings_buffer=8
; cache up to 2000 pages
opcache.max_accelerated_files=2000
; check changes on php files every 60 seconds
opcache.revalidate_freq=60
; fast shutdown sequence
opcache.fast_shutdown=1
; enable opcache for PHP scrupts run from the command line
opcache.enable_cli=1Restart Apache
brew services restart httpdTo check the status of OPCache add this opcache.php page to the HTTPD server and load it.