Mediawiki restore
The other day this box went down and I could not access my Mediawiki installation. The box was meant to come back online later on but I really wanted to read the wiki, now. Luckily I had somewhat fresh backups from the mediawiki installation - so why not using them? Just to see how quickly a full restore would take.
So I fired up an openSUSE 12.1 installation, running in a virtual machine. The base system was already installed, a few more packages were needed now:
zypper install nginx mysql-community-server php5-fpm php5-mysql php5-intl php5-gdNote: Mediawiki likes to utilize object caching, such as xcache or APC. However, PHP modules for openSUSE like php-APC or php5-xcache are only available via extra repositories. For the sake of simplicity, let's skip those now.
With these packages installed, their configuration comes next. This may be a bit openSUSE centric and other distributions may work differently.
For PHP-FPM, only the following parts were changed from its original configuration:
$ cp -p /etc/php5/fpm/php-fpm.conf{.default,}
$ cat /etc/php5/fpm/php-fpm.conf
[...]
[global]
pid = /var/run/php-fpm.pid
error_log = /var/log/php-fpm.log
[www]
listen = /var/run/php5-fpm.sock
user = nobody
group = nobody
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
Enable and start PHP-FPM:
chkconfig php-fpm on && service php-fpm startNext up is nginx. A very basic configuration:
$ cat /etc/nginx/nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
use epoll;
}
http {
include mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
# This will access our PHP-FPM installation via a socket
upstream php5-fpm-sock {
server unix:/var/run/php5-fpm.sock;
}
server {
listen 80;
server_name suse0.local;
root /var/www;
index index.html index.php;
autoindex on;
access_log /var/log/nginx/suse0.access.log;
location ~ \.php?$ {
try_files $uri =404;
include fastcgi_params;
fastcgi_pass php5-fpm-sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors on;
}
}
}
Enable and start nginx (and MySQL):
$ chkconfig nginx on && service nginx start $ chkconfig mysql on && service mysql startBy now we should have a working webserver, able to serve PHP pages. Now to the actual Mediawiki installation:
$ cd /var/www
$ wget http://download.wikimedia.org/mediawiki/1.20/mediawiki-1.20.0.tar.gz{,.sig}
Import their GPG keys and verify the signature:
$ wget https://www.mediawiki.org/keys/keys.txt -O - | gpg --import $ gpg --verify mediawiki-1.20.0.tar.gz.sigUnpack:
$ tar -xzf mediawiki-1.20.0.tar.gz $ ln -s mediawiki-1.20.0 mediawiki $ cd mediawikiWith that in place, we could go to
http://suse0.local/mediawiki/ and use the install wizard to install a basic, but empty Mediawiki. Once this is done, we restore a few things from our backup:
$ tar -C ../backup/mediawiki/ -cf - LocalSettings.php extensions images | tar -xvf - $ bzip2 -dc ../backup/DB_wikidb.sql.bz2 | mysql -D wikidbIn our case, a few modifications to LocalSettings.php had to be made:
# We have not yet set up any rewrite rules so short urls # won't work for now ## $wgArticlePath = "/wiki/$1"; # Disable this one for now ## $wgServer = "https://www.example.org"; # Our database details are different of course: $wgDBtype = "mysql"; $wgDBserver = "127.0.0.1"; $wgDBname = "wikidb"; $wgDBprefix = "mw_"; # Our original database used a table prefix! $wgDBuser = "root"; $wgDBpassword = "s3cr3t"; # no APC/Xcache for openSUSE just now ## $wgMainCacheType = CACHE_ACCEL;Also: check those ''extensions'' or disable them if things don't work as expected.
Now, let's run the
update.php script, to address any version differences of our new Mediawiki instance:
$ php maintenance/update.php --conf `pwd`/LocalSettings.phpDone! The Mediawiki installation should now work. If it doesn't, try to set a few more things in
LocalSettings.php:
# At the very top: error_reporting( E_ALL | E_STRICT ); ini_set( 'display_errors', 1 ); $wgShowExceptionDetails = true; $wgShowSQLErrors = true;Good luck! :-)