Multible Moodle Colleges One Code Base

Multible Moodle Colleges One Code Base

by Rachel Dotey -
Number of replies: 5
The other posts on this subject seem to be a little old so I thought I would start a new thread.

I am trying to create multiple Moodle colleges using the same code base. This needs to be scalable because I do not know the number of colleges that I will have in total (4<X>12). The database information needs to be kept separate either by using separate databases or by using separate table prefixes. Ideally I would like to use whichever has a smaller load on the server. The administrative controls need to be separate - or appear to be separate (meaning each college will have their own admin personnel who should only be able to access their own college).

The reason for this is to be able to update one code base and have all colleges updated simultaneously. This will be implemented on an IIS server but currently I am working locally using WAMP.

I have been using this tutorial:

I have saved over my standard Moodle config with the code below (as the tutorial states). I am able to install Moodle databases with this config in place and everything seems to work fine.

My problem is - How do I get another Moodle going? Where does the next Moodle directory go? How do I install it? I'm just not getting the next step. If someone could just send me a little extra information on this I would really apreciate it.

My directory structure:
ServerRootFolder > MoodleFolder > config.php + other standard moodle folders

<?PHP // $Id: config-dist.php,v 1.54 2004/05/03 14:57:11 moodler Exp $

/// EDUFORGE MOODLE LMS SETUP --- YOUR ATTENTION PLEASE!!!!
///
/// This config file supports many moodle instances from one directory
/// and one config file.
///
/// We'll get the virtualhost prefix (foo in foo.lms.eduforge.org) and use that
/// to define:
/// - DB table prefix
/// - VAR directory: /home/lms/var/$prefix/
/// - Optional config override file: you can override any config value by creating
/// a config_$prefix.php file. Be cautious, however!

// Obtain and sanitize prefix
$eduforge_prefix = $_SERVER['HTTP_HOST'];
if (isset($_ENV['HTTP_HOST'])){ // this is to support cronjobs on a per-host basis
$eduforge_prefix = $_ENV['HTTP_HOST'];
}
$eduforge_prefix = explode('.', $eduforge_prefix);
$eduforge_prefix = $eduforge_prefix[0];
$eduforge_prefix = preg_replace("/\W/", "", $eduforge_prefix);

// if there wasn't a prefix redirect to eduforge
if($eduforge_prefix == 'lms' || $eduforge_prefix=='') { //
header("Location: http://eduforge.org/");
exit;
}

///////////////////////////////////////////////////////////////////////////
// //
// Moodle configuration file //
// //
// This file should be renamed "config.php" in the top-level directory //
// //
///////////////////////////////////////////////////////////////////////////
// //
// NOTICE OF COPYRIGHT //
// //
// Moodle - Modular Object-Oriented Dynamic Learning Environment //
// http://moodle.org //
// //
// Copyright (C) 1999-2004 Martin Dougiamas http://dougiamas.com //
// //
// This program is free software; you can redistribute it and/or modify //
// it under the terms of the GNU General Public License as published by //
// the Free Software Foundation; either version 2 of the License, or //
// (at your option) any later version. //
// //
// This program is distributed in the hope that it will be useful, //
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
// GNU General Public License for more details: //
// //
// http://www.gnu.org/copyleft/gpl.html //
// //
///////////////////////////////////////////////////////////////////////////
unset($CFG); // Ignore this line

//=========================================================================
// 1. DATABASE SETUP
//=========================================================================
// First, you need to configure the database where all Moodle data //
// will be stored. This database must already have been created //
// and a username/password created to access it. //
// //
// mysql - the prefix is optional, but useful when installing //
// into databases that already contain tables. //
//
// postgres7 - the prefix is REQUIRED, regardless of whether the //
// database already contains tables. //
// //
// A special case exists when using PostgreSQL databases via sockets. //
// Define dbhost as follows, leaving dbname, dbuser, dbpass BLANK!: //
// $CFG->dbhost = " user='muser' password='mpass' dbname='mdata'"; //
//




$CFG->dbtype = 'mysql'; // mysql or postgres7 (for now)
$CFG->dbhost = 'localhost'; // eg localhost or db.isp.com
$CFG->dbname = 'moodletest'; // database name, eg moodle
$CFG->dbuser = 'XXXX'; // your database username
$CFG->dbpass = 'XXXX'; // your database password
$CFG->prefix = $eduforge_prefix . '_'; // Prefix to use for all table names

$CFG->dbpersist = true; // Should database connections be reused?
// "false" is the most stable setting
// "true" can improve performance sometimes


//=========================================================================
// 2. WEB SITE LOCATION
//=========================================================================
// Now you need to tell Moodle where it is located. Specify the full
// web address to where moodle has been installed. If your web site
// is accessible via multiple URLs then choose the most natural one
// that your students would use. Do not include a trailing slash

// Origiona line -> $CFG->wwwroot = 'http://'.$eduforge_prefix.'.lms.eduforge.org';
$CFG->wwwroot = 'http://'.$eduforge_prefix.'/ITU/moodleone';

//=========================================================================
// 3. SERVER FILES LOCATION
//=========================================================================
// Next, specify the full OS directory path to this same location
// Make sure the upper/lower case is correct. Some examples:
//
// $CFG->dirroot = 'c:\FoxServ\www\moodle'; // Windows
// $CFG->dirroot = '/var/www/html/moodle'; // Redhat Linux
// $CFG->dirroot = '/home/example/www/moodle'; // Cpanel host

$CFG->dirroot = 'C:\wamp\www\ITU\moodleone';


//=========================================================================
// 4. DATA FILES LOCATION
//=========================================================================
// Now you need a place where Moodle can save uploaded files. This
// directory should be readable AND WRITEABLE by the web server user
// (usually 'nobody' or 'apache'), but it should not be accessible
// directly via the web.
//
// - On hosting systems you might need to make sure that your "group" has
// no permissions at all, but that "others" have full permissions.
//
// - On Windows systems you might specify something like 'c:\moodledata'

$CFG->dataroot = 'C:\wamp\www\ITU\moodledata'.$eduforge_prefix;


//=========================================================================
// 5. DATA FILES PERMISSIONS
//=========================================================================
// The following parameter sets the permissions of new directories
// created by Moodle within the data directory. The format is in
// octal format (as used by the Unix utility chmod, for example).
// The default is usually OK, but you may want to change it to 0750
// if you are concerned about world-access to the files (you will need
// to make sure the web server process (eg Apache) can access the files.
// NOTE: the prefixed 0 is important, and don't use quotes.

$CFG->directorypermissions = 0777;


//=========================================================================
// 6. DIRECTORY LOCATION (most people can just ignore this setting)
//=========================================================================
// A very few webhosts use /admin as a special URL for you to access a
// control panel or something. Unfortunately this conflicts with the
// standard location for the Moodle admin pages. You can fix this by
// renaming the admin directory in your installation, and putting that
// new name here. eg "moodleadmin". This will fix admin links in Moodle.

$CFG->admin = 'admin';


//=========================================================================
// 7. OTHER MISCELLANEOUS SETTINGS (ignore these for new installations)
//=========================================================================
//
// Prevent users from updating their profile images
// $CFG->disableuserimages = true;
//
// Prevent scheduled backups from operating (and hide the GUI for them)
// Useful for webhost operators who have alternate methods of backups
// $CFG->disablescheduledbackups = true;
//
// Restrict certain usernames from doing things that may mess up a site
// This is especially useful for demonstration teacher accounts
// $CFG->restrictusers = 'teacher,fred,jim';
//
// Turning this on will make Moodle filter more than usual, including
// forum subjects, activity names and so on (in ADDITION to the normal
// texts like forum postings, journals etc). This is mostly only useful
// when using the multilang filter. This feature may not be complete.
// $CFG->filterall = true;
//
// Setting this to true will enable admins to edit any post at any time
// $CFG->admineditalways = true;
//
// Setting this to true will force a non-guest login to see the user pages
// eg the teachers linked from course descriptions or site news
// $CFG->forceloginforprofiles
//
// This setting will put Moodle in Unicode mode. It's very new and
// most likely doesn't work yet. THIS IS FOR DEVELOPERS ONLY, IT IS
// NOT RECOMMENDED FOR PRODUCTION SITES
// $CFG->unicode = true;


//=========================================================================
// ALL DONE! To continue installation, visit your main page with a browser
//=========================================================================

// Allow file overrides for eduforge
if (file_exists("$CFG->dirroot/config_" . $eduforge_prefix . ".php")) { // Do not edit
include_once("$CFG->dirroot/config_" . $eduforge_prefix . ".php");
}

if (file_exists("$CFG->dirroot/lib/setup.php")) { // Do not edit
include_once("$CFG->dirroot/lib/setup.php");
} else {
if ($CFG->dirroot == dirname(__FILE__)) {
echo "<p>Could not find this file: $CFG->dirroot/lib/setup.php</p>";
echo "<p>Are you sure all your files have been uploaded?</p>";
} else {
echo "<p>Error detected in config.php</p>";
echo "<p>Error in: \$CFG->dirroot = '$CFG->dirroot';</p>";
echo "<p>Try this: \$CFG->dirroot = '".dirname(__FILE__)."';</p>";
}
die;
}
// MAKE SURE WHEN YOU EDIT THIS FILE THAT THERE ARE NO SPACES, BLANK LINES,
// RETURNS, OR ANYTHING ELSE AFTER THE TWO CHARACTERS ON THE NEXT LINE.
?>
Average of ratings: -
In reply to Rachel Dotey

Re: Multible Moodle Colleges One Code Base

by Rachel Dotey -
In this post - http://moodle.org/mod/forum/discuss.php?d=96607 - Mr. Elliott states...

"We have an instance of 24 moodle sites running off a single code base. In general I don't think it's an ideal solution but necessary in this case. The sites are running off sub-directories of the same domain name so a little easier to deal with.

Our directory structure looks like the following:
/home/accountname/public_html/index.html (a listing of the various sites)
/home/accountname/public_html/moodle (the moodle code base)
/home/accountname/public_html/site1 (a symbolic link to the moodle directory)
/home/accountname/public_html/site2 (a symbolic link to the moodle directory)
...

We create a separate database for each site based on the site name (eg site1) and also a separate data directory based on the site name.

In /home/accountname/public_html/moodle/config.php we have the following code:" (the code posted by Mr. Elliott is similar to my code in my previous post)

What does he mean by "a symbolic link" I think this is where I am having the issue.
In reply to Rachel Dotey

Re: Multible Moodle Colleges One Code Base

by Aaron Wells -
A symbolic link is a special kind of file that acts as a transparent filesystem shortcut to another file. See http://en.wikipedia.org/wiki/Symbolic_link

In Unix/Linux, you create a symoblic link with the command "ln -s /path/to/thing/to/link/to /path/to/new/symbolic/link".

From your config file it looks like you're using Windows. I believe symbolic links are available in Windows Vista and Windows 7, but not in earlier versions. You have to create them at the command line with the "mklink" command. Check out http://en.wikipedia.org/wiki/NTFS_symbolic_link for more info on symbolic links in Windows. (Note that they are not the same thing as a normal Windows shortcut.)

Basically, it sounds like there are three parts to setting up multiple Moodles to run off the same set of files:

1. Set up a separate database for each Moodle (or set up just one database to keep them all in, and decide which prefix to use for each Moodle, but it's probably a lot less headaches down the road to have a separate database for each one). Also set up a separate moodle-data directory for each one.

2. Get your web server to make multiple URLs all serve up the same local Moodle files on disk. This can either be multiple domains (moodle1.example.com, moodle2.example.com, moodle3.example.com), or multiple paths (www.example.com/moodle1, www.example.com/moodle2, www.example.com/moodle3) or both. In the case of the forum post by Shane Elliot, it sounds like he's using symbolic links to get multiple URLs with the same domain but different paths to all point to the same physical files on disk. It's worth noting you could do the same thing through your web server's config files -- you can pretty much configure a web server to map any arbitrary incoming URL to any arbitrary local file.

3. Put some logic in your config.php file so it looks at $_SERVER['HTTP_HOST'] (for the domain) and/or $_SERVER['REQUEST_URI'] (for the path) to figure out what URL the user entered into their browser, and then decide which Moodle that URL refers to and use the correct database, moodle-data directory, password salt, and other site-specific settings for that Moodle. One person in one of those threads suggested having a separate "config.sitename.php" for each Moodle, and then the master config.php would contain only the URL-parsing logic and then require() the correct config.sitename.php file.

To add additional Moodles, you'd want to:

1. Set up another database and moodle-data directory
2. Set up your web server to map the URL for the new Moodle to the same Moodle code directory as all the others
3. Edit your config.php file so that it knows which database, moodle-data directory, etc to use for the new URL.

Good luck! smile

Cheers,
Aaron
In reply to Aaron Wells

Re: Multible Moodle Colleges One Code Base

by Rachel Dotey -
Thank you Aaron!

I have been playing with the above and it works! It creates the databases (I can see them all in php my admin) and almost completes the setup. Immediatly after installing databases I get this error... Im in the process of looking at editadvanced.php but Im not really sure what the issue is here. Im worried it may be my host setup.

This is local using WAMP -
  • Apache/2.2.11 (Win32) PHP/5.3.0
  • MySQL client version: mysqlnd 5.0.5-dev - 081106 - $Revision: 1.3.2.27 $
  • PHP extension: mysqli

Warning: Unknown: failed to open stream: No such file or directory in Unknown on line 0

Fatal error: Unknown: Failed opening required 'C:/wamp/www/ITU/moodletwo/user/editadvanced.php' (include_path='.;C:\php5\pear') in Unknown on line 0

I forgot to mention - this is my second moodle install using the symbolic link system - which is my new favorite toy by the way. The first moodle install using the same config file but no symbolic link runs perfectly.

Please and Thank you for your help!!!
In reply to Rachel Dotey

Re: Multible Moodle Colleges One Code Base

by Rachel Dotey -
After receiving the above initial error - which occurred after my first virtual Moodle installed its databases via the symbolic link - I have not been able to get my virtual Moodles to install at all again. = ( Now I just go straight to the error.

I have also re downloaded the latest official version of Moodle (1.9.9) and I re made the symbolic links and am trying again. I get the same error but on index.php...

Warning: Unknown: failed to open stream: No such file or directory in Unknown on line 0

Fatal error: Unknown: Failed opening required 'C:/wamp/www/ITU/moodletwo/index.php' (include_path='.;C:\php5\pear') in Unknown on line 0
In reply to Rachel Dotey

Re: Multible Moodle Colleges One Code Base

by Rachel Dotey -
Ok so if I start with no Moodle installs - blank databases - and I try to install a virtual Moodle I immediately get the above error and cant do anything. If I install the non virtual Moodle (without using symbolic links) it installs perfectly and works fine. I can then install a virtual Moodle and it installs the databases before giving me this error..


Warning: Unknown: failed to open stream: No such file or directory in Unknown on line 0

Fatal error: Unknown: Failed opening required 'C:/wamp/www/ITU/mooone/user/editadvanced.php' (include_path='.;C:\php5\pear') in Unknown on line 0

and then I'm dead in the water again.....
Someone please help my reply's to myself aren't helping me... = (