User:*Surak*/SimpleFarm
This page describes my SimpleFarm experience.
Installation
editI use a MediaWiki 1.19.1 farm with the SimpleFarm 0.1rc extension that contains three wikis (PROJECT1, PROJECT2, PROJECT3) that share the same productive database. A second implementation contains the same wikis sharing a different test database for testing purpose. I keep all settings in a separate directory parallel to the mediawiki installation directory. Every wiki shall be called using a 'pretty' clean URL.
Installation Directories:
http://www.proddomain.com/wikiroot/mediawiki/ http://www.proddomain.com/wikiroot/settings/ http://www.proddomain.com/testroot → http://www.testdomain.com http://www.proddomain.com/testroot/wikiroot/mediawiki/ → http://www.testdomain.com/wikiroot/mediawiki/ http://www.proddomain.com/testroot/wikiroot/settings/ → http://www.testdomain.com/wikiroot/settings/
Wiki URL:
http://www.proddomain.com/project1/Main_page http://www.proddomain.com/project2/Main_page http://www.proddomain.com/project3/Main_page http://www.testdomain.com/project1/Main_page http://www.testdomain.com/project2/Main_page http://www.testdomain.com/project3/Main_page
Settings
editDue to the redirect from www.proddomain.com/testroot/wikiroot to www.testdomain.com/wikiroot, I can use the same setup files with settings in both domains.
/.htaccess
edit# General Options ==============================================================
AddType application/x-httpd-php5 .php .php4 .php5
Options +FollowSymLinks
Options -Indexes
mod_gzip_on Yes
# Rewrite Options ==============================================================
RewriteEngine On
RewriteBase /
# add trailing backslash to directories only
RewriteRule ^((?:.*/)?[^\.]*[^/])$ $1/
# MediaWiki Options ============================================================
# redirect w/o adding index.php
RewriteRule ^(project1|project2|project3)/(.*\.php) wikiroot/mediawiki/$2 [L,PT]
RewriteRule (project1|project2|project3)/(images/.*) wikiroot/mediawiki/$2 [L,PT]
# RewriteRule ^(project1|project2|project3)/(includes/.*) wikiroot/mediawiki/$2 [L,PT]
# RewriteRule ^(project1|project2|project3)/(skins/.*) wikiroot/mediawiki/$2 [L,PT]
# cleanup URL = redirect virtual wiki path to physical wiki path
RewriteRule ^(project1|project2|project3)/(.*)$ wikiroot/mediawiki/index.php?title=$2 [L,PT,QSA]
# no clean URL
# RewriteRule ^(project1|project2|project3)/(.*)$ wikiroot/mediawiki/$2 [L,PT]
/wikiroot/mediawiki/LocalSettings.php
edit<?php
# Protect against web entry
if ( !defined( 'MEDIAWIKI' ) ) {
exit;
}
# Shared settings for the wiki farm
require_once dirname(dirname( __FILE__ )) . '/settings/farm-settings.php';
/wikiroot/settings/farm-settings.php
edit<?php
# All settings in this settings file apply to the whole farm. Since we
# maintain the two farms PROD and TEST, some of the settings are switched
# between them.
# Protect against web entry
if ( !defined( 'MEDIAWIKI' ) ) {
exit;
}
# ------------------------------------------------------------------------------
# Private Settings
# ------------------------------------------------------------------------------
# The following settings includes all used $wp* variables
require_once dirname( __FILE__ ) . '/farm-settings-wpDefines.php';
# ------------------------------------------------------------------------------
# Farm Settings
# ------------------------------------------------------------------------------
require_once( $IP . '/extensions/SimpleFarm/SimpleFarm.php' );
$egSimpleFarmMembers = array(
array(
'name' => 'Project1', # $wgSitename
'scriptpath' => '/project1', # $wgScriptPath
'db' => 'project1', # virtual database
'addresses' => array( $wpDomainNamePROD,
$wpDomainNameTEST ),
'maintain' => false,
),
array(
'name' => 'Project2', # $wgSitename
'scriptpath' => '/project2', # $wgScriptPath
'db' => 'project2', # virtual database
'addresses' => array( $wpDomainNamePROD,
$wpDomainNameTEST ),
'maintain' => false,
),
array(
'name' => 'Project3', # $wgSitename
'scriptpath' => '/project3', # $wgScriptPath
'db' => 'project3', # virtual database
'addresses' => array( $wpDomainNamePROD,
$wpDomainNameTEST ),
'maintain' => false,
),
);
SimpleFarm::init();
$wpCurrentWiki = SimpleFarm::getActiveMember();
# ------------------------------------------------------------------------------
# Domain and Database Settings
# ------------------------------------------------------------------------------
$wpWikiDomainPath = dirname( dirname( dirname( __FILE__ ) ) );
switch( substr( $wpWikiDomainPath, strrpos( $wpWikiDomainPath, '/' ) + 1 ) ) {
case '/':
$wpWikiDomain = 'PROD';
break;
case 'testroot':
$wpWikiDomain = 'TEST';
break;
default:
$wpWikiDomain = 'UNKNOWN';
}
switch ( $wpWikiDomain ) {
case 'PROD':
# DB settings
$wgDBserver = $wpPRODDBServer;
$wgDBname = $wpPRODDBname;
$wgDBadminuser = $wpPRODDBadminuser;
$wgDBadminpassword = $wpPRODDBadminpassword;
$wgDBuser = $wpPRODDBuser;
$wgDBpassword = $wpPRODDBpassword;
$egSimpleFarmMainMemberDB = $wgDBserver;
break;
case 'TEST':
# DB settings
$wgDBserver = $wpTESTDBserver;
$wgDBname = $wpTESTDBname;
$wgDBadminuser = $wpTESTDBadminuser;
$wgDBadminpassword = $wpTESTDBadminpassword;
$wgDBuser = $wpTESTDBuser;
$wgDBpassword = $wpTESTDBpassword;
$egSimpleFarmMainMemberDB = $wgDBserver;
break;
default:
die ( 1 ); # e.g., the backup copy
}
# ------------------------------------------------------------------------------
# Shared Settings
# ------------------------------------------------------------------------------
$wgLocalInterwiki = $wpCurrentWiki->getCfgOption( 'db' );
$wgArticlePath = '/' . $wgLocalInterwiki . '/$1';
$wgUsePathInfo = true;
$wgScriptExtension = '.php';
$wgStylePath = $wgScriptPath . '/skins';
$wgLanguageCode = 'de';
$wgSkipSkins = array( 'chick',
'cologneblue',
'myskin',
'nostalgia',
'simple',
'standard' );
$wgDefaultSkin = 'modern';
$wgEnableEmail = true;
$wgEnableUserEmail = true;
$wgEmergencyContact = 'webmaster@' . $wpDomainName;
$wgPasswordSender = 'webmaster@' . $wpDomainName;
$wgPasswordSenderName = 'Wiki Administrator';
$wgEnotifUserTalk = true;
$wgEnotifWatchlist = true;
$wgEmailAuthentication = true;
$wgDBtype = 'mysql';
$wgDBTableOptions = 'ENGINE=InnoDB, DEFAULT CHARSET=binary';
$wgDBmysql5 = false;
# $wgCacheDirectory = '$IP/cache';
# $wgDisableOutputCompression = true;
$wgMainCacheType = CACHE_NONE;
$wgMemCachedServers = array();
$wgEnableUploads = true;
# $wgHashedUploadDirectory = false;
$wgResourceLoaderMaxQueryLength = -1;
$wgShellLocale = 'en_US.utf8';
$wgDiff = '/bin/diff';
$wgDiff3 = '';
$wgUseImageMagick = true;
$wgImageMagickConvertCommand = '/usr/bin/convert';
$wgUseTeX = false;
$wgUseInstantCommons = true;
$wgEnableCreativeCommonsRdf = true;
$wgRightsPage = ''; # Set to the title of a wiki page that describes your license/copyright
$wgRightsUrl = 'http://creativecommons.org/licenses/by-nc-sa/3.0/';
$wgRightsText = 'Creative Commons „Namensnennung, nicht kommerziell, Weitergabe unter gleichen Bedingungen“';
$wgRightsIcon = '{$wgStylePath}/common/images/cc-by-nc-sa.png';
$wgRightsCode = ''; # Not yet used
# ------------------------------------------------------------------------------
# Shared Extensions & User Rights
# ------------------------------------------------------------------------------
require_once dirname( __FILE__ ) . '/farm-settings-extensions.php';
require_once dirname( __FILE__ ) . '/farm-settings-semantic.php';
require_once dirname( __FILE__ ) . '/farm-settings-privileges.php';
# ------------------------------------------------------------------------------
# Wiki-specific Settings
# ------------------------------------------------------------------------------
switch( $wpCurrentWiki->getCfgOption( 'db' ) ) {
case 'project1':
# put any project-specific settings here; you can overwrite the shared settings here for this wiki
# $wgDBprefix
# $wgSecretKey
# $wgUpgradeKey
$wgEmergencyContact = 'project1@' . $wpDomainName;
$wgPasswordSender = 'project1@' . $wpDomainName;
break;
case 'project2':
# put any project-specific settings here; you can overwrite the shared settings here for this wiki
# $wgDBprefix
# $wgSecretKey
# $wgUpgradeKey
break;
case 'project3':
# put any project-specific settings here; you can overwrite the shared settings here for this wiki
# $wgDBprefix
# $wgSecretKey
# $wgUpgradeKey
break;
default:
echo "WP: No valid wiki defined in 'farm-settings.php'!";
die( 1 );
}
# ------------------------------------------------------------------------------
# End of Settings
# ------------------------------------------------------------------------------
# Unset all $wp* variables
require_once dirname( __FILE__ ) . '/farm-settings-wpUndefines.php';
# Ensure that cached pages are cleared, when you modify this settings file
$wgCacheEpoch = max( $wgCacheEpoch, gmdate( 'YmdHis', @filemtime( __FILE__ ) ) );
# No closing tag for disallowing malware to include commands AFTER the closure.