Install Concrete CMS with Apache on Ubuntu 24.04|22.04

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.

  1. Ubuntu server.
  2. A user with sudo permissions.
  3. 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:

Your IT Journey Starts Here!

Ready to level up your IT skills? Our new eLearning platform is coming soon to help you master the latest technologies.

Be the first to know when we launch! Join our waitlist now.

Join our Linux and open source community. Subscribe to our newsletter for tips, tricks, and collaboration opportunities!

Recent Post

Leave a Comment

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

Related Post

As the world keeps changing, everyone will agree that one of the enablers of this rapid change has been technology. […]

In this age where digital data is driving economies, feeding businesses with insights, creating jobs for many, improving service delivery […]

In our previous article, we looked at Must-Read Books to Learn Java Programming where we explored some of the resources […]

Let's Connect

Unleash the full potential of your business with CloudSpinx. Our expert solutions specialists are standing by to answer your questions and tailor a plan that perfectly aligns with your unique needs.
You will get a response from our solutions specialist within 12 hours
We understand emergencies can be stressful. For immediate assistance, chat with us now

Contact CloudSpinx today!

Download CloudSpinx Profile

Discover the full spectrum of our expertise and services by downloading our detailed Company Profile. Simply enter your first name, last name, and email address.