Concrete is an open source content management platform used to publish and manage online content. Just like WordPress and Joomla. It is written in PHP and uses MariaDB as a database back-end. It is easy to use as it creates pages and content through a browser. Concrete CMS can be installed on any Linux environment.
This article will cover how to install and configure Concrete on Ubuntu. Before we can dive in, make sure you have the following items. Below are the setup requirements for Concrete CMS with Apache on Ubuntu.
- Ubuntu server.
- A user with sudo permissions.
- Fully qualified domain name. (FQDN)
Step 1: Update Ubuntu System
Make sure your system is up-to-date and all the packages updated.
sudo apt update && sudo apt upgrade -y
You may consider a reboot after upgrade:
[ -e /var/run/reboot-required ] && sudo reboot
Step 2: Install PHP and Database dependencies
After update, we now install Apache, MariaDB, PHP and PHP-modules:
sudo apt install unzip apache2 mariadb-server php libapache2-mod-php libapache2-mod-php php-common php-mbstring php-xmlrpc php-soap php-gd php-xml php-intl php-mysql php-cli php-ldap php-zip php-curl
Accept installation prompt:
....
0 upgraded, 79 newly installed, 0 to remove and 0 not upgraded.
Need to get 27.4 MB of archives.
After this operation, 232 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Step 3: Configure PHP for Concrete on Ubuntu
We will be required to do some initial configurations before we can now install Concrete.
Edit the file /etc/php/*/apache2/php.ini
and make the changes as highlighted below:
sudo vim /etc/php/*/apache2/php.ini
Now edit the following lines to have values as below:
file_uploads = On
allow_url_fopen = On
memory_limit = 256M
upload_max_filesize = 64M
Also set correct timezone:
date.timezone = Africa/Nairobi
Restart the Apache service for the changes made to apply
sudo systemctl restart apache2
Check Apache status:
$ sudo systemctl status apache2
● apache2.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/apache2.service; enabled; preset: enabled)
Active: active (running) since Wed 2025-03-05 17:13:01 EAT; 2s ago
Docs: https://httpd.apache.org/docs/2.4/
Process: 14281 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
Main PID: 14285 (apache2)
Tasks: 6 (limit: 7021)
Memory: 14.7M (peak: 15.3M)
CPU: 63ms
CGroup: /system.slice/apache2.service
├─14285 /usr/sbin/apache2 -k start
├─14287 /usr/sbin/apache2 -k start
├─14288 /usr/sbin/apache2 -k start
├─14289 /usr/sbin/apache2 -k start
├─14290 /usr/sbin/apache2 -k start
└─14291 /usr/sbin/apache2 -k start
Mar 05 17:13:00 cms.africanfine.com systemd[1]: Starting apache2.service - The Apache HTTP Server...
Mar 05 17:13:01 cms.africanfine.com systemd[1]: Started apache2.service - The Apache HTTP Server.
Step 4: Configure MariaDB Database
Configure your MariaDB server using the secure installation practices.
Now you need to create a database and a user for concrete. To achieve this, first login to MariaDB with the root user command:
sudo mysql -u root -p
Then create a database and a user with the following command:
CREATE DATABASE concrete;
CREATE USER 'concrete'@'localhost' IDENTIFIED BY 'P@ssw0d';
Remember to use a strong password of your own when creating the database user.
Grant privileges on the concrete database to the user we created above.
GRANT ALL ON concrete.* TO 'concrete'@'localhost' IDENTIFIED BY 'P@ssw0d' WITH GRANT OPTION;
Finally flush privileges and exit the database as follows:
FLUSH PRIVILEGES;
EXIT;
Step 5: Configure Concrete CMS on Ubuntu
Downloading Concrete CMS.
Here we need to get the latest version of Concrete CMS. Go to the official website for the URL of the latest version.
sudo wget https://www.concretecms.org/application/files/8617/3629/2330/concrete-cms-9.3.9.zip
Extract the downloaded file:
unzip concrete-cms-*.zip
After extraction, we need to move the file to Apache web root directory:
sudo mv concrete-cms-9.3.9 /var/www/html/
Now, we need to set ownership and permission rights to the concrete directory as below
sudo chown -R www-data:www-data /var/www/html/concrete-cms-9.3.9/
sudo chmod -R 755 /var/www/html/concrete-cms-9.3.9
Configuring Apache web server
Here, you need to create a configuration file for Apache virtual host to support concete CMS:
sudo vim /etc/apache2/sites-available/concrete.conf
In the file, add the following lines:
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /var/www/html/concrete-cms-9.3.9/
ServerName cms.africanfine.com
<Directory /var/www/html/concrete-cms-9.3.9/>
Options +FollowSymlinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
For the ServerAdmin and ServerName, you replace with your fully qualified domain name (FQDN)
Then enable the Apache virtual host and the rewrite module as follows:
#Diasble default Apache site
sudo a2dissite 000-default.conf
#Enable concrete cms site
sudo a2ensite concrete.conf
#Rewrite the modules
sudo a2enmod rewrite
To apply changes, you need to restart Apache 2
sudo systemctl reload apache2
sudo systemctl restart apache2
Then check the status of Apache2 service.
systemctl status apache2
Expected Output:

With this output, the Apache server is now configured to host concrete CMS.
Now, enable database access through your firewall:
sudo ufw allow 3306/tcp
sudo systemctl restart ufw
Step 6: Concrete CMS Web Interface.
Now you proceed to a web browser to access Concrete CMS web interface with this URL http://cms.africanfine.com
. You will be redirected to the following page:

Select the your language and click the arrow to proceed to the following page:

This site lists all the required libraries. Make sure all of them are installed then Continue to Installation. Provide the name of your site, email address, and set an admin password:

You will also be required to input the database credentials that you created earlier.
- Server:
localhost:3306
- MySQL Username:
concrete
- MySQL Password: the password you set
- Database Name:
concrete

Click Install Concrete CMS to proceed with installation:

The installation will complete and you will be get the info below:

Finally click on the edit your site button and the following dashboard will appear.

provide the necessary details or skip, and here’s your website:

Click on the plus button to start building with Concrete CMS:

At this point, Concrete CMS is now ready for use and you can now publish your content. You can also secure your website using Let’s Encrypt free SSL.
First, install the Certbot utility:
sudo apt install certbot python3-certbot-apache
Then run:
sudo certbot --apache
After the process is successful, you can access your site via https.
Check out more articles on this website: