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 :-)
