Best Practices for cPanel Virtualization Templates
We recommend and support the use of the cPanel installer to install and provision cPanel & WHM. However, we understand that this is not the most efficient way for a VPS hosting company to provision a VPS, as this takes some extra time. This article is for hosting companies and data centers that want to be able to provision a VPS or VM with cPanel & WHM already installed for their customer. Installing cPanel in a templated environment shortens the customer’s “setup” time so that they can create a VPS and start working on their website rather than their server.
Create a Minimal VM for Templating
A minimal template VM consists of 10 GB and can be expanded later, per the customer’s requirements.
This document creates a small template that will be expanded once you set it up on the customer’s VPS. Create a new minimal VPS to prepare your template.
We recommend that you customize the following files:
/etc/cpupdate.conf /etc/cpsources.conf /etc/wwwacct.conf /var/cpanel/cpanel.config
Select the tier you are running. The following are our 4 available tiers:
By default, cPanel automatically selects and installs the RELEASE tier. You can select a tier before you install cPanel on your template. Run the following commands (replacing current with your desired tier):
# touch /etc/cpupdate.conf # echo "CPANEL=current" >/etc/cpupdate.conf
This will make cPanel install the version in the CURRENT tier and will cause future updates to pull from the CURRENT tier. Your customer can change this setting within WHM at a later time.
- You cannot downgrade major versions. This means that if you use CURRENT as your tier, your customer will be locked to that version or later.
- Your customer can change this value later in WHM.
If you are a cPanel Partner with your own FastUpdate server, you can edit
HTTPUPDATE=fastupdate.example.com) so that all of your customers update from your FastUpdate Server. This is a good thing to template in.
When you finish your pre-configuration, you can install cPanel & WHM.
Deploy your VPS
When you deploy the customer’s VPS, you must automatically update some files. If you use
libguestfs virt-sysprep, you can achieve this via “
--firstboot” or “
--firstboot-command“. If you do not utilize
libguestfs, consult your hypervisor’s documentation for an alternative option to run scripts or commands upon first boot.
If you use a tool such as
libguestfs virt-sysprep to help finalize your template, ensure that you do not accidentally remove any user accounts or cron jobs.
Before you deploy your VPS, complete the following steps:
- Automatically call
/usr/local/cpanel/bin/set_hostnameon the first boot of the image before any cPanel services start. You can either randomize the hostname or set the hostname based on your customer’s choice.
/etc/wwwacct.confto the main IP address for the VPS.
- If you run a 1:1 NAT environment, run
/scripts/build_cpnatto build your NAT file, and configure Apache accordingly.
/scripts/rebuildhttpdconfto rebuild your Apache configuration with the correct addresses.
The following bash script executes the steps above, but does not update
Updating your Templates
As time goes by, you will find that your templates will become outdated.
To avoid this, have a set schedule to run cPanel updates on all of your templates.
When you are ready to update your template, run the following commands:
# yum update -y # /scripts/upcp
Before you shut down the VM to create the template, to prevent your license from being locked, be sure to run the following commands:
# /scripts/restartsrv_chkservd --stop # /scripts/restartsrv_cpsrvd --stop # rm -f /usr/local/cpanel/cpanel.lisc
The following bash script runs the commands shown above:
- The hostname on OpenVZ/Virtuozzo may not be a Fully Qualified Domain Name (FQDN) on CentOS 7. Virtuozzo controls the hostname via VPS configuration (the
--hostnameparameter of the
prlctlcommands). If you set Virtuozzo manually from inside the VPS, Virtuozzo will reset the hostname on the next reboot. Ensure that you set up the full hostname correctly upon provisioning, as cPanel requires an FQDN.
- OpenVZ/Virtuozzo requires second-level quotas to be enabled which an cause quota-initiation issues.
- Jailshell requires specific steps to enable a full proc mount.