How to Install Zikula CMS on Ubuntu 20.04 LTS [Step By Step]


In this article, I will take you through the steps to install Zikula CMS on Ubuntu 20.04 LTS. Today many of the modern websites runs on a Content Management System(CMS) because of the number of useful features it provides. There are many open source CMS out there available to use in Linux based Systems. Zikula is one such open source software which allows you to build simple to complex websites using different types of extensions. It contains all of the Symfony features. It also provides a Centralized site administration Interface for better control. More on Zikula Official website.

What is Content Management System(CMS)

Content Management System or CMS is a powerful platform that allows a user to manage and build their website without having the need to write entire source code from scratch. It does the basic infrastructure building for you. CMS allows you to easily install and manage plugins as and when required. It also allows you to store and manage contents like web pages, posts and images.

How to Install Zikula CMS on Ubuntu 20.04 LTS

How to Install Zikula CMS on Ubuntu 20.04 LTS

Also Read: How to Install Julia Programming Language on Ubuntu 20.04 LTS

Step 1: Prerequisites

a) You should have a running Ubuntu 20.04 LTS Server.

b) You should have sudo or root access to run privileged commands.

c) You should have apt or apt-get utility available in your System.

d) You should also have wget utility available in your System.


Step 2: Update Your Server

First, Let's warm up the Package Cache with all the package information from all the enabled repositories and install all the latest available updates using apt update or apt-get update command as shown below.

root@localhost:~# apt update
Get:1 focal-security InRelease [114 kB]
Hit:2 focal InRelease
Get:3 focal-updates InRelease [114 kB]
Get:4 focal-backports InRelease [101 kB]
Ign:5 focal/mongodb-org/5.0 InRelease
Hit:6 focal/mongodb-org/5.0 Release
Get:7 focal-updates/main i386 Packages [562 kB]
Get:8 focal-updates/main amd64 Packages [1,344 kB]
Get:9 focal-updates/main Translation-en [276 kB]
Get:10 focal-updates/main amd64 DEP-11 Metadata [279 kB]


Step 3: Install tasksel

Zikula CMS requires Apache, MySQL and PHP to be pre installed. You can choose to install all the components individually or you can also do it by installing just one application which has all the components pre packed inside it. That application is  LAMP Server. But to install LAMP Server you need tasksel utility so if you don't have this utility already available in your System then install it by using apt-get install tasksel -y command as shown below.

root@localhost:~# apt-get install tasksel -y
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
The following NEW packages will be installed:
tasksel tasksel-data
0 upgraded, 2 newly installed, 0 to remove and 207 not upgraded.
Need to get 0 B/34.0 kB of archives.
After this operation, 289 kB of additional disk space will be used.
Preconfiguring packages ...
Selecting previously unselected package tasksel-data.
(Reading database ... 204049 files and directories currently installed.)


Step 4: Install LAMP Server

Instead of installing all the components of LAMP Server individually using apt or apt-get package manager, you can use tasksel to install Apache, MySQL and PHP in just one single command. This can be done by using tasksel install lamp-server command as shown below.

root@localhost:~# tasksel install lamp-server

How to Install Zikula CMS on Ubuntu 20.04 LTS [Step By Step] 2


Step 5: Check PHP Version

After installing LAMP Server, you can check the currently installed PHP version by using php -v command. As you can see, current version is 7.4.3.

root@localhost:~# php -v
PHP 7.4.3 (cli) (built: Oct 25 2021 18:20:54) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies


Step 6: Check MySQL Service

By default, MySQL service will be active and running post LAMP Server installation. You can verify the same by using systemctl status mysql command as shown below.

root@localhost:~# systemctl status mysql
● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2021-11-12 11:40:39 IST; 10min ago
Main PID: 22285 (mysqld)
Status: "Server is operational"
Tasks: 38 (limit: 2299)
Memory: 356.3M
CGroup: /system.slice/mysql.service
└─22285 /usr/sbin/mysqld


Step 7: Create a Database

By default, MySQL Server does not ask for password when you try to login with root user account. So you can login to MySQL server using mysql -u root command as shown below.

root@localhost:~# mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.27-0ubuntu0.20.04.1 (Ubuntu)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


After login to MySQL Server, you need to first create a database to store all the data. Here we are creating a database called zikulacms_db using create database zikulacms_db query.

mysql> create database zikulacms_db;
Query OK, 1 row affected (0.06 sec)

Then we need to create a user that will have complete access of zikulacms_db database. Here we are creating a user called cmsuser and setting his password using create user 'cmsuser'@'localhost' identified by 'cms123' query.

mysql> create user 'cmsuser'@'localhost' identified by 'cms123';
Query OK, 0 rows affected (0.54 sec)

