Learn How To Installing Fork CMS on Ubuntu 16.04 LTS

July 18, 2019

Table of Contents

If you are using a different system, please check our other tutorials.

Fork is an open source CMS written in PHP. Fork’s source code is hosted on GitHub. This guide will show you how to install Fork CMS on a fresh Ubuntu 16.04 LTS IT Web Services instance.


  • PHP 7.1 or higher.
  • MySQL 5.0 or higher.
  • NGINX or Apache 2.0 with .htaccess, mod rewrite, mod expires (optional but recommended) and mod deflate (optional) enabled.

Before you begin

Check Ubuntu version.

lsb_release -ds
# Ubuntu 16.04.3 LTS

Create a new non-root user account with sudo access and switch to it.

adduser johndoe --gecos "John Doe"
usermod -aG sudo johndoe
su - johndoe

NOTE: Replace johndoewith your username.

Set up the timezone.

sudo dpkg-reconfigure tzdata

Ensure that your system is up to date.

sudo apt update && sudo apt upgrade -y

Step 1 – Install PHP and required PHP extensions, MySQL and NGINX

Ubuntu does not provide the latest PHP version in its default software repositories. We’ll need to add a community maintained Personal Package Archive (PPA) instead.

Download and install PHP 7.1 and required PHP extensions.

sudo add-apt-repository -y ppa:ondrej/php
sudo apt update
sudo apt install -y php7.1 php7.1-cli php7.1-fpm php7.1-curl php7.1-mbstring php7.1-gd php7.1-intl php7.1-mysql php7.1-xml

Check PHP version.

php --version
# PHP 7.1.11-1+ubuntu16.04.1+deb.sury.org+1 (cli) (built: Oct 27 2017 13:49:56) ( NTS )
# Copyright (c) 1997-2017 The PHP Group
# Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
#     with Zend OPcache v7.1.11-1+ubuntu16.04.1+deb.sury.org+1, Copyright (c) 1999-2017, by Zend Technologies

Because there are many existing IT Web Services Docs detailing the installation of MySQL and NGINX, this article will only cover the configuration of NGINX.

Step 2 – Configure NGINX

Run sudo vim /etc/nginx/sites-available/fork.conf and copy/paste the following.

server {
    listen 80;
    root /var/www/fork;
    index index.php index.html;
    server_name example.com;
    location / {
        # Checks whether the requested url exists as a file $uri or directory $uri/ in the root, else redirect to /index.php.
        try_files $uri $uri/ @redirects;
    location @redirects {
        rewrite ^ /index.php;
    location ~ .php$ {
        try_files $uri =404;
        include fastcgi_params;
        fastcgi_pass unix:/var/run/php/php7.1-fpm.sock; # Make sure to doublecheck this!
        fastcgi_index index.php;
        fastcgi_read_timeout 60;
        fastcgi_split_path_info ^(.+.php)(/.+)$;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    # Don't pollute the logs with common requests
    location = /robots.txt  { access_log off; log_not_found off; }
    location = /favicon.ico { access_log off; log_not_found off; }
    # As Fork CMS has the app_root as doc_root, we need to restrict access to a few things for security purposes!
    location ~* ^/(composer..*|vendor/.*|Procfile$|.git/.*|src/Console.*|.*.gitignore|.editorconfig|.travis.yml|autoload.php|bower.json|phpunit.xml.dist|.*.md|app/logs/.*|app/config/.*|src/Frontend/Cache/CompiledTemplates.*|src/Frontend/Cache/Locale/.*.php|src/Frontend/Cache/Navigation/.*.php|src/Frontend/Cache/Search/.*|src/Backend/Cache/CompiledTemplates/.*|src/Backend/Cache/Locale/.*.php)$ {
        deny all;
        access_log off;
        log_not_found off;
    # Deny access to dot-files.
    location ~ /. {
        deny all;
        access_log off;
        log_not_found off;

A summary of the changes that you will be making are as follows.

  • Change the value of the root directive to point to the correct location of your website, such as /var/www/fork.
  • Change the value of the server_name directive to point to your domain name or IP address.
  • Make sure you check if fastcgi_pass is set correctly.

Activate the new fork.conf configuration by linking the file to the sites-enabled directory.

sudo ln -s /etc/nginx/sites-available/fork.conf /etc/nginx/sites-enabled/

Test the NGINX configuration.

sudo nginx -t

Reload NGINX and restart PHP7.1-FPM.

    sudo systemctl reload nginx.service
    sudo systemctl restart php7.1-fpm.service

Step 3 – Download and install Composer

Download Composer dependencies.

sudo apt install -y curl git unzip

Download and install Composer, the dependency manager for PHP.

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('SHA384', 'composer-setup.php') === '544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
sudo mv composer.phar /usr/local/bin/composer

Check the Composer version.

composer --version
# Composer version 1.5.2 2017-09-11 16:59:25

Step 4 – Download and install Fork CMS via Composer

Create a document root directory.

sudo mkdir -p /var/www/fork

Change ownership of the /var/www/fork directory to johndoe.

sudo chown -R johndoe:johndoe /var/www/fork

Download the latest stable release of Fork CMS from the command line.

cd /var/www/fork
composer create-project forkcms/forkcms .

Change ownership of the /var/www/fork directory to www-data.

sudo chown -R www-data:www-data /var/www/fork

Edit the app/config/parameters.yml.dist file and set database information.

sudo vim /var/www/fork/app/config/parameters_install.yml

Using your preferred web browser, open your site and follow the Fork CMS installer. After following the installer you should have Fork up and running. To access the Fork admin area just append /private to your site URL.

Need help?

Do you need help setting up this on your own service?
Please contact us and we’ll provide you the best possible quote!