I’m using a 4GB RAM server from Vultr for this tutorial as usual. Vultr is ranked #1 on our recommended VPS providers list. Like on our previous tutorials, the server you build following this server setup guide will allow you to have all major PHP versions. First step is to get a VPS with at least 4GB of RAM. I’m going to assume you already have a server. It can be an unmanaged VPS from our list of recommended providers or any provider out there.
Once you have the credentials, you can login to your VPS over SSH. This allows you to execute the commands displayed on this and our many other tutorials.
Next, you need to configure a proper hostname for your server. Doing so will avoid potential hostname resolution errors in the future.
With those two steps completed, you can now move on to installing Virtualmin with nginx on Ubuntu 20.04 LTS.
Add Ondřej Surý Repos to Ubuntu 20.04 Server
We will start the installation by adding Ondřej Surý’s PHP and Nginx repositories to the server. Ondřej Surý is a well-known Debian Developer. Using his repositories will allow you to install the latest versions of PHP on the server or even have multiple PHP versions running at the same time. Following command will add ondrej/php PPA to the system.
We will also add ondrej/nginx PPA to the system so we can get the latest nginx version.
Update apt cache,
apt update apt upgrade
Install Virtualmin on Ubuntu 20.04 LTS with Nginx
We will be using the bash script provided by Virtualmin developers for the installation. It’s the easiest way to install Virtualmin. Following command will fetch the bash script to your server.
The script will try to install Apache2 as the webserver. So we will manipulate the install command to skip that and tell Virtualmin to build our server with Nginx instead.
sh /root/install.sh -b LEMP
You’ll be asked to confirm the action. Confirm it and Virtualmin installation will begin. It’ll take few minutes for the installer to complete. It’ll setup Nginx v1.20, PHP v8.1 as the default version and MySQL v8 on the server. You’ll be asked for permission to a swap file if your server has less than 1GB of RAM. You’ll be greeted with following message on your Putty screen when Installation completed.
Install PHP v8.0 and Additional Modules on Ubuntu 20.04 server
Your VPS should have all major PHP versions installed by now. But none of them meets the requirements by most PHP applications. We’ll fix this by installing some of the commonly used modules and their dependencies. These include ImageMagick, Memcached and Redis Server and all the PHP modules suggested by WordPress. Following command should take care of that.
apt install imagemagick memcached redis-server gettext php8.0-imagick php8.0-memcache php8.0-redis php8.0-bcmath php8.0-intl php8.0-mcrypt php8.0-cgi php8.0-fpm php8.0-mysql php8.0-curl php8.0-gd php8.0-imap php8.0-tidy php8.0-xmlrpc php8.0-xml php8.0-xsl php8.0-mbstring php8.0-zip php8.0-cli php8.0-soap php8.0-gmp php8.0-sqlite3
Your server should be ready to server most PHP applications without any hiccups by now. Let’s configure the PHP version used by CLI to PHP v8.0 as well.
update-alternatives --set php /usr/bin/php8.0
It may be possible that some of the PHP applications doesn’t support PHP v8.0 yet. Or it simply needs a specific PHP version other than v8.0, you can follow our instructions to install multiple PHP version on the same server to solve that. This will allow you to have older PHP versions like PHP v5.6 or newer PHP versions like PHP v8.1 on your Ubuntu 20.04 server.
Secure MySQL Installation on Ubuntu 20.04 server
MySQL 8 comes with some dangerous default settings. This section only focuses on securing those. There are more to securing a MySQL installation than this. But running this simple command and following on-screen instructions will give you some comfort that your databases are secure.
You’ll be first asked whether you want to enable VALIDATE PASSWORD plugin for MySQL 8. Enabling this option will cause conflicts with Virtualmin. So, you should opt to disable it here. Press a key other than Y to and then hit Enter to disable it.
Now you’ll be asked to create a password for MySQL root user. Enter a strong password and then you’ll be asked a series of questions. Your response for all these questions should be ‘Yes’.
Complete Virtualmin Post-Installation Wizard
You’ll be taken to the Virtualmin Post-Installation Wizard after the login. It is pretty self-explanatory, just remember to select MySQL/MariaDB as database server and only store hashed passwords as password storing method. You’ll be good with default selections for all other steps.
You’ll be given an option to check Virtualmin configurations after the post-Installation wizard. Click Recheck and refresh configuration button to check your server for errors. The most common error I’ve encountered was system is not setup to use itself as a DNS server. If everything goes well, you’ll be greeted with .. your system is ready for use by Virtualmin.
This concludes Virtualmin and LEMP installation for now. But there are few more things you need to do to make sure your server has optimal configuration to host websites. I’ll guide you through them on Virtualmin Post-Installation Configuration and Server Optimization tutorial.