Ubuntu 16.04 LTS was around for few months now. Today I got some free to check it out. It’s so much better than Ubuntu 14.04 I had been using. So I decided to upgrade my server to Ubuntu 16.04 LTS and thought it might be helpful to post a tutorial so my readers can upgrade their servers too.
Ubuntu 16.04 now ships with Nginx v1.10, PHP v7 and MySQL v5.7. You had only got Nginx v1.4.6, PHP v5.6 and MySQL v5.7 with my old Virtualmin-Nginx setup on Ubuntu 14.04 LTS. That right there is a good reason to upgrade. I’ve tested this setup on my server and its working. It’s working great. You’ll clearly see performance improvements of your website.
And I’m sure you all heard about PHP 7 and how it’s so much better and faster than previous versions of PHP. Now you can enjoy it’s benefits on your server. And MySQL is gone. It had been replaced by MariaDB. MariaDB offers more storage engines and it’s faster than MySQL. There are so many good things to say, But I think we should get to the installation.
I’m going to assume that you already have a VPS with root access. If you don’t, you can get one from a unmanaged VPS providers I recommend. Logged in to Ubuntu 16.04 server as root user, run following command to output your server’s hostname.
If the output is anything other than your domain name or a sub-domain, you should change it before you install VIrtualmin. Refer to change Ubuntu 16.04 hostname from command line tutorial and change it now.
This part is similar on all Linux distributions. Download the Virtualmin installation script to your server,
Run the script to install Virtualmin.
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 Apache 2.4, PHP 7 and MySQL 5.7. But since we’re interested in Nginx, we should stop Apache. Run following command to stop Apache. We will disable it later.
systemctl stop apache2.service
Now that the Apache is not running, you’ll be able to install Nginx. Following command will install it on your Ubuntu 16.04 server.
apt-get install nginx
Now install Virtualmin modules to support Nginx and Nginx SSL,
apt-get install webmin-virtualmin-nginx webmin-virtualmin-nginx-ssl
Installing PHP 7 Modules
You’ll need few PHP modules installed on your server for some php applications to work. Following command will install essential PHP 7 modules on your server.
apt-get install memcached php7.0-mysql php7.0-curl php7.0-gd php-pear php-imagick php7.0-imap php7.0-mcrypt php-memcache php7.0-tidy php7.0-xmlrpc php7.0-xsl php7.0-mbstring php7.0-zip
Running Virtualmin Post-Installation Wizard
You can access Virtualmin on following URL with your root password. Make sure you replace example.com with your domain name. Your DNS should be propagated for this to work. If DNS isn’t propagated yet, you can replace eaxmple.com with your server’s IP address.
You’ll be taken to the Virtualmin Post-Installation Wizard after the login. It is pretty self-explanatory, just remember to select MySQL as database server and Only store hashed passwords as password storing method. You’ll be good with default selections for all other steps.
Configuring Virtualmin to enable Nginx
Virtualmin is configured to use Apache as http server at this moment. You can change this from Features and Plugins module. Go to System Settings -> Features and Plugins from your Virtualmin dashboard and,
- Nginx website
- Nginx SSL website
- Apache website
- SSL website
- DAV Login
- Protected web directories
- AWstats reporting
- Subversion repositories
Save the changes and switch to Webmin from top-left corner. Then go to System -> Bootup and Shutdown. Check apache2 and click Disable On Boot at the bottom of page.
Securing MySQL Databases
There is more you can do to secure MySQL databases. But at this point, running following command will guide you through changing some dangerous default settings. My input for the first question was No ans Yes to everything else.
That concludes Virtualmin-Nginx installation on Ubuntu 16.04. Your VPS is now fully configured to host websites using Nginx as the web server.