X
    Categories: Tutorials

Install Grav CMS on an Ubuntu VPS

In this article, we will explain how to install Grav on an Ubuntu 14.04 VPS with PHP-FPM and Nginx. Grav is a fast, simple, and flexible file-based content management system (CMS) application written in PHP and uses Twig as a template engine. This guide should work on other Linux VPS systems as well but was tested and written for an Ubuntu 14.04 VPS.

Login to your VPS via SSH

ssh user@vps_IP

Update the system and install necessary packages

[user]$ sudo apt-get update && sudo apt-get -y upgrade
[user]$ sudo apt-get install software-properties-common git nano curl build-essential libyaml-dev

Install and configure PHP, composer and required PHP modules

To install the latest stable version of PHP version 7 and all necessary modules, run:

[user]$ sudo add-apt-repository ppa:ondrej/php
[user]$ sudo apt-get update
[user]$ sudo apt-get -y install php7.0-fpm php7.0-cli php7.0-gd php7.0-mbstring php-pear \
            php7.0-curl php7.0-dev php7.0-opcache php7.0-xml

The following PHP extensions are optional but recommended:

APCu is the official replacement for the outdated APC extension. To install it, run the following commands:

[user]$ sudo pecl install apcu
[user]$ sudo sh -c "echo extension=apcu.so > /etc/php/7.0/mods-available/apcu.ini"
[user]$ sudo ln -s /etc/php/7.0/mods-available/apcu.ini /etc/php/7.0/fpm/conf.d/20-apcu.ini
[user]$ sudo ln -s /etc/php/7.0/mods-available/apcu.ini /etc/php/7.0/cli/conf.d/20-apcu.ini
[user]$ sudo service php7.0-fpm restart

The Yaml PHP Extension provides a wrapper to the LibYAML library and can dramatically increase performance. To install it, run the following commands:

[user]$ sudo pecl install yaml-beta
[user]$ sudo sh -c "echo extension=yaml.so > /etc/php/7.0/mods-available/yaml.ini"
[user]$ sudo ln -s /etc/php/7.0/mods-available/yaml.ini /etc/php/7.0/fpm/conf.d/20-yaml.ini
[user]$ sudo ln -s /etc/php/7.0/mods-available/yaml.ini /etc/php/7.0/cli/conf.d/20-yaml.ini
[user]$ sudo service php7.0-fpm restart

Composer is a dependency manager for PHP with which you can install packages. Composer will pull in all the required libraries and dependencies you need for your project.

[user]$ curl -sS https://getcomposer.org/installer | php
[user]$ sudo mv composer.phar /usr/local/bin/composer

Create a new PHP-FPM pool for your user:

[user]$ sudo nano /etc/php/7.0/fpm/pool.d/yourUser.conf
[yourUser]
user = yourUser
group = yourUser
listen = /var/run/php-fpm-yourUser.sock
listen.owner = yourUser
listen.group = yourUser
listen.mode = 0666
pm = ondemand
pm.max_children = 5
pm.process_idle_timeout = 10s
pm.max_requests = 200
chdir = /

Do not forget to change yourUser with your username.

Restart PHP-FPM:

[user]$ sudo service php7.0-fpm restart

Install Grav

Installing Grav is very easy, first create a root directory for your Grav CMS using the following command:

[user]$ mkdir -p ~/myGrav.me

Clone the project repository from GitHub:

[user]$ git clone https://github.com/getgrav/grav.git ~/myGrav.me
[user]$ cd  ~/myGrav.me

Install all dependencies:

[user]$ composer install --no-dev -o

To install the plugin and theme dependencies, run the following:

[user]$ bin/grav install

Install and configure Nginx

Ubuntu 14.04 comes with Nginx version 1.4, to install the latest stable version of Nginx version 1.8, run:

[user]$ sudo add-apt-repository -y ppa:nginx/stable
[user]$ sudo apt-get update
[user]$ sudo apt-get -y install nginx

Next, create a new Nginx server block:

[user]$ sudo nano /etc/nginx/sites-available/myGrav.me
server {

    listen      80;
    server_name myGrav.me;
    root /home/yourUser/myGrav.me;
    index index.php;

    access_log  /var/log/nginx/myGrav.me.access.log;
    error_log   /var/log/nginx/myGrav.me.error.log;

    location / {
      try_files $uri $uri/ /index.php$args;
    }

    location ~* /(.git|cache|bin|logs|backups)/.*$ { 
        return 403; 
    }

    location ~* /(system|vendor)/.*\.(txt|xml|md|html|yaml|php|pl|py|cgi|twig|sh|bat)$ { 
        return 403; 
    }

    location ~* /user/.*\.(txt|md|yaml|php|pl|py|cgi|twig|sh|bat)$ { 
        return 403; 
    }

    location ~ /(LICENSE|composer.lock|composer.json|nginx.conf|web.config|htaccess.txt|\.htaccess) { 
        return 403; 
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php-fpm-yourUser.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_intercept_errors off;
        fastcgi_buffer_size 16k;
        fastcgi_buffers 4 16k;
    }
}

Do not forget to change yourUser with your username.

Activate the server block by creating a symbolic link :

[user]$ sudo ln -s /etc/nginx/sites-available/myGrav.me /etc/nginx/sites-enabled/myGrav.me

Test the Nginx configuration and restart nginx:

[user]$ sudo nginx -t
[user]$ sudo service nginx restart

That’s it. You have successfully installed Grav on your Ubuntu 14.04 VPS. For more information about how to manage your Grav installation, please refer to the official Grav documentation.


Of course you don’t have to do any of this if you use one of our Linux VPS Hosting services, in which case you can simply ask our expert Linux admins to setup this for you. They are available 24×7 and will take care of your request immediately.

PS. If you liked this post please share it with your friends on the social networks using the buttons on the left or simply leave a reply below. Thanks.

View Comments