Tutorial: How to install Grav CMS on Ubuntu 18.04

Grav is a CMS like Wordpress and Drupal.  It has some advantages over those, though.  For example, it doesn't need a database like mysql to work properly.  

Here's a tutorial with the steps necessary to install on a fresh Ubuntu 18.04 server.

Step 1:  Pre-requisites

Grav requires a web server (we'll use Apache) and PHP, as well as a few extra modules for each.

Login to your Ubuntu 18.04 server using ssh, or terminal.  Then since we'll be installing stuff as root, use this command to start a root shell.

sudo -s

Be careful, because when you're running a root shell, you could accidentally remove important stuff or mess up your system.  So it's a good idea to check commands over before running them, and copy-and-paste is always recommended.

Now that you're root, you can install Apache and PHP, as well as some PHP extensions that Grav will use:

apt update && apt upgrade
apt install apache2 php php-mbstring php-gd php-curl php-xml php-zip

Great...  It should look something like this:

Once it's installed, you'll be able to load up the default Apache page on your webserver by using a web browser.  It should look something like this when you go to your server's address:

If you get to this point, congratulations.  You have a web server running!

Step 2: Install Grav

For this next step, you'll have to go to the Grav site and find the URL of the latest version.  Look for downloads, and copy-and-paste the URL.

Now you can download that to the webroot of your server, which should be at /var/www/html/

The second line below will grab the latest version (which you can copy in paste in place of the getgrav URL, and save it as "grav.zip".

cd /var/www/html/
wget -O grav.zip https://getgrav.org/download/core/grav-admin/1.5.1

And the result should be something like this:

And you should have a zip file named "grav.zip" in the current directory.  We will unzip it.  Of course, we may have to install unzip first :-)

So go ahead and unzip grav.zip.  Then we can move all the files inside the grav-admin folder to the root of the webserver.  There's a hidden file called ".htaccess" in the grav-admin directory.  Don't forget to grab that one too.  And then you can remove the zip file.

cd /var/www/html/
unzip grav.zip
mv grav-admin/* /var/www/html/
mv grav-admin/.htacess /var/www/html/
rm grav.zip

And now we need to set the permissions for the files we just installed.  Since you're logged in as root, we want to change them to the www-data user, which belongs to the Apache webserver.

chmod -R 755 *
chown -R www-data:www-data *

It should look like this:

Just a couple more things to do...

First, we need to create a virtualhost for apache to recognize your site, and to set some module permissions.

Create a new file called yoursitename.conf at /etc/apache2/sites-available, and put in the following, replacing my example site name (cr7.westwoodtech.ca) with the full address of your site:

cd /etc/apache2/sites-available
nano cr7-westwoodtech-ca.conf

And that file should have this in it (copy and paste, changing the example site name):

<VirtualHost *:80>
     DocumentRoot /var/www/html/
     ServerName cr7.westwoodtech.ca

     <Directory /var/www/html/>
          Options FollowSymlinks
          AllowOverride All
          Require all granted
     </Directory>
</VirtualHost>

Screenshots of this process:

Great, exit and save that file with Control-X.

Now we need to enable the site, and while we're at it, we can enable the rewrite module in Apache that Grav will need.  Then restart Apache.  Enter these commands:

a2ensite cr7-westwoodtech-ca.conf
a2enmod rewrite
systemctl restart apache2

If all goes well, you'll be able to load your grav site!

And from here, you can create your admin user and get started!