Skip to content

How to Install Craft CMS on CentOS 7?

Updated 3 min read

Updated: 28 September 2026 · Applies to: Craft CMS 5.11 on Ubuntu 24.04, Debian 12, AlmaLinux 9 and Rocky Linux 9

CentOS 7 is end of life. Craft CMS is a flexible content management system for custom websites. The current version is Craft 5.11, which needs PHP 8.2 or newer. Craft is free for a single user (Solo edition); the Team and Pro editions are paid.

Before you start

  • A VPS or dedicated server with a fresh Ubuntu 24.04 / Debian 12 or AlmaLinux 9 / Rocky Linux 9 installation, and root or sudo access.
  • A domain or subdomain pointing to the server (an A record), if you want HTTPS.
  • The system updated: apt update && apt upgrade or dnf upgrade.

Install Apache, MariaDB and PHP

Ubuntu 24.04 / Debian 12:

apt install apache2 mariadb-server php libapache2-mod-php php-mysql php-xml php-mbstring php-curl php-zip php-gd php-intl
systemctl enable --now apache2 mariadb

AlmaLinux 9 / Rocky Linux 9 (choose a current PHP stream first):

dnf module reset php && dnf module enable php:8.3
dnf install httpd mariadb-server php php-fpm php-mysqlnd php-xml php-mbstring php-gd php-intl php-opcache php-pecl-zip
systemctl enable --now httpd mariadb php-fpm

Secure MariaDB (set a root password or keep socket login, remove test data): mariadb-secure-installation.

Also install: apt install php-bcmath php-curl php-gd php-intl php-mbstring php-xml php-zip (Ubuntu/Debian) and restart Apache.

On AlmaLinux/Rocky: dnf install php-bcmath php-gd php-intl php-mbstring php-xml php-pecl-zip, then systemctl restart php-fpm httpd.

Install Composer

apt install composer          # Ubuntu 24.04 / Debian 12
# or the official installer (any system):
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php --install-dir=/usr/local/bin --filename=composer
rm composer-setup.php

Create a database

mariadb -u root -p
CREATE DATABASE craft CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'craftuser'@'localhost' IDENTIFIED BY 'Strong-Password';
GRANT ALL PRIVILEGES ON craft.* TO 'craftuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Create the project

cd /var/www
composer create-project craftcms/craft craft
cd craft
php craft setup          # asks for the database and admin details, then installs Craft
chown -R www-data:www-data storage config web/cpresources .env   # apache on AlmaLinux/Rocky

The web server must serve the web folder.

Create the Apache site

Create /etc/apache2/sites-available/example.com.conf (Ubuntu/Debian) or /etc/httpd/conf.d/example.com.conf (AlmaLinux/Rocky):

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/craft/web
    <Directory /var/www/craft/web>
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

Ubuntu/Debian: a2ensite example.com && a2enmod rewrite && systemctl reload apache2. AlmaLinux/Rocky: apachectl configtest && systemctl reload httpd.

Add a free SSL certificate

apt install certbot python3-certbot-apache                     # Ubuntu / Debian
dnf install epel-release && dnf install certbot python3-certbot-apache   # AlmaLinux / Rocky
certbot --apache -d example.com -d www.example.com

Certbot installs a timer that renews the certificate automatically; test it with certbot renew --dry-run.

Log in at https://example.com/admin.

Note: On AlmaLinux 9 / Rocky Linux 9 SELinux is on. Let Apache/Nginx write where the application needs it, for example: semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/craft/storage/storage(/.*)?" && restorecon -R /var/www/craft/storage, and allow outgoing connections if the app calls APIs: setsebool -P httpd_can_network_connect 1.

Related services

KVM VPS hosting

NVMe SSD and full root access, with Free Basic Managed Support.

Unmanaged dedicated servers

full root access and free IPMI KVM, with Free Basic Managed Support.

Linux server management

hardening, patching, monitoring and automation for Ubuntu, Debian, RHEL and AlmaLinux.

Was this answer helpful?

Still stuck? Open a ticket