Running several MediaWiki sites from the same PHP files

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Running several MediaWiki sites from the same PHP files

Rotem Liss
I'm running three MediaWiki sites, and I copy the PHP files from folder
to folder. Can I run them somehow from the same PHP files, so I won't
need to copy and update all the files three times? By the way, how do
you do that in Wikimedia sites - copy the PHP files, or using the same
ones? And how do you do that?

(Of course, using different LocalSettings.php for every site, and
running from other folders.)

rotemliss


_______________________________________________
MediaWiki-l mailing list
[hidden email]
http://mail.wikipedia.org/mailman/listinfo/mediawiki-l
Reply | Threaded
Open this post in threaded view
|

Re: Running several MediaWiki sites from the same PHP files

Rob Church
On 07/04/06, Rotem Liss <[hidden email]> wrote:
> I'm running three MediaWiki sites, and I copy the PHP files from folder
> to folder. Can I run them somehow from the same PHP files, so I won't
> need to copy and update all the files three times? By the way, how do
> you do that in Wikimedia sites - copy the PHP files, or using the same
> ones? And how do you do that?

1. See http://meta.wikimedia.org/wiki/MediaWiki_FAQ#How_do_I_create_a_small_wiki_farm.3F
2. Wikimedia's wiki farm setup is described at
http://wikitech.leuksman.com/view/Wiki_farm


Rob Church
_______________________________________________
MediaWiki-l mailing list
[hidden email]
http://mail.wikipedia.org/mailman/listinfo/mediawiki-l
Reply | Threaded
Open this post in threaded view
|

Re: Running several MediaWiki sites from the same PHP files

Joshua Yeidel
In reply to this post by Rotem Liss
We are working on this right now.  NOTE: You must understand PHP to apply
this approach.

Our basic idea is this:

1) within the MediaWiki install folder, we create a "wsu" folder, to contain
all files we add to MW (that makes it easier to upgrade when a new version
of MW comes out).  

2) Within the "wsu" folder, we make a folder for each wiki.  These folders
are named with the "wikiname" (= sitename) for the wiki.  They might contain
images or whatever is needed by that particular wiki.  They also contain a
file "LocalSettings_".wikiname.".php" which contains any special settings
for that wiki that override or extend the common LocalSettings.php in the
main Mediawiki install folder.  So for "joshwiki", we have a folder
"wsu/joshwiki" which contains "LocalSettings_joshwiki.php".  [The file
doesn't logically need to have the wikiname in its filename, but it makes it
easier to keep track when you're editing.]

2) At the end of LocalSettings.php in the main MW folder, we determine which
wiki was called by parsing the request URI, and store the result in a
superglobal.  [Note that we have a different $wgArticlePath and
$wgScriptPath, in order to manage pretty URL's via our load balancer.
Incoming URL's point to the 'wikishortname' + 'wk';  outgoing URL's point to
'wikishortname' + 'wiki'.]

if (!isset($GLOBALS['wsuWikiname'])) {
     $uri = $_SERVER['REQUEST_URI'];

#    find first element of called URI
     preg_match("|^/(.*)wk/|",$uri,$matches);
    if ($matches) {
        $GLOBALS['wsuWikiname'] = $matches[1].'wiki';
        $GLOBALS['wsuWikiuri'] = $matches[1].'wk';
         error_log("wikishortname = $matches[1]");
    } else {
        error_log("malformed URL: $uri");
    }
}

Then we require_once Local_Settings_wikiname.php for that wiki, which
contains any needed overrides or additions to the common settings in
LocalSettings.php:

#    Choose the appropriate LocalSettings file for per-wiki overrides
#     per-wiki LocalSettings is places in per-wiki directory in wsu/
#
     require_once 'wsu/'.$GLOBALS['wsuWikiname'] . '/LocalSettings_' .
$GLOBALS['wsuWikiname'] . '.php';

3) You have to be quite careful about settings with dependencies on other
settings.  Here is the tree I developed of dependencies in
LocalSettings.php:

[Mediawiki 1.5.6]
*Request URI
**$GLOBALS['wsuWikiname']
***$wgSitename
****$wgLocalInterWiki
***$wgDBname (yes, we generate the DB name from the wikiname)
***$wgArticlePath
***$wgDebugLogFile (separate debug log file for each wiki)
***per-wiki directory
***per-wiki local settings name
**$GLOBALS['wsuWikiuri']
***$wgScriptPath
****$wgScript
****$wgRedirectScript
****$wgStylePath
****$wgUploadPath

You don't want to do an override on a setting without also overriding the
things that depend on it.

NOTE THAT THIS IS NOT YET RUNNING except on a limited basis in development.
Only you are responsible if you believe what you read here, put it on a
machine, and get hurt.

HTH,

-- Joshua

 
On 4/7/06 1:24 PM, "Rotem Liss" <[hidden email]> wrote:

> I'm running three MediaWiki sites, and I copy the PHP files from folder
> to folder. Can I run them somehow from the same PHP files, so I won't
> need to copy and update all the files three times? By the way, how do
> you do that in Wikimedia sites - copy the PHP files, or using the same
> ones? And how do you do that?
>
> (Of course, using different LocalSettings.php for every site, and
> running from other folders.)
>
> rotemliss
>
> _______________________________________________
> MediaWiki-l mailing list
> [hidden email]
> http://mail.wikipedia.org/mailman/listinfo/mediawiki-l

_______________________________________________
MediaWiki-l mailing list
[hidden email]
http://mail.wikipedia.org/mailman/listinfo/mediawiki-l