10 Minute Multisite Install & Configuration
Multisite 10 minute Install:
- Server: LAMP
- SSH (telnet) Client: ssh (PuTTY if you are using Windows to access your LAMP host)
- Must have root access to your server.
If website in question is an addon domain, i.e., addon.mydomain.tld, then substitute "addon" for "www" in steps below.
For list of Linux commands visit: http://www.oreillynet.com/linux/cmd/ or http://www.ss64.com/bash/
Here we go:
[login via ssh / PuTTY]
Debian (Ubuntu)
Debian and offshoot distributions (e.g. Ubuntu) make installation and configuration very easy. This was done on a Debian distribution, Ubuntu should work identically.
Installation
Assumption: apache2 and mysql are already installed. If not, use apt-get install to install and configure them.
# apt-get install drupal6
Answer the questions. This will install everything necessary to run drupal and do the basic configuration, including creating an empty database for drupal.
- Configure database for drupal6 with dbconfig-common? [YES]
- Database type to be used by drupal6: [mysql]
- Password of your database's administrative user: [enter mysql root password]
- MySQL application password for drupal6: [create a password for your drupal6 db]
- (enter the password again for verification)
You now have a basic unconfigured Drupal6 installation using the database drupal6 and accessible at http://www.example.com/drupal6. Do not use it. This is the "prototype" installation that we will use to create the sites we really want to use.
Create Site Databases
The easiest way to create databases for your sites is to use dpkg-reconfigure and answer the questions.
# dpkg-reconfigure drupal6
- Re-install database for drupal6? [YES]
- Database type to be used by drupal6: [mysql]
- Connection method for MySQL database of drupal6: [unix socket]
- Name of your database's administrative user: [root]
- Password of your database's administrative user: [enter mysql root password]
- username for drupal6: [ENTER YOUR DB SITE *USERNAME* HERE (e.g. mysite)]
- database name for drupal6: [ENTER YOUR DB *SITE* NAME HERE (e.g. mysite)]
Notes:
- Repeat the above for each site you want to support.
- I used the same name for the database and the site. KISS.
- Don't use periods (e.g. mysite.com is a bad choice). If you want to spell out the whole name, use underscores instead of periods (e.g. mysite_com).
- The above method ends up using the same site database password for all the sites you create. Advice: use
mysql-admin(ormysql) to use different passwords for each site.
Configure Apache2 for Sites
Apache2 needs to be configured to support vhost access to your new sites.
Create vhost site configuration files in /etc/apache2/sites-available/
#
# Virtual hosting configuration for Drupal
#
<VirtualHost *:80>
ServerAdmin [your email address]
DocumentRoot /usr/share/drupal6/
ServerName [your vhost#1 name]
ServerAlias [if you want to support www.example.com and example.com]
RewriteEngine On
RewriteOptions inherit
</VirtualHost>
<VirtualHost *:80>
ServerAdmin [your email address]
DocumentRoot /usr/share/drupal6/
ServerName [your vhost#2 name]
ServerAlias [if you want to support www.example1.com and example1.com]
RewriteEngine On
RewriteOptions inherit
</VirtualHost>
[...repeat for all your vhosts]Notes:
- Modify the above items that are in
[square brackets]. - You likely will want to support port 443 (
https) as well. See Apache documentation for detailed instructions. - I've chosen to put all the vhosts in one file named
drupal. You may want to use one file per vhost.
Sym-link the drupal file in the sites-enabled directory to enable it in your site:
# cd /etc/apache2/sites-enabled
# ln -s ../sites-available/drupal ....and reload Apache2 to pick up your configuration changes...
# /etc/init.d/apache2 reloadCreate Drupal Site Configurations
We need to create Drupal configurations for each site by copying the default configuration to the Drupal site subdirectory.
# cd /etc/drupal/6/sites/
# cp -a default [site1.com]
# cp -a default [site2.com]
:
:...and edit the configurations to use the right database, MySQL user name, and password...
# vi site1.com/dbconfig.php
# vi site2.com/dbconfig.php
:
:Notes:
- Modify the above items that are in
[square brackets].
Run Drupal and Configure Your Sites
Browse to your sites, running install.php (e.g. http://www.example.com/install.php) to configure them.
Manual
Get to location where Drupal core will be located:
[/]# cd /var/www
Upload Drupal core:
"x.x" should be replaced with the version of Drupal you're installing, e.g. "5.2"
[/var/www]# wget http://ftp.osuosl.org/pub/drupal/files/projects/drupal-x.x.tar.gz
Unpack Drupal core:
[/var/www]# tar -zxvf drupal-5.2.tar.gz
Move contents of Drupal core (including .htaccess) to html:
[/var/www]# mv drupal-x.x/* drupal-x.x/.htaccess /var/www/html
Clean-up:
[/var/www]# rm drupal-x.x.tar.gz
[/var/www]# rm drupal-5.2Create the files directory per Drupal instructions and change permissions (will change permission again after install):
[/var/www]# cd html
[/var/www/html]# mkdir files
[/var/www/html]# chmod 777 filesMake directories that will hold custom and contributes modules and themes:
[/var/www/html]# cd sites/all
[/var/www/html/sites/all]# mkdir modules
[/var/www/html/sites/all]# mkdir themes
[/var/www/html/sites/all]# cd modules
[/var/www/html/sites/all/modules]# mkdir custom
[/var/www/html/sites/all/modules]# mkdir contrib
[/var/www/html/sites/all/modules]# cd ../
[/var/www/html/sites/all]# cd themes
[/var/www/html/sites/all/themes]# mkdir custom
[/var/www/html/sites/all/themes]# mkdir contribCreate directory "www.mydomain.tld":
[/var/www/html/sites/all/themes]# cd ../
[/var/www/html/sites/all]# cd ../
[/var/www/html/sites]# mkdir www.mydomain.comChange permission of "settings.php" per Drupal instructions and copy "settings.php" in default to www.mydomain.tld:
[/var/www/html/sites]# cd default
[/var/www/html/sites/default]# chmod 777 settings.php
[/var/www/html/sites/default]# cd ../
[/var/www/html/sites]# cp -a default www.mydomain.tldCreate database and user with permissions:
[/var/www/html/sites]# mysql
mysql> CREATE DATABASE wwwmydomaintld_drupal;
mysql> GRANT ALL PRIVILEGES ON wwwmydomaintld_drupal.* TO 'wwwmydomaintld_myusername'@'localhost' IDENTIFIED BY 'mypassword';mysql> \q
Go back to PuTTY to chmod on settings.php in www.mydomain.tld:
[/var/www/html/sites]# cd www.mydomain.tld
[/var/www/html/sites/www.mydomain.tld]# chmod 755 settings.php
[/var/www/html/sites/www.mydomain.tld]# logoutWhat next?:
- Make changes to "settings.php" in www.mydomain.tld? I've read that it's not necessary to make changes to setting.php.
- Make changes to "httpd.conf" in /usr/local/apache/conf?
I've been using WHM to create accounts, putting Drupal in public_html and having no problems. But when it comes to parting from the WHM abstraction and getting multisite set-up correctly this is the end of the proverbial road for me.
Could use help...:
- Help making improvements to steps articulated above
- Help with next steps so that I/we can get on to grander things, like creating modules, custom themes, profiles, (and maybe - just maybe - spend some time working on business strategy :-)

Almost worked perfectly
Multi-site Installation for Drupal6/Ubuntu Jaunty -- what I did August 2009
If you intend to run multiple websites, using a single Drupal6 installation, then follow these instructions carefully. I could only get this to work if each site had its own domain name, e.g mysite_1.mydomain.org and mysite_2.mydomain.org. (I could not get it to work for mysite.mydomain.org/subsite_1 and mysite.mydomain.org/subsite_2). In brief:
* Install, but do not plan to use, the first (default) Drupal6 installation:
sudo apt-get install drupal6
It will ask for your MySQL password -- use the MySQL root password you set when you installed MySQL initially (as part of your LAMP installation, for example). This will install an initial MySQL database named drupal6. You will be asked for a new password for this drupal6 database, which you can make different than your MySQL root password, if you wish.
* Now you will re-install a new database for each planned subsite.:
sudo dpkg-reconfigure drupal6
* Re-install database for drupal6? [YES]
* Database type to be used by drupal6: [mysql]
* Connection method for MySQL database of drupal6: [unix socket]
* Name of your database's administrative user: [root]
* Password of your database's administrative user: [enter mysql root password]
* username for drupal6: [ENTER YOUR DB SITE *USERNAME* HERE (e.g. mysite_x_adminuser)]
* database name for drupal6: [ENTER YOUR DB *SITE* NAME HERE (e.g. mysite_x)]
You will have created a new database with a database user name for each subsite (I used a username identical to the database name to make it easy to remember). The password will be the same as your initial database (i.e. drupal6) password, by default.
* Next you will copy the "default" site folder to a folder for each subsite. Each subsite folder must be named in a convention that is peculiar to Drupal. If your subsite will be reached from the web as mysite_1.mydomain.org, then name the folder mysite_1.mydomain.org.
* If you are using mysite_x.mydomain.org:
cd /etc/drupal/6/sites/
cp -a default mysite_x.mydomain.org
* (Optionally), copy the themes and modules from the core installation folder to your subsite folder, so you can customize them without changing the core installation:
cp -a /usr/share/drupal6/modules/ /etc/drupal/6/sites/mysite_x.mydomain.org
cp -a /usr/share/drupal6/themes /etc/drupal/6/sites/mysite_x.mydomain.org
* Erase the symbolic link for the files folder (copied with the rest of the default folder) and make a new folder for uploaded files. If you want all your subsites to use the same uploaded files, omit this step.
sudo rm /etc/drupal/6/sites/mysite_x.mydomain.org/files
mkdir /etc/drupal/6/sites/mysite_x.mydomain.org/files
You may need to make the files folder readable to allow installation to proceed without an error (many users use chmod 775 or even chmod 766):
sudo chmod 777 /etc/drupal/6/sites/mysite_x.mydomain.org/files
* Edit the configuration files to make sure it correctly reflects your newly created database variables (that you entered in the previous installation step), such as database name and database user. Leave the password alone.
sudo nano /etc/drupal/6/sites/mysite_x.mydomain.org/dbconfig.php
Repeat this process for each new subsite. Replace mysubsite_x.org with the name of each subsite.
* Files, themes, and modules to be shared by all subsites should go in the "all" subsite. (this is an optional step, but if you don't, then the core installation modules and themes folders will be used for common files. If you modify any of the core installation modules or themes, they will be overwritten at the time of an upgrade). Copy the code folders:
sudo cp -a /usr/share/drupal6/modules/ /etc/drupal/6/sites/all
sudo cp -a /usr/share/drupal6/themes /etc/drupal/6/sites/all
and (optionally) make a directory for shared files:
mkdir /etc/drupal/6/sites/all/files
sudo chmod 777 /etc/drupal/6/sites/all/files
* Create a virtual host file for the new sites:
sudo nano /etc/apache2/sites/available/drupal6
Add the lines:
#
# Virtual hosting configuration for Drupal
#
#
ServerAdmin webmaster@mydomain.org
#
DocumentRoot /usr/share/drupal6/
ServerName mysite_1.mydomain.org
ServerAlias www.mysite_1.mydomain.org mysite_1.mydomain.org
#RewriteEngine On
#RewriteOptions inherit
#
ServerAdmin [your email address]
#
DocumentRoot /usr/share/drupal6/
ServerName mysite_2.mydomain.org
ServerAlias www.mysite_2.mydomain.org mysite_2.mydomain.org
#RewriteEngine On
#RewriteOptions inherit
Note that I hashed out (commented out) two commands that didn't work (regarding RewriteEngine) in my installation of apache2. You may want to play around with other settings, if you are comfortable with virtual host files.
* To activate the virtual hosts, make a symbolic link from the apache2 sites-available folder to the sites-enabled folder:
sudo ln -s /etc/apache2/sites-available/drupal6 /etc/apache2/sites-enabled
* Restart apache2:
sudo /etc/init.d/apache2 restart
* Install each of your new Drupal subsites independently:
http://mysite_1.mydomain.org/install.php
and
http://mysite_2.mydomain.org/install.php
Now you have two separate sites. When it is time to upgrade, you will only have to upgrade the core Drupal installation.
[edit] Multisite cron
Refer to these instructions. I can add the task(s) to my cron list:
sudo crontab -e
And add the lines (with the nano editor, or the one you prefer):
45 * 18 * * /usr/bin/wget -O - -q -t 1 http://''mysite_1.mydomain.org''/cron.php
45 * 19 * * /usr/bin/wget -O - -q -t 1 http://''mysite_2.mydomain.org''/cron.php
45 * 20 * * /usr/bin/wget -O - -q -t 1 http://''mysite_3.mydomain.org''/cron.php
this will run the scripts separately, at 45 minutes after the 1800 hour, the 1900 hour, and the 2000 hour every day (each site at a different hour).
If you want all the cron scripts to run every hour, then stagger them:
0 * * * * /usr/bin/wget -O - -q -t 1 http://''mysite_1.mydomain.org''/cron.php
20 * * * * /usr/bin/wget -O - -q -t 1 http://''mysite_2.mydomain.org''/cron.php
40 * * * * /usr/bin/wget -O - -q -t 1 http://''mysite_3.mydomain.org''/cron.php
this runs one script on the hour (0), one script at 20 minutes past the hour, and one script at 40 minutes past the hour.
Perspectoff
Ubuntuguide.org and Kubuntuguide.org
Really useful
Thanks people, this was exactly what I needed as someone comfortable with LAMP on Debian but a complete Drupa newb.