How to Install Concrete5 CMS on Ubuntu 15.04/CentOS

Concrete5 is a free and open source content management system published under MIT License. It is designed for making creating and deploying of website pretty easy for users with a minimum of technical skills. It is developed in PHP programming language making its interface components and site structure a powerful framework built from custom components and third-party libraries from projects like Laravel and Symfony Components. Concrete5 always follows model-view-controller development pattern and with version 7 fully embraces domain-driven design as well. It has a beautiful competitive web builder like Squarespace or Wix making creation of website very easy for everyone technical and non-technical people. Some of the awesome features of Concrete5 are listed as follows.

  • Concrete5 comes with an easy to use WYSIWYG text editor.
  • It consists of editing toolbar which enables us to customize our site as we surf.
  • Add a page anywhere, preview your changes before publishing and it's updated everywhere
  • It allows us to track versions and compare differences between.
  • It contains a file manager with bulk upload and image manipulation using Picnik.
  • And much more

In this article, we'll learn how we can setup Concrete5 in our machine running Ubuntu 15.04 or CentOS 7 linux distribution.

Installing LEMP Stack

First of all, we’ll need to setup a complete LEMP Stack in our machine running Ubuntu 15.04 or CentOS 7. It is the combination of Nginx web server, MariaDB database server and PHP modules. To setup the LEMP stack in our machine, we’ll need to open a terminal or console and run the following command in it according to the distribution we're running.

On Ubuntu 15.04

# apt-get update
# apt-get install nginx mariadb-server mariadb-client php5-mysql php-pear php5-gd php5-intl php5-curl php5-xdebug php5-dev php5-xcache php5-fpm curl unzip

On CentOS 7

# yum update
# yum install nginx mariadb-­server mariadb-client php-­mysql php-­pear php-gd php-­xml php­-intl php­-curl php­xdebug php­-dev php-mbstring php-­xcache php5-fpm curl

Configuring MariaDB

Now, we'll need to follow the following steps in order to configure our MariaDB and set a password for the database root user. To configure MariaDB and assign a root password, we’ll need to run the following command.

# mysql_secure_installation
This will ask us to enter the password for root but as we haven’t set any password before and its our first time we’ve installed mariadb, we’ll simply press enter and go further. Then, we’ll be asked to set root password, here we’ll hit Y and enter our password for root of MariaDB. Then, we’ll simply hit enter to set the default values for the further configurations.
so you should just press enter here.
Enter current password for root (enter for none):
OK, successfully used password, moving on…
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Set root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
… Success!
installation should now be secure.
Thanks for using MariaDB!

Note: Please note down the root password of MariaDB as it will be used later to create a database for our Concrete5 application and in the future too.

After its done, we'll start the MariaDB server by running the following systemctl command as both CentOS 7 and Ubuntu 15.04 comes with systemd preinstalled as default init system.

# systemctl start mysql

Configuring PHP

Next. we'll configure our PHP configuration file so that it will fulfill the requirements to run Concrete5 installation. Configuring PHP as required for Concrete5 will result in the best performance it can give. To do so, we'll need to edit the configuration which is located inside /etc/php5/fpm/php.ini using our favorite text editor.

# nano /etc/php5/fpm/php.ini

After the file is opened with the text editor, we'll need to append the file using the following configuration required to run Concrete5.

post_max_size = 20M
upload_max_filesize = 20M
memory_limit = 128M
safe_mode = Off

Creating MariaDB Database

Next, we'll go further towards the creation of our new database so that Concrete5 can store data inside that MariaDB server. To do so, we’ll need to first login to the MariaDB command prompt as root. Here, we’ll need to enter the password of the MariaDB root account that we had set above.

# mysql -u root -p

After we’re logged in into the mariadb command prompt, we’ll create the database, database user, password and assign full privileges to that database. To do so, we'll need to run the following MariaDB console commands.

> CREATE DATABASE concrete5db;
> CREATE USER 'concrete5user'@'localhost' IDENTIFIED BY 'Pa$$worD';
> GRANT ALL PRIVILEGES ON concrete5db.* TO 'concrete5user'@'localhost';

Creating MySQL Database

Configuring Nginx Server

Now, we'll configure our Nginx server and create the virtual host configuration file for making our concrete5 site running in the web server. To do so, we'll need to open /etc/nginx/sites-available/ using a text editor.

# nano /etc/nginx/sites-available/

Then, we'll simply append the following configuration into the file.

