This post was written in 2014, and its information might be outdated. Please refer to Amazon’s AWS documentation for the most up to date information, as I am not able to provide support or assistance for configuring AWS.
For a few years now, I have been hearing about the benefits of Amazon’s Elastic Compute Cloud, but had resisted making the switch because of their lack of integration with the web host management tools that I prefer to use, cPanel & WHM, .
I finally got talked into firing up an instance in Amazon AWS, and in the process have really begun to appreciate the technology integrated into Amazon Web Services. The ability to scale and deploy on demand are enough that I don’t anticipate going back to dedicated hardware anytime soon.
The capabilities of Amazon’s AWS are pretty incredible, but I missed the familiarity and ease of use of cPanel & WHM to manage my hosting environment. I began looking into how to install cPanel & WHM on AWS, but found most of the information outdated or in multiple places, making it a struggle to walk through. I decided to put together a set of steps that would walk through how to set up a VPC, Security Groups, Your EC2 instance, S3 Storage, Route 53 DNS and cPanel/WHM using Amazon Web Services.
How To: Set Up cPanel & WHM on Amazon Web Services
First things first, you need to login to your Amazon AWS Management Console at https://console.aws.amazon.com
1. Setup VPC
1.1. Click the VPC icon under Compute & Networking
1.2. Click the Start VPC Wizard button
1.3. Select “VPC with a Single Public Subnet Only” and click continue
1.4. Review the Subnet information and edit the VPC IP CIDR Block if you want to add additional IP Addresses. (The allowed block size is between /28 and /16 meaning you can have up to 65,536 IP addresses)
1.5. Click the Create VPC button to create your VPC
2. Setup Security Groups
2.1. Click the VPC icon under Compute & Networking
2.2. Click Security Group on the menu
2.3. Name your Security Group and select the VPC ID from the VPC dropdown and click Yes, Create
2.4. Add rules to your group (select the group you want to edit and options will appear underneath available groups)
I configure mine to allow all traffic in and I manage ports through cPanel/WHM.
If you want to do it that way, select Inbound and create a rule for all traffic; make source 0.0.0.0/0 and click add rule.
3. Setup Amazon EC2 Instance
3.1. Select EC2 and click the blue Launch Instance button
3.2. Install your preferred AMI. (I could only get cPanel/WHM to install on CentOS)
3.3. Choose the size of your instance. (I start small since AWS scales so easily)
3.4. Configure your instance details
a. Set desired Network & Subnet
b. Add your desired IAM Role to add AWS access keys
c. Set Shutdown Behavior “Stop” (otherwise it will be terminated)
d. Enable Termination Protection (Makes termination a two step process preventing accidental termination)
e. Under Network Interfaces add a Primary IP Address based off of the subnet range you chose
f. Set your desired Kernal, Ram Disk and User Data (or use default)
3.5. Add your desired storage
Amazon offers a few different kinds of storage, for this instance, our options are root and EBS. Root storage is in the EC2 instance so when the instance gets terminated the data gets terminated. EBS is independent of the EC2 instance so data will not be terminated with the instance.
3.6. Tag your instance and create a name for it.
3.7. Configure Security Group
Select the radio button for “Select an existing security group” and select the security group we created earlier
3.8. Review & Launch
Make sure everything looks the way you want it to and click Launch.
3.9. Select a Key Pair
You can add an existing key or select Create New Key Pair, add a name for your key pair and download it. Use puttygen to crete a private key.
4. Setup Elastic IP
4.1. Select EC2 and click the Elastic IP’s menu item
4.2. Click the blue Allocate New Address button
4.3. Use the Instance dropdown to set your instance to the one you will be using
4.4. The private IP address should populate with the Primary IP address you added earlier
4.5. Click the Reassociation check box (to keep the IP associated with the instance even if instance is rebooted.)
4.6. Click the associate button to finalize your changes
5. Setup Route 53 DNS
I decided to try Route 53 to configure my hostnames for this project. I went and purchased a domain and decided I would use that for my hostnames.
5.1. Click the create hosted zone button
5.2. Add the domain name you want to use, give it a comment if you want
5.3. Go back to your domain registrar and set your own custom name servers as the four under delegation set
5.4. Click on Go To Record Sets and add an a entry for your public IP address
At this point your DNS should be configured to have the elastic IP address be used for your EC2 instance we created. You can use tools like network-tools.com to determine if your DNS is acting right or not. We will come back to this later when we discuss configuring nameservers.
6. Setup cPanel/WHM
Now that you have your Amazon AWS configured, you can have some fun with installing and configuring cPanel/WHM.
6.1. SSH into your instance (Your username may be ec2-user)
6.2. Take root
sudo su
6.3. Install Perl
yum install perl
6.4. Install WGET
yum install wget
6.5. Go to home
cd /home
6.6. Get latest cPanel
wget -N http://httpupdate.cpanel.net/latest
6.7. Execute installation files
sh latest
I followed all instructions successfully until I got to the CPanel installation using sh latest
Then it started and reached a point saying:
/usr/sbin/spacewalk-channel –list
Unable to locate SystemId file. Is this system registered?
2014-05-05 19:21:08 923 (ERROR):
2014-05-05 19:21:08 925 (ERROR): $> /usr/sbin/subscription-manager repos
2014-05-05 19:21:09 926 (ERROR):
This system has no repositories available through subscriptions.
Removing /root/installer.lock
>
What do you think I am missing here?
You can use CentOS 6, I got same error on some different systems, finally I set it up on CentOS 6 and then it is working fine.
hi,
i am in big trouble. please help me . I need your reply.
how much you paid to “amazon web service ” company for integrating with cpanel.
becuase cpanel uses 20gb of hard disk. I heard we have to pay for “amazon web service” for “disk space”
Did you paid money, if so how much you paid for amazon web service[ec2] for integrating with cpanel.
Thanks in advance.
Here is a link to Amazon’s EC2 pricing.
http://aws.amazon.com/ec2/pricing/
The free tier has 30gb of storage.
Try setting your hostname:
hostname [your.host.domain.net]
it is because you installed red hat, or not?
just to try I register on Redhat website and was able to launch:
subscription-manager register
typed my user name and pass:
Username: wael_hossam
Password:
then I got this message:
wael_hossam cannot register to any organizations.
Here I have no idea what else I can do.
Hi-
I am not sure. I did not register on the RedHat website, I think AWS should do that for you when you start an instance. I’m just assuming though.
I think you should be able to do everything through the AWS web portal.
Great tutorial, thank you very much!
It was extremely useful and I used this as reference to setup my own Amazon EC2 instance with WHM.
I did it a bit differently though, attaching two elastic IPs to the same network device.
Then I registered two private nameservers for the two IPs and set those up in a DNS zone in WHM.
Now I can point all my domains to those two nameservers and it works great.
Amazon EC2 is amazing, so easy to use!
That’s a great idea! I will have to try that out on an install and see if I like it better.
Thanks for the feedback!
Hi,
Could you please let me know how you setup the aws to use WHM. I got struck in the nameserver area. It would be really grateful if you can explain the following thing “attaching two elastic IPs to the same network device.
Then I registered two private nameservers for the two IPs and set those up in a DNS zone in WHM”
Thanks,
Rex
I would refer to their documentation because general support for AWS is outside of my scope of knowledge.
Cheers!
Sure, I’ll tell you how I did it.
First, you’ll go to EC2 in AWS and create 2 private IPs on the 1 network device for the instance. Then go to elastic IPs and create 2 elastic IPs and associate each one with a private IP on the instance.
Then go to your registrar like GoDaddy or Dynadot and register two new, private nameservers eg ns1.domain.com and ns2.domain.com each with one of those public IPs you created under elastic IPs.
Then do your WHM installation. During the installation it will ask you to specify IPs. Or alternatively, afterwards you can go to IP Functions > Add New IP. Since it will be in NAT mode by default, you’ll fill in the private IP you specified on the instance, not the public, elastic IP. WHM will automatically route the private IP to the public one and it will also automatically map the nameservers for those IPs at the registrar. Do this for you second IP as well, add it in WHM. Remember to add the private IP on the instance in WHM, else it will not work.
After a few minutes or an hour or so, go to DNS Functions > NS Record Report and you’ll see that the nameservers have automatically resolved to the two IP addresses you specified. WHM does this automatically.
Now you can go and point many domains to these two nameservers and they will automatically propagate to the new server.
Great thing about EC2 is that it comes with built in reverse DNS as well so no need to do anything there specifically.
Great Information!
No problem, I put it in a more in depth article, I hope it helps someone: http://www.contrid.co.za/2014/07/amazon-ec2-nameservers-with-whm/
I was curious why you created two name-servers when Route53 will create 4 DNS nameserver instances for each of your registered subdomains. Was perhaps Route53 not ready when you did this?
Thanks
Hi Alan
I am not sure. I did this over a year ago and am not sure.
Alan, that would work too, but if you use Rob’s way ( or Antonine’s ) then you will be able to hide the public dns name under a “vanity” nameserver ( ex: ns1.yourdomain.tld instead of the delegation set )
Thanks. It is awsome using cpanel on aws. Your guide’s useful.
Hi Rob,
Not a techie but am having an AWS pro migrate my sites.
He informs me if Cpanel is set up on AWS,
cannot utilise AWS scalability (?)
Any feedback on this would be much appreciated.
Thanks, Daniel
I think that was my experience as well. You could map things in a way that minimized the strain of resources on your cpanel/whm installs by leveraging the elastic components of their hosting environment for storage etc.
Hi
Since hostgator decided to sell itself to badly managed hosting giant I am thinking of moving all my sites down to a AWS. I have some questions. Please let me know if you have any experiance on them
1. What do you mean by cannot use scalability? Can we
a. Save the AMI and recreate the production set-up (possibly with larger instance )
b. Adding additional storage
c. Using ELB and have 2-3 server instances behind it ?
D. using amazon RDS instead Database on the Linux server
I assume that WHM would use host header to identify differnet website. only recently AWS started supporting host headers on ELB. have you tested that?
Cheers
K.C
I would refer to their documentation since I do not and cannot provide sales or general support for AWS since a lot of it is outside of my scope of knowledge relating to their products. I do not understand your question about host headers either.
Cheers!
This post and the one referenced by Antonie Potgieter are very helpful to someone like me; running a VPS at GoDaddy and having a tough time paying through the nose every time I need another 20 or 30 GB of space and getting “virtually” no support (sorry for that.) I mean, if I’m not going to get any (or much) help and I’m going to have to figure it all out myself anyway, I may as well go to Amazon and have the added benefit of truly flexible space and bandwidth. The only roadblock to making the plunge (for me) was just not having a clue how to navigate the conundrum that is the AWS interface.
Thanks for posting this…I can’t thank you enough.
I am so glad that it helped you, it makes the time it took to write and screenshot everything worth it.
Thanks for the comment.
Hi!
Anyone can setup multiple IP address for this to work ?
I mean binding 2 or more IP on the cpanel/whm on ec2 ?
I believe my article posted up there will actually work for what you want to do
Any idea which license of cpanel will be needed?
vps optmised or cpanel accelerated for this?
I think I used a VPS one. Its been a while though so I am not 100% sure.
Thanks for your tutorial, it was really simple to follow,
At the end however, in enter https://ip-address:/2087 and I get the default error
“The server can not find the requested page:
Please forward this error screen to–ip-adddress”
did I do something wrong?
Did you replace the “ip-address” in the url with the ip address of your hosing environment?
With this i can provide hosting or shared hosting via whm right?
This installs WHM / cPanel on Amazon AWS.
They can be used to administer a hosting environment.
I got this error while compile cpanel in amazon ec2
[20141103.004535] Retrieving and staging /cpanelsync/11.44.1.19/cpanel/scripts/validate_sshkey_passphrase.bz2
[20141103.004535] E Could not uncompress /usr/local/cpanel/scripts/validate_sshkey_passphrase-cpanelsync.bz2:
[20141103.004535] E bzip2: Can’t create output file /usr/local/cpanel/scripts/validate_sshkey_passphrase-cpanelsync: No space left on device.
[20141103.004535] E Failed to uncompress /usr/local/cpanel/scripts/validate_sshkey_passphrase-cpanelsync.bz2
Can’t exec “/usr/local/cpanel/scripts/cpanel_initial_install”: No such file or directory at /home/cPanelInstall/selfgz1229/install line 146.
2014-11-03 00:45:37 148 (FATAL): Failure to exec /usr/local/cpanel/scripts/cpanel_initial_install
Removing /root/installer.lock
I am not sure but one of your errors looks like there is no space on the device…
[20141103.004535] E bzip2: Can’t create output file /usr/local/cpanel/scripts/validate_sshkey_passphrase-cpanelsync: No space left on device.
Which I would assume is the problem.
Why i have this error?
———————-
2014-11-13 20:54:00 429 ( INFO): cPanel install started at: Thu Nov 13 20:54:00 2014!
2014-11-13 20:54:00 430 ( INFO): This install will take 20-50 minutes depending on your hardware.
2014-11-13 20:54:00 431 ( INFO): Now is the time to go get another cup of coffee/jolt.
2014-11-13 20:54:00 432 ( INFO): The install will log to /var/log/cpanel-install.log.
2014-11-13 20:54:00 433 ( INFO):
2014-11-13 20:54:00 434 ( INFO): Beginning Installation v3
2014-11-13 20:54:00 338 ( INFO): CentOS 6 (Linux) detected!
2014-11-13 20:54:00 362 ( INFO): Validating that ‘ip-10-0-0-128’ is a FQDN
2014-11-13 20:54:00 368 (ERROR):
2014-11-13 20:54:00 369 (ERROR): ********************* ERROR *********************
2014-11-13 20:54:00 370 (ERROR):
2014-11-13 20:54:00 371 (ERROR): Your hostname (ip-10-0-0-128) is not set properly. Please
2014-11-13 20:54:00 372 (ERROR): change your hostname to a fully qualified domain name,
2014-11-13 20:54:00 373 (ERROR): and re-run this installer.
2014-11-13 20:54:00 374 (ERROR):
2014-11-13 20:54:00 375 (ERROR): ********************* ERROR *********************
2014-11-13 20:54:00 376 (FATAL): exiting…
———————-
What can i do to solve that?
Thanks
The info in the error says :
Your hostname (ip-10-0-0-128) is not set properly. Please change your hostname to a fully qualified domain name, and re-run this installer.
Hi,
to solve this just put in your command line:
hostname yourdomain.com
Would you undertake to install an instance for us?
Your host name is not setup properly . please change your host name to fully qualified domain name error……
How to solve it?
[…] on setting up a CPanel environment, so we were mostly sustained by a couple of good articles by Rob Scott and Antonie Potgieter. CPanel themselves wrote an article on how to set up the environment but […]
Hi,
Have I become a registered user on cPanel to install WHM/cPanel in my instance no AWS?
Does AWS offer any type of web service that come with WHM/cPanel installed??
Thanks.
Hi-
I am not sure I understand.
I think the answer is that you have to install / register cPanel/WHM yourself and that Amazon does not have a one click solution to install it for you. I could be wrong, so you might want to check with Amazon.
On more thing: MySQL, FTP Server, MailServer are installed with WHM/cPanel?
I’m a VPS user for a lot of years but all of that VPS that I used came with WHM/cPanel, MySQL Server, FTP Server, MailServer, WebMail installed, so I´m afraid to make all of this configuration by myself.
Thanks.
I think most of that should come bundled with whatever flavor of Linux you are using. You can then install WHM/cPanel and manage those services through WHM.
Thnak you for your reply.
In AWS Marketplace I found the AMI CloudLinux
(https://aws.amazon.com/marketplace/pp/B00C2EOLBG/ref=srh_res_product_title?ie=UTF8&sr=0-2&qid=1427322514692)
Do you know CloudLinux? Would you recommend it?
Hi Ed –
I used CentOS.
I think that I could not get WHM to install on flavors other than CentOS which is why I did not use Cloud Linux. Now that I think about it, I am not sure Cloud Linux was around when I did it. I will definitely check it out now that I know it exists. It looks like it might be a good solution with cPanel rolled into it which would make the installation simpler.
Thanks,
I’m really new to this thing, and got stuck at step 5 , where I should ‘Click on Go To Record Sets and add an a entry for your public IP address’. Which IP addresses should I set it on? Is it the elastic IP that has been set earlier?
You should add the public IP address you want to use.
Thanks,
I am unable to open up the cpanel through browser.
http://ipadress:/2087, I am entering the public IP that is assigned to me but am not getting anything. 2087 is port here?
It is hard to say what is causing this without being privy to the steps you took to get there.
I ran into a problem at the install cpanel step – I got an error regarding no hostname to resolve I just used the following command – hostname your FQDN ex: hostname mydomain.net
I followed the steps in the post to install/config everything.. I am unable to open up the cpanel through browser with https://my.domain:/2087.
I entered it with my public ip address. and with using http (port 80) I get:
Not Found
The requested URL /2087 was not found on this server
Apache/2.4.12 (Unix) OpenSSL/1.0.1e-fips mod_bwlimited/1.4 Server at SERVER IP Port 80
I have opened the ports: 80, 443, and 22. I’m not sure what I did wrong.
If I go to http://mydomain.net I get the cpanel Sorry page from the cgi_sys dir
I got it….Had to use https;\\my.domain.net:2087 instead of https;\\my.domain.net:\2087
hi,
Can you please guide me in adding 2 network interfaces to cpanel which is hosted in AWS.
I was able to add the 2nd network interface in AWS and mapped it to cpanel, but when we add a second private ip in the new network interface it cannot be mapped to the elactic ip’s
Thanks
Hi Vamsi
I wrote this post over a year ago and do not use the AWS products anymore so I am not familiar with any changes that may have happened on the AWS side of things.
Sorry I can’t be of more assistance.
Hi Rob, is there a reason you don’t use AWS any more?
Hi Matthew-
It really depends on your application.
For me the decision was based on cost & speed.
I feel like greater speed gains come from the location of the server in relation to the user base. Most of what I host is local business so the redundancy etc that AWS offers was not as important to me in this application as the speed gains with a server closer to the users.
It is also relatively expensive especially compared to more traditional hosting environments.
Very useful article. Installation is a breeze….
Thanks for the feedback!
followed the steps in the post to install/config everything.. I am unable to open up the cpanel through browser with https://my.domain.com
I entered it with my public ip address. and with using http (port 80) I get:
Not Found
The requested URL was not found on this server
Apache/2.4.12 (Unix) OpenSSL/1.0.1e-fips mod_bwlimited/1.4 Server at SERVER IP Port 80
I have opened the ports: 80, 443, and 22. I’m not sure what I did wrong.
If I go to http://mydomain.net I get the cpanel Sorry page from the cgi_sys dir
sudo su –
…should almost always be used. 😀
Cpanel installed on VPC EC2 is same as on any VPS. How can we control multiple cpanel installed on multiple EC2 and achieve cloud architecture for further expansion. Cpanel confirms they require static IP and doesn’t support Cpanel.
After Execute installation files command
sh latest
i am getting the following error
When you use Red Hat Enterprise Linux®, you must register
2015-12-02 09:02:45 1028 (ERROR): with the Red Hat Network before you install cPanel & WHM.
2015-12-02 09:02:45 1029 (ERROR): Run the following command to register your server: /usr/sbin/rhn_register
i tried : /usr/sbin/rhn_register but its not working
Can anyone resolve this?
This is great information. One small detail. You cannot do this cPanel/WHM install if you already have MySQL or Maria DB installed on your server. Amazon gives great instructions for configuring your linux instance. However, since Amazaon doesn’t really care about cPanel or WHM they just continue with MySQL.
So when you configure your Linux instance, you must install cPanel/WHM before you add MySQL to your server EC2 instance or this procedure will not work.
If someone knows what to do when you already have MySQL installed, I would love to know.
How to upload database in amazon hosting please help
Will probably give a try
I am currently running EC2 instance without cPanel & WHM
just want to hot multiple sites in future
Oh my goodness! Incredible article dude! Many thanks.
Hi, thanks for this very useful article. I have a question, now that Amazon has released Lightsail could I just create an Amazon Linux OS instance and install cPanel and WHM on that?
Thanks in advance.
Hi Graham –
I don’t use AWS anymore so I was a little out of the loop on what Lightsail was, so thanks for turning me on to it. I would assume since you can have a lamp stack you should probably be able to do it, but I didn’t fire up a Lightsail VPS to find out. Let me know if you do.
Rob
This tutorial worked for me: https://5best.cloud/build-cpanel-cloud-hosting-amazon-aws-1/
HI
Rather than using elasicip.com:2087 , cannot we use domainname.com:2087
I do not understand the difference. I think elasticip.com:2087 is just a generic placeholder for what the elastic IP would be. If you used a domain name you could probably do that, but it would change some of the steps.
Where can I find your post on configuring nameservers
I think everything I have posted is in this post.
You could try looking through all the posts to see if there is something there that catches your eye.
https://robjscott.com/about-rob-scott/blog/
I cant login into Putty
Hi, I setup a an AWS EC2 instance on Cent OS (WHM & cPanel). However, even though I put a index.php pages in the public_html folder (to print just Hello World”), I am still getting a 404 Not Found error. Not just that, I also tried creating a folder ‘test’ within public_html and placed a similar index.php file there but it gives the same error. What could be the reason? Thank you.
Hey Rob, this is an great tutorial I really appreciate your efforts. I just setup everything but I got an error after installation.
When I entered https://myipaddress:/2087 in my browser it shows me 404 error can please help me there, I’m a newbie!
Thanks again!
Its 2018 and it still works fine! thanks for a great tutorial!
Thanks for the feedback Tim!