Next, you need to grant complete access of zikulacms_db database to cmsuser using grant all privileges on zikulacms_db.* to 'cmsuser'@'localhost' query.

mysql> grant all privileges on zikulacms_db.* to 'cmsuser'@'localhost';
Query OK, 0 rows affected (0.02 sec)

Finally, you need to run flush privileges to update all the changes and then quit the database using exit.

mysql> flush privileges;
Query OK, 0 rows affected (0.30 sec)
mysql> exit;


Step 8: Download Zikula

You can go to Download section and download the latest Zikula package using wget command as shown below. This will download the package in current directory. Check more about wget command on What is wget and How to Use wget command in Linux(20 Popular wget examples).

root@localhost:~# wget
--2021-11-12 18:12:14--
Resolving (
Connecting to (||:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: [following]
--2021-11-12 18:12:15--
Resolving (,,, ...
Connecting to (||:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 56487136 (54M) [application/octet-stream]
Saving to: ‘zikula.tar.gz’

zikula.tar.gz 100%[============================================================================>] 53.87M 8.09MB/s in 14s

2021-11-12 18:12:34 (3.82 MB/s) - ‘zikula.tar.gz’ saved [56487136/56487136]


Step 9: Extract Package

After downloading Zikula package, you need to extract by using tar -xvf zikula.tar.gz command. This will extract the package  in zikula directory under current location.

root@localhost:~# tar -xvf zikula.tar.gz


Step 10: Setup Directory

Next comes the setup of directory where you need to keep all the zikula files so that it can be served to the Apache web server. You can create a directory called zikula under /var/www/html path using mkdir /var/www/html/zikula command as shown below.

root@localhost:~# mkdir /var/www/html/zikula

After creating the directory now you need to copy all the files from local zikula directory using cp -rvf zikula/* /var/www/html/zikula/ command as shown below.

root@localhost:~# cp -rvf zikula/* /var/www/html/zikula/

Please ensure to change the ownership of zikula directory and all its files to www-data user and www-data group using chown -R www-data:www-data /var/www/html/zikula command as shown below.

root@localhost:~# chown -R www-data:www-data /var/www/html/zikula


Step 11: Setting FQDN

Since I don't have any fully qualified domain name yet to use in the apache configuration, so I will first set up my FQDN. This can be easily done by mapping your local IP with your chosen domain name in /etc/hosts file. For the moment, I am going to use as my FQDN so I will map my local IP with this FQDN in /etc/hosts file as shown below. Here my local IP Address is This could be different for you so you need to map it accordingly.

root@localhost:~# nano /etc/hosts localhost

# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

To verify, you can run ping command and check if this FQDN is working fine.

root@localhost:~# ping
PING ( 56(84) bytes of data.
64 bytes from ( icmp_seq=1 ttl=64 time=0.028 ms
64 bytes from ( icmp_seq=2 ttl=64 time=0.050 ms
64 bytes from ( icmp_seq=3 ttl=64 time=0.042 ms
64 bytes from ( icmp_seq=4 ttl=64 time=0.046 ms
64 bytes from ( icmp_seq=5 ttl=64 time=0.050 ms
64 bytes from ( icmp_seq=6 ttl=64 time=0.051 ms
64 bytes from ( icmp_seq=7 ttl=64 time=0.042 ms
64 bytes from ( icmp_seq=8 ttl=64 time=0.041 ms
--- ping statistics ---
8 packets transmitted, 8 received, 0% packet loss, time 7174ms
rtt min/avg/max/mdev = 0.028/0.043/0.051/0.007 ms


Step 12: Configure Apache Server

Next you need to setup the Apache configuration file for Zikula CMS under /etc/apache2/sites-available path. This can be done by creating a file called zikulacms.conf using nano /etc/apache2/sites-available/zikulacms.conf command and putting all the below contents.

root@localhost:~# nano /etc/apache2/sites-available/zikulacms.conf
<VirtualHost *:80>
DocumentRoot /var/www/html/zikula/public
<Directory /var/www/html/zikula/public>
Options FollowSymLinks
AllowOverride All
Order allow,deny
allow from all
ErrorLog /var/log/apache2/zikulacms_error
CustomLog /var/log/apache2/zikulacms_access common


Step 13: Reload Apache

Then enable Zikula CMS configuration by using a2ensite zikulacms.conf command as shown below.

root@localhost:~# a2ensite zikulacms.conf
Enabling site zikulacms.
To activate the new configuration, you need to run:
systemctl reload apache2

Finally, reload the apache2 service by using systemctl reload apache2 command to take the new configuration.

root@localhost:~# systemctl reload apache2


Step 14: Access Zikula CMS

It is now time to access Zikula CMS GUI Dashboard by going to your favorite browser and using URL Click on Install Zikula and follow the entire process to complete the installation.

Leave a Comment