This is an idea on how to set ISPConfig 3 on Amazon EC2 for web hosting. It’s still work in progress and I await for any constructive feedback. Since English is not my first language there might be some grammatical errors.
- AWS Account
- Some Linux experience
Part I – Setting up AWS
I have done all the setup of instance and ebs from the Amazon Management Console. It has a very intuitive interface and it’s so easy to work with.
Optional: You can purchase reservation for an instance if you are planing to run it 24/7. To do so go to Instances -> Reserved Instances and click on Purchase Reserved Instance. For example a c1.medium instance reservation for 1 year costs 455$ one time fee and the hourly cost of the instance goes to 0.06$/hour. It’s your decision, do the math if it’s worth it or not to go with reserved instances.
- From the Management Console go to Volumes and Create Volume. I created a 40 GB volume in us-east-1a zone, choose an appropriate value for your needs.
- Next step which is also optional is to get an Elastic IP for your instance. Go to Elastic IPs and click Allocate New Address.
- You will need a keypair to access your instance. You can create one before launching the instance or create one when you also setup the new instance. Your choice. I created one before by going to Key Pairs -> Create Key Pair.
Part II – Launching the instance
Instance type used was c1.medium, the AMI for it was Ubuntu 9.10 Karmic 32bit ami-1515f67c from Canonical Images for Amazon EC2.
Go to Instances and press Launch Instance and make sure you set it to use ami-1515f67c. If you need to use a different zone or a 64 bit instance you can check the alestic page which is a wonderful resource for Ubuntu images for EC2. I would also suggest to join their EC2 Ubuntu Google Grup if you are serious about AWS + Ubuntu.
After the instance is up and running attach the Elastic IP and the Volume you have created to it. To attach the IP go to Elastic IPs and select Associate, for the EBS go to Volumes. I attached the EBS as /dev/sdb to the instance.
Later Edit: You will need to also modify the Security Groups and permit access on ports 22(SSH), 80(HTTP), 8080(ISPConfig 3), 20-21(FTP) -> still need more work to support PASV.
Part III – Install ISPConfig 3
Before proceeding with ISPConfig 3 setup connect to your instance and update the packages.
sudo su apt-get update apt-get upgrade
Note: You will have to connect to your instance using the ubuntu username and the key pair you generated for that instance. It won’t allow you to connect directly as root.
To install the ISPConfig 3 I followed the HowtoForge excellent tutorial with a small exception: I skipped the part of setting up the quota since I was planning to use the EBS as storage for sites and MySQL databases. The rest of the tutorial was just perfect.
Part IV – Setting up the EBS and ISPConfig to work with it
Most of the stuff and talk about EBS and MySQL snapshots is discussed on Amazon developer forums in the thread called Tutorial: Running MySQL on Amazon EC2 with EBS (Elastic Block Store). Make sure you read the discussion before or after you are done with this post.
apt-get install dmsetup modprobe dm_mod modprobe dm_mirror modprobe dm_snapshot mkdir /dev/.static/dev/mapper -pv
Create ext3 filesystem:
Setup it with dmsetup
echo 0 `blockdev --getsize /dev/sdb` linear /dev/sdb 0 | dmsetup create ebs
Add the records to fstab
echo "/dev/mapper/ebs /ebs ext3 noatime,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0 0 0" >> /etc/fstab
touch /ebs/aquota.user /ebs/aquota.group chmod 600 /ebs/aquota.* mount -o remount /ebs
Enable quota on ebs
quotacheck -avugm -F vfsv0 /ebs quotaon -avug /ebs
mkdir /ebs/sites ln -s /ebs/sites /var/www/clients
Set Jailkit chroot home: /ebs/home/[username]
/etc/init.d/mysql stop mkdir /ebs/mysql/data /ebs/mysql/log -pv mv /var/lib/mysql /ebs/mysql/data ln -s /ebs/mysql/data/mysql /var/lib/mysql mv /var/log/mysql /ebs/mysql/log ln -s /ebs/mysql/log/mysql /var/log/mysql
To make a snapshot of the database, go to the mysql console (msqyl -p)
FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS; SYSTEM dmsetup suspend /dev/mapper/ebs
Take your snapshot of the EBS
SYSTEM dmsetup resume /dev/mapper/ebs UNLOCK TABLES;
Note:This is still work in progress, any advices on how to improve it are greatly appreciated and any constructive criticism also.