Virtualmin is the most stable web hosting control panel I’ve used so far. It is 100% free software to manage your hosting server. Virtualmin is a free alternative to cPanel and Plesk which are most popular web control panels. cPanel and Plesk are paid control panels and require monthly or yearly subscription to use them in your server. cPanel comes preinstalled with almost all shared hosting servers as it is undoubtedly the best control panel for shared servers.
While cPanel and Plesk are user favourites from a long time, free open-source control panels are gaining huge popularity nowadays. Virtualmin is the best and most stable free alternative to cPanel and Plesk which you can use to manage your cloud, vps and dedicated servers. Virtualmin is the most stable free control panel, it is even considered more stable than cPanel which is the market leader in control panels.
I’ve used cPanel in early days of my blogging when I was using shared servers from leading hosting providers. I always loved cPanel for its ease of use to manage several websites in a single server. I’ve also used Plesk to manage my client’s websites. Plesk is another popular paid control panel which is available for both Linux and Windows OS unlike other control panels which are only available for Linux. cPanel comes preinstalled with managed servers but costs much more than unmanaged servers like AWS, DigitalOcean, Linode, Vultr, etc. I started using Linode and Digitalocean unmanaged servers as I found these much cheaper than managed servers from Bluehost, Siteground, Hostgator, etc.
I was able to manage my websites by accessing my server from a linux terminal. I’ve been using linux for more than 10 years so I had no issues managing my unmanaged servers myself but it was taking a little more time than managing servers using control panels. I found Linode and Digitalocean to be much cheaper and better than most managed hosting providers so I moved my and my client’s websites to Linode which is even cheaper than Digitalocean with similar performance. I was managing my websites from terminal for few years now until a friend of mine requested me to move his websites to Linode from a leading shared hosting provider because they were limiting his usage of resources. I installed LEMP stack from terminal in my friend’s Linode server but he was not able to manage servers from terminal so he requested me to install a free control panel as he had never used Linux and wasn’t aware of any terminal commands.
I started testing all available free control panels like Virtualmin/Webmin, ISPConfig, Control Web Panel, Ajenti, Cyberpanel, Vesta CP, etc. I didn’t liked the user interface of Webmin as I was looking for a cPanel alternative with similar UI. I had installed Webmin and not Virtualmin so I was unable to find any option to host multiple websites so I started using Cyberpanel but found it very unstable. FTP was connecting only in unsecured mode that too very unstable. File/folder permissions were also not done properly so I removed cyberpanel and started using Control Web Panel (formerly CentOS Web Panel). Control Web Panel had too many features and looked very similar to cPanel/WHM but I found it unstable too. ISPConfig and Vesta CP had very limited features. After trying all free control panels and doing a lot of research I finally installed Virtualmin (not only Webmin). Virtualmin is based on Webmin but both have different usage. Webmin is automatically installed with Virtualmin but if you install only Webmin then Virtualmin won’t be installed. Webmin is used to manage your server so it is required whether you install Virtualmin or not. Virtualmin is used to manage your websites (virtual servers). You can run any number of websites with Virtualmin which is not possible if you’ve installed only Webmin. I found Virtualmin/Webmin to be very very stable and using it now to manage all my websites as well as all of my client’s websites. I love how easily I can manage my website files with Virtualmin as it comes with a very stable and feature rich file manager. It also comes with an integrated file editor which looks very similar to sublime text editor which is my favourite editor after VS Code. Installing free Let’s Encrypt SSL with auto renewal is also very easy. Virtualmin has too many features and is very stable but is not as user friendly as cPanel so it can take some time to get used to it. I’m using Virtualmin now for all of my websites and have no plans to use cPanel, Plesk or any other control panel as Virtualmin is very stable, feature rich and completely free.
Let’s see how we can install Virtualmin/Webmin with LAMP or LEMP stack. If you’re not aware of LAMP or LEMP then LAMP stands for LINUX, APACHE2, MySQL and PHP while LEMP stands for LINUX, NGINX, MySQL and PHP. So if you want to use Apache2 then you can install LAMP or if you want Nginx then you can install LEMP. I personally recommend Nginx web server as websites loads much faster and uses much less RAM and CPU compared to Apache2.
With Virtualmin you won’t be paying anymore for control panel and SSL. You’ll also get $100 free credit by signing up to Linode with my Affiliate link so LET’S GET STARTED:
Step 1: Sign up
If you’ve not purchased any hosting then sign up to Linode with my affiliate link where you’ll get free $100 credit for 60 days so you can use $100 worth of Linode resources for 2 months without paying a single penny. You’ll be asked to add a credit card during sign up but don’t worry, you won’t be charged until your credit expires. You can always check your usage in Accounts page under “Accrued Charges”. You can also add your debit card info instead of credit card. Make sure your credit or debit card is enabled for international transactions if you’re using a non-US card. Note, if you sign up directly then you’ll not get any credit so don’t forget to sign up by clicking the button below:
Step 2: Create Linode
Linodes in Linode are similar to droplets in Digitalocean and instances in AWS. So if you’re using AWS you need to create a new instance, a new droplet in case of digitalocean and a new linode if you’re using Linode in order to install Virtualmin and host your websites. If you’re using Digitalocean or AWS or any other hosting then you can follow my other guides. I’m going to create a new Linode for this post.
After logging in to Linode you’ll see a Create Button in top navigation menu which is located in right side of the Linode logo. Clicking this button will show a dropdown menu with options like Linode, Volume, Firewall, etc. We’re going to create a server so we’ll click Linode as you can see in the screenshot below:
Step 3: Linode Configuration
a. In Choose a Distribution, select a Linux OS image which you want to install in your server. You can install whatever OS you’re familiar with. Virtualmin mainly supports Ubuntu, Debian & CentOS. If you’re not sure which OS to select then select latest Ubuntu LTS version. Never use non-LTS version of Ubuntu in production server. You can check supported operating systems here: Grade A supported Operating System
b. In Region, select the region closest to the target visitors of your website or a location closest to you. I’ll recommend to perform a speed test by clicking below button. Perform speed test for each region and select a region with lowest Ping/latency.
c. Select dedicated, shared, high memory or gpu server as per your requirement. If you want best performance or your website uses too much CPU then select Dedicated CPU, if it uses too much RAM then select High Memory otherwise Shared CPU server is good for normal websites and blogs.
d. Add a Label and tags to recognize your Linode in Linode dashboard. Label can be server region, OS name or server hostname like host.your-domain.com, server.your-domain.com, etc. I generally use server hostname because it is unique for each server. Hostname is a sub-domain of your domain which doesn’t have a website hosted on it. You can’t use your-domain.com or www.your-domain.com as hostname. You can use any sub-domain just make sure it won’t be used for any website. You can enter whatever you like in label and tag it won’t make any effect in server.
e. Enter a strong password for root user. Root user is the main user of the server with full root access so make sure it has a very strong password. Write down the password in a safe place because you might not be able to access server if you lose root password.
f. If you want to login through terminal or if you want SFTP access without password then you can add an SSH key by clicking Add an SSH Key which will open a pop-up form where you can paste your public key. If you’ve already added a key then it will be shown with your username and ssh key name which you can select by clicking the checkbox.
g. In the Add-ons section you can enable Backup if you don’t to lose your precious data and files.
h. Private IP and VLAN are not recommended until you have multiple linodes created in same data center and you want them to communicate privately.
i. Once you’re done selecting options for your server, click the Create Linode button located in right side of the screen under Linode Summary.
Step 4: Launch Console
When Linode has finished creating your new server you’ll see a green dot with text RUNNING below the linode label. Now click Launch LISH Console link as shown in the screenshot below.
Step 5: SSH Login
After clicking Launch LISH Console a terminal with black background will open in a new tab in your browser. When you see the text Localhost login:, enter your server username i.e. root and press Enter. Now you’ll be asked to type password, enter the password which was created in step 3 (e) and press Enter. Linux doesn’t show password or asterisk (*) while typing so don’t worry if you don’t see any character in screen while typing.