---
title: "A Step-by-Step Guide to Installing Virtualmin on Ubuntu"
description: "Learn how to install Virtualmin on Ubuntu Linux to control your system with an easy-to-use UI accessible over the web!"
canonical: "https://adamtheautomator.com/virtualmin/"
---

# A Step-by-Step Guide to Installing Virtualmin on Ubuntu

> Learn how to install Virtualmin on Ubuntu Linux to control your system with an easy-to-use UI accessible over the web!

Source: https://adamtheautomator.com/virtualmin/

---

ATA Learning

Tap to hide

[

ATA Learning

](/)

*   [Home](/)
*   [Tutorials](/tutorials/)
*   [Instructors](/author/)
*   [Advertising](/advertising/)
*   [Recommended Resources](/resources/)
*   [About Adam](/about-adam/)

Search for:  

*   [](https://twitter.com/adbertram)
*   [](https://github.com/Adam-the-Automator)
*   [](https://www.linkedin.com/company/adam-the-automator-llc)
*   [](/feed/)

![A Step-by-Step Guide to Installing Virtualmin on Ubuntu](https://adamtheautomator.com/wp-content/uploads/2023/07/virtualmin.jpg)

# A Step-by-Step Guide to Installing Virtualmin on Ubuntu

[![](https://secure.gravatar.com/avatar/2788bb1a3f735603f81eca51d68daec56a9d97e805a10268fb2c20afcc76b81b?s=192&d=mm&r=g)Nicholas Xuan Nguyen](https://adamtheautomator.com/author/nicholas-xuan-nguyen/)24 July 20238 min. read

Categories: [IT Ops](/category/it-ops/)

Tags:[Linux](/tag/linux/)

Table of Contents

*   [Prerequisites](#prerequisites)
*   [Installing Virtualmin on Ubuntu](#installing-virtualmin-on-ubuntu)
*   [Configuring UFW to Allow Access to the Virtualmin Web UI](#configuring-ufw-to-allow-access-to-the-virtualmin-web-ui)
*   [Accessing the Virtualmin Web UI](#accessing-the-virtualmin-web-ui)
*   [Configuring the Virtualmin Server](#configuring-the-virtualmin-server)
*   [Verifying the Virtualmin Installation](#verifying-the-virtualmin-installation)
*   [Conclusion](#conclusion)

Domain hosting management can be a challenge without a robust control panel. But today, you are in luck! Virtualmin is one of Ubuntu users’ most popular and feature-rich website control panels.

In this tutorial, you will learn to install Virtualmin on your Ubuntu server to get you started in managing your domain hosting environment.

Keep reading to enter the world of hassle-free web hosting!

## Prerequisites

This tutorial comprises hands-on demonstrations. Be sure you have the following in place to follow along:

*   An Ubuntu server with root privileges – This tutorial uses Ubuntu 20.04 LTS, but you can apply the steps to any Ubuntu 16+ version.

Related:[How to Install Ubuntu 20.04 \[Step-by-Step\]](https://adamtheautomator.com/install-ubuntu/)

*   A fully qualified domain name (FQDN) that [points to your Ubuntu server](https://www.hostinger.com/tutorials/dns/how-to-point-domain-to-vps). Virtualmin requires a domain name to connect to the web UI panel and your virtual server.

## Installing Virtualmin on Ubuntu

Virtualmin offers a wide range of features to simplify the management of multiple domains and websites. Built upon the [Webmin platform](https://adamtheautomator.com/install-webmin/), Virtualmin provides an intuitive web-based interface that enables you to create, configure, and manage various aspects of your hosting environment.

Related:[How to Install Webmin on Ubuntu Linux](https://adamtheautomator.com/install-webmin/)

But before you can enjoy Virtualmin’s features, you must first install it on your system as follows:

1\. Open a terminal, and run the below [`apt update`](https://linuxize.com/post/how-to-use-apt-command/#updating-package-index-apt-update) command to update your system’s package repository. Doing so ensures you have the latest software versions and security patches.

Related:[Learning Ubuntu Apt Get Through Examples](https://adamtheautomator.com/ubuntu-apt-get/)

```bash
apt update -y
```

![Updating the system’s package repository](https://adamtheautomator.com/wp-content/uploads/2023/07/image-181.png)

Updating the system’s package repository

2\. Once updated, execute the following command, which does not provide output but sets your server’s hostname (`set-hostname`) to your FQDN (i.e., `example.com`).

Ensure your domain name is valid and resolves to your server’s IP address, which is crucial for SSL certificate generation later.

```bash
hostnamectl set-hostname example.com
```

3\. Next, run the below `wget` command to download the Virtualmin installation script named `install.sh` from the URL `http://software.virtualmin.com/gpl/scripts/`.

This script is provided by the Virtualmin project, which you will use to automate the installation process of Virtualmin on your server.

Related:[Install Python Wget and Automate your File Downloads](https://adamtheautomator.com/python-wget/)

```bash
wget http://software.virtualmin.com/gpl/scripts/install.sh
```

![Downloading the Virtualmin installation script](https://adamtheautomator.com/wp-content/uploads/2023/07/image-180.png)

Downloading the Virtualmin installation script

4\. Now, execute the `chmod` command below, which does not provide output but sets the script as executable. Doing so allows you to run the script and initiate the installation process.

Related:[Manage Directory and File Permissions with Chmod](https://adamtheautomator.com/chmod-recursive/)

```bash
chmod a+x install.sh
```

5\. Lastly, run the installation script (`./install.sh`) with the following command.

```bash
./install.sh
```

Type y and press Enter when prompted to start the installation process.

![Confirming the installation process](https://adamtheautomator.com/wp-content/uploads/2023/07/image-179.png)

Confirming the installation process

The installation process can be long, depending on the speed of your server and the number of packages that need to be installed. Do not interrupt or abort this process, as it may cause unexpected errors in the future.

![Overviewing the installation process begins](https://adamtheautomator.com/wp-content/uploads/2023/07/image-178.png)

Overviewing the installation process begins

You will see a similar screen as shown below if the installation is successful.

![Viewing the successful installation](https://adamtheautomator.com/wp-content/uploads/2023/07/image-177.png)

Viewing the successful installation

## Configuring UFW to Allow Access to the Virtualmin Web UI

Now that you have installed Virtualmin on your Ubuntu server, you need access to a control panel (Virtualmin Web UI) where you can manage your hosting environment.

You must configure the UFW firewall to allow access to the Virtualmin Web UI. By default, the Virtualmin Web UI listens on port 10000 for incoming connections.

Related:[How To Set Up the UFW Firewall on Linux](https://adamtheautomator.com/ufw-firewall/)

To allow access to the Virtualmin Web UI:

Run the following command to add a firewall rule that allows Virtualmin Web UI access (`1000`) through the firewall.

```bash
ufw allow 10000
```

![Allowing Virtualmin Web UI access through the firewall](https://adamtheautomator.com/wp-content/uploads/2023/07/image-182.png)

Allowing Virtualmin Web UI access through the firewall

Now, run the below command to verify the changes made to UFW.

```bash
ufw status verbose
```

You will see that access is allowed for port **10000** as below.

![Verifying the UFW changes](https://adamtheautomator.com/wp-content/uploads/2023/07/image-183.png)

Verifying the UFW changes

## Accessing the Virtualmin Web UI

You have just allowed Virtualmin Web UI in your firewall, but how do you access the Virtualmin Web UI? You can access the Virtualmin Web UI via your preferred web browser, like Google Chrome.

Related:[How to Install Google Chrome for Ubuntu](https://adamtheautomator.com/install-google-chrome-for-ubuntu/)

For example, if your FQDN is example.com and you have enabled access to port 10000, then you can access Virtualmin Web UI using the following URL in your browser: http://example.com:10000.

To access the Virtualmin Web UI:

Open your web browser, navigate to your FQDN followed by port 10000 (i.e., _**http://example.com:10000**_), and click **Proceed to ….** to continue.

> 💡 _Self-signed certificates are not trusted by default, but proceeding is generally safe for initial access within a trusted environment._

The red “not secure” warning below appears because the default self-signed SSL certificate generated during the Virtualmin installation is not issued by a trusted certificate authority.

Worry not. You will generate and install an SSL certificate for your domain to address this “not secure” warning later.

![Proceeding to access the Virtualmin Web UI](https://adamtheautomator.com/wp-content/uploads/2023/07/image-184.png)

Proceeding to access the Virtualmin Web UI

Now, sign in with your Ubuntu credentials on the Webmin sign-in page.

![Signing in to Webmin with Ubuntu credentials](https://adamtheautomator.com/wp-content/uploads/2023/07/image-185.png)

Signing in to Webmin with Ubuntu credentials

Once signed in, your browser redirects to the Virtualmin Web UI like the one below that shows the **Post-Installation Wizard**.

Do not close this window yet; you will need it to configure your Virtualmin server further.

![Accessing the Virtualmin Web UI](https://adamtheautomator.com/wp-content/uploads/2023/07/image-186.png)

Accessing the Virtualmin Web UI

## Configuring the Virtualmin Server

With access to the Virtual Web UI, you should optimize your hosting environment according to your specific needs. How? Configuring your Virtualmin server after installation is crucial in taking advantage of the Virtualmin Web UI.

To configure your Virtualmin server:

1\. On the Post-Installation Wizard, click **Next** to start configuring your Virtualmin installation.

![Initiating configuring the Virtualmin server](https://adamtheautomator.com/wp-content/uploads/2023/07/image-200.png)

Initiating configuring the Virtualmin server

2\. Next, fine-tune the interface performance and email processing with any of the following options, and click **Next** to continue.

These options involve allocating memory resources to improve performance. But considering the trade-off when it comes to increased memory usage is essential.

*   Preload Virtualmin Libraries?

| Option | Details |
| --- | --- |
| **Yes, faster UI with more RAM used (=40M)** | Preloads Virtualmin libraries into memory, resulting in a faster UI response. But this option consumes approximately 40MB of additional RAM. |
| **No, slower UI with less RAM used, but more CPU load** | Reduces memory usage but results in a slightly slower UI response as libraries are loaded on demand. But this option increases CPU load as the libraries must be dynamically loaded. |

*   Run email domain lookup server?

| Option | Details |
| --- | --- |
| **Yes, faster mail processing with more RAM used (=70M)** | Runs an email domain lookup server, which improves mail processing speed. This option requires additional RAM usage, approximately 70MB. |
| **No, slower mail processing with less RAM used, but more CPU load** | Reduces memory usage but results in slower mail processing without a dedicated lookup server. But in turn, this option leads to increased CPU load as the CPU handles mail processing tasks. |

This tutorial’s choice is **Yes** for both options.

![Selecting options for improved performance](https://adamtheautomator.com/wp-content/uploads/2023/07/image-187.png)

Selecting options for improved performance

3\. Choose the **No, email will not be filtered** option for this tutorial to disable virus scanning for incoming emails, and click **Next**.

Why disable virus scanning? ClamAV scanning server consumes RAM even when it is not actively processing email messages. Enabling virus scanning can consume a significant amount of RAM, potentially up to 2GB.

If your system will not be hosting email services or you have alternative email filtering mechanisms, you can disable virus scanning. If you choose **Yes**, you enable virus scanning for incoming emails using the ClamAV scanning server, known as `clamd`.

This feature helps detect and prevent the delivery of emails containing viruses or malware but can generate a high CPU load.

Related:[How to Install ClamAV on Ubuntu Linux](https://adamtheautomator.com/install-clamav-on-ubuntu/)

![Disabling ClamAV virus scanning](https://adamtheautomator.com/wp-content/uploads/2023/07/image-199.png)

Disabling ClamAV virus scanning

4\. Now, keep the default settings for the database server as is, and click **Next**. The **MariaDB database server** is sufficient for this tutorial.

![Selecting a database server](https://adamtheautomator.com/wp-content/uploads/2023/07/image-198.png)

Selecting a database server

5\. On the next screen, provide a strong password for the root user of the MariaDB server, and click **Next**.

![Setting a password for the MariaDB database root user](https://adamtheautomator.com/wp-content/uploads/2023/07/image-197.png)

Setting a password for the MariaDB database root user

6\. Provide your FQDN in the **Primary nameserver** field, and click **Next** twice to continue.

Optionally, enter secondary nameservers if needed. This nameserver facilitates the functioning of your websites, email services, and network services associated with your Virtualmin server.

![Configuring DNS settings](https://adamtheautomator.com/wp-content/uploads/2023/07/image-196.png)

Configuring DNS settings

![Confirming configuration settings](https://adamtheautomator.com/wp-content/uploads/2023/07/image-195.png)

Confirming configuration settings

7\. Select your preferred option for the password storage mode, as follows, and click **Next**.

*   **Store Plain-Text Passwords** – This option stores passwords in plain text format, which provides convenience for password recovery and administration tasks.  
    But mind you that this option is considered less secure if your system is compromised. Anyone accessing the system files or database can easily read the passwords.
*   **Only Store Hashed Passwords** – This option stores passwords in a one-way encrypted format known as hashed passwords.  
    Hashing is a more secure, as the original passwords cannot be easily retrieved from the stored hashes.

This tutorial’s choice is the **Only store hashed passwords option** mode.

![Selecting a password storage mode](https://adamtheautomator.com/wp-content/uploads/2023/07/image-194.png)

Selecting a password storage mode

8\. Select your preferred MariaDB database size and click **Next**. This tutorial’s choice is a **Medium system with 2G of RAM with regular MariaDB use.**

The choice of the MariaDB configuration size depends on your system’s available RAM and the anticipated usage of the database. But striking a balance between memory utilization and database performance is strongly recommended.

![Selecting a MariaDB configuration size](https://adamtheautomator.com/wp-content/uploads/2023/07/image-193.png)

Selecting a MariaDB configuration size

9\. Now, select the **Per-domain directory under….** option, and click **Next**.

This option ensures consistent management and mitigates the risk of accidental deletion.

![Selecting the SSL directory](https://adamtheautomator.com/wp-content/uploads/2023/07/image-192.png)

Selecting the SSL directory

10\. Configure the virtual server creation with the following:

*   **Setup default virtual server?** – Select the **Create server with domain** option and provide your FQDN to create a default virtual server. This default virtual server will serve requests to your system if the request does not match any other domain.  
    This behavior ensures all incoming requests are handled appropriately.
*   **Enable SSL on default server?** – Select the **Yes, with Let’s Encrypt certificate** option to enable SSL on the default server using a certificate generated from  
    Let’s Encrypt. Let’s Encrypt provides free SSL certificates recognized and trusted by most modern browsers.

> 💡 _Do not select the **Yes, with self-signed certificate** option. As mentioned earlier, a self-signed certificate is not issued by a trusted certificate authority, which results in a browser warning._

Once configured, click **Next** to continue.

![Setting up the default virtual server and enabling SSL](https://adamtheautomator.com/wp-content/uploads/2023/07/image-191.png)

Setting up the default virtual server and enabling SSL

11\. Click **Finish** to finalize the configuration.

![Finalizing the Virtualmin server configuration](https://adamtheautomator.com/wp-content/uploads/2023/07/image-190.png)

Finalizing the Virtualmin server configuration

12\. Lastly, click **Re-check and refresh configuration** to apply the new configuration.

![Applying the new Virtualmin server configuration](https://adamtheautomator.com/wp-content/uploads/2023/07/image-189.png)

Applying the new Virtualmin server configuration

You will see a similar screen as below if everything goes well.

Congratulations! You are now ready to quickly create and manage multiple domains, websites, email accounts, databases, and more, all from a centralized control panel.

![Overviewing configuration update progress](https://adamtheautomator.com/wp-content/uploads/2023/07/image-188.png)

Overviewing configuration update progress

## Verifying the Virtualmin Installation

After configuring Virtualmin, how do you know the installation works? You will verify your Virtualmin installation via a web browser, so be sure you have your FQDN ready.

Open a new tab on your web browser, and navigate to your FQDN without appending the port number 10000.

If the installation and configuration work as intended, you will see a default web page, as shown below

![Verifying the Virtualmin installation](https://adamtheautomator.com/wp-content/uploads/2023/07/image-202.png)

Verifying the Virtualmin installation

Notice that the red “not secure” warning no longer appears, indicating that the SSL certificate was configured correctly and trusted by the browser.

![](https://adamtheautomator.com/wp-content/uploads/2023/07/image-203.png)

Verifying the SSL installation

## Conclusion

Throughout this tutorial, you have successfully installed and configured Virtualmin on your Ubuntu server. You now have access to a robust website control panel that simplifies the management of your hosting environment.

With a wide range of features and options available, you can transform your server into an advanced hosting environment that suits the requirements of your web applications.

Now, why not further enhance your hosting experience? How about [configuring common mail clients to download mail for POP3 and IMAP](https://www.virtualmin.com/documentation/email/pop-and-imap/)? Or [host Git repositories with Virtualmin](https://www.virtualmin.com/documentation/web/git/) to enable seamless collaboration and version control?

Related:[Manage Repositories via the GIT Ansible Module](https://adamtheautomator.com/git-ansible/)

Share this article

[Share on X](https://twitter.com/intent/tweet?url=https%3A%2F%2Fadamtheautomator.com%2Fvirtualmin%2F&text=A%20Step-by-Step%20Guide%20to%20Installing%20Virtualmin%20on%20Ubuntu)[Share on Facebook](https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fadamtheautomator.com%2Fvirtualmin%2F)[Share on LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fadamtheautomator.com%2Fvirtualmin%2F)

## Related Posts

![](https://adamtheautomator.com/wp-content/uploads/2022/09/Practical-Linux-Unix-Tee-Commands-for-the-Linux-Admin.jpg)

### [Master Unix tee Commands for Real-World Linux Admin Tasks](/unix-tee/)

Simplify Linux output management and streamline your workflow with the “Unix tee” command. This tutorial guides you through its practical applications.

![](https://adamtheautomator.com/wp-content/uploads/2024/03/openldap-4.jpg)

### [How to Install and Configure an OpenLDAP Ubuntu Server](/openldap/)

Unlock the power of OpenLDAP on Ubuntu for centralized user authentication, seamless access control management, and enhanced directory services!

![](https://adamtheautomator.com/wp-content/uploads/2024/03/pipe-command-in-linux-1.jpg)

### [Unleashing the Power of the Pipe Command in Linux](/pipe-command-in-linux/)

Unlock the prowess of the pipe command in Linux to streamline tasks, boost productivity, and simplify complex operations effortlessly!

## Categories

*   [IT Ops](/category/it-ops/)
*   [Cloud](/category/cloud/)
*   [DevOps](/category/devops/)
*   [Home Ops](/category/home-ops/)
*   [Information Security](/category/infosec/)
*   [Software Development](/category/software-development/)

## Site

*   [Home](/)
*   [Tutorials](/tutorials/)
*   [Instructors](/author/)
*   [Advertising](/advertising/)
*   [Recommended Resources](/resources/)
*   [About Adam](/about-adam/)

Copyright 2026© ATA Learning | [Privacy Policy](/privacy/)
