Setting up an Apache2 Virtual Host for a Subdomain

I’ve done this several times before, so noting it for my own quick reference. This might be of help to others finding their way around Apache deployments.

I’ve tried this on a Ubuntu 9.04 (Jaunty Jackalope) with Apache2. Here is what we are trying to setup:

  • Subdomain for your web project: http://mysubdomain.mydomain.com (say, http://staging.mykillerapp.com)
  • You wish to give restricted access to a people in your team, to deploy the project. You don’t wish to give them sudo or admin rights to your Linux box.

Creating a Sub-domain

Your hosting provider is likely to give you a web-based domain management tool (CPanel or something else). Add a DNS “A record” as follows:

subdomain      PUBLICIPADDRESS      A

For example:

staging      x.x.x.x      A

Create a non-root user account to manage your application

$ adduser staging

I’m assuming that staging home is the usual /home/staging. Lets create a www under it, which will serve as the root directory for our virtual host /home/staging/www/

Enable the Apache Virtual Host Module

sudo a2enmod vhost_alias

Create a virtual host configuration for Apache2

Apache2 tracks the virtual hosts configurations in this location: /etc/apache2/sites-available/. There will be a default config file; Lets make a copy of that file at the same directory location.

1
2
3
$ cd /etc/apache2/sites-available/
$ cp default staging
$ vi staging

Make your virtual host file look like this:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<VirtualHost *:80>
 
        ServerName staging.mykillerapp.com
        ServerAdmin appadmin@mykillerapp.com
        DocumentRoot /home/staging/www/
 
        <Directory />
                Options FollowSymLinks
                AllowOverride All
        </Directory>
 
        <Directory /home/staging/www/>
                Options FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>
 
        ErrorLog /var/log/apache2/error.log
 
        # Possible values include: debug, info, notice, 
        # warn, error, crit, alert, emerg.
        LogLevel warn
 
        CustomLog /var/log/apache2/access.log combined
 
</VirtualHost>

Enable your virtual host

$ sudo a2ensite staging

This sets up a soft-link in /etc/apache2/sites-enabled/ which points to your virtual host config file.

Finally, restart apache

$ sudo service apache2 restart

Hit your virtual host at http://staging.mykillerapp.com


Tags: , ,

 
 
 

Leave a Reply