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 = 35Enable 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! :-)