server {
listen 80;
root /var/www/;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$args;

location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_index index.php;
fastcgi_pass unix://var/run/php5-fpm.sock;
include fastcgi.conf;

Once its done, we'll save the file and exit the text editor.

After that, we'll need to activate the configuration file by creating a new link of the newly created nginx file under /etc/nginx/sites-enabled/ directory. This can be done by running the following command.

# ln -s /etc/nginx/sites-available/ /etc/nginx/sites-enabled/

Downloading Concrete5

We'll download the latest release of Concrete5 ie version 5.7 from the Official Download Page. We'll open the download page and get the link of the zipped compressed file. Then, we'll simply download it using curl command in a terminal or console under /tmp/ directory.

# cd /tmp/
# curl -LJO

Downloading Concrete5

Once its successfully downloaded, we'll gonna extract it using unzip.

# unzip

Then, we'll gonna move the entire extracted concrete5 directory to our webroot we had set above in our nginx server configuration file ie /var/www/ . We can do that by running the following command.

# mkdir -p /var/www/
# mv /tmp/concrete5.7.5.6/* /var/www/

Fixing Permissions and Ownership

Next, we'll gonna fix some file permissions and ownership of the installation path. First, we'll gonna set the ownership of the installation directory to nginx process owner so that Nginx web server will have full access of the files and directories to edit, create and delete.

# chown www-data: -R /var/www/

Starting and Enabling Services

We’ll now start our newly installed Nginx web, MariaDB database and php5-fpm services in our machine. To do so, we'll need to run the following command according to the distribution we're running.

On Ubuntu 15.04

As we know, Ubuntu 15.04 is shipped with systemd as the default init system, so we'll need to execute the following commands to start nginx mariadb and php-fpm.

# systemctl start nginx mysql php5-fpm

After its started, we'll now make it able to start automatically in every system boot by running the following command.

# systemctl enable nginx mysql php5-fpm

Synchronizing state for nginx.service with sysvinit using update-rc.d...
Executing /usr/sbin/update-rc.d nginx defaults
Executing /usr/sbin/update-rc.d nginx enable
Synchronizing state for mysql.service with sysvinit using update-rc.d...
Executing /usr/sbin/update-rc.d mysql defaults
Executing /usr/sbin/update-rc.d mysql enable
Synchronizing state for php5-fpm.service with sysvinit using update-rc.d...
Executing /usr/sbin/update-rc.d php5-fpm defaults
Executing /usr/sbin/update-rc.d php5-fpm enable

On CentOS 7

Also in CentOS 7, systemd is the default init system so, we'll run the following command to start them.

# systemctl start nginx mariadb php5-fpm

Next, we'll enable them to start automatically in every startup of init system using the following command.

# systemctl enable nginx mariadb php5-fpm

ln -s '/usr/lib/systemd/system/httpd.service' '/etc/systemd/system/'
ln -s '/usr/lib/systemd/system/mariadb.service' '/etc/systemd/system/'
ln -s '/usr/lib/systemd/system/php5-fpm.service' '/etc/systemd/system/'

Allowing Firewall

Now, we'll gonna configure our firewall programs to allow port 80 (http) so that our nginx web server running Concrete5 will be accessible from other machines in the network across the default http port ie 80.

On Ubuntu 15.04

Iptables is a popular firewall program which is installed in the ubuntu distributions by default. To expose port 80, we'll need to run the following commands in a terminal or console.

# iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
# /etc/init.d/iptables save

On CentOS 7

As CentOS 7 has systemd installed by default, it contains firewalld running as firewall program. In order to open the port 80 (http service) on firewalld, we'll need to execute the following commands.

# firewall-cmd --permanent --add-service=http


# firewall-cmd --reload


Accessing Web Interface

Finally, after everything is setup and configured in above steps, we'll now go for accessing the web installation process of Concrete5. To do so, we'll need to point our web browser to http://ip-address/ or . Here, in this tutorial, we'll point our browser to . After done, we'll be welcomed by the Concrete5 Installation Page as shown below.

Concrete5 Language

Now, we'll select the language for our Concrete5 CMS. Once we have selected our language, we'll go further towards continuing the installation. On the next page, the setup will check if the dependencies are fulfilled or not. As we can see, we have already installed and configured all the required dependencies so we'll continue further.

Requirements Check

Next, we'll need to enter the required information for our site like Site Name, Administration information which will be required for us to login to our dashboard. Then, we'll need to enter the database login information which we had created in the above step.

Configuring Site

Here, we've entered Server, MySQL username, MySQL password and Database Name as localhost, concrete5user, Pa$$worD and concrete5db respectively that we had configured above.

Concrete5 Installed

Once done, we'll see the progress bar which shows us the installation of Concrete5. Once its completed, we'll be welcomed to the homepage of our website logged in as admin. Then, we can customize our site as our need and desire.

Concrete5 Homepage

To login as the admin or user into the dashboard, we'll need to point our browser to as we can see below.

Login Screen Concrete5


We've finally installed Concrete5 Content Mangement System in our machine running Ubuntu 15.04 and CentOS 7. Now, we can customize our website, install themes, plugins, templates and make the site look and work as our need and requirements. Really, Concrete5 has made content management and creating website pretty easy and fast. We don't need any knowledge of coding to create our website built with concrete5. If you have any questions, suggestions, feedback please write them in the comment box below so that we can improve or update our contents. Thank you ! Enjoy :-)

Arun Pyasi 3:00 am


Your email address will not be published. Required fields are marked *

1 Comment