Installing SuiteCRM on CentOS 8 – A Straight‑Forward Guide
If you’re looking to get SuiteCRM up and running on a fresh CentOS 8 box, this walk‑through will show you exactly how to pull the stack together without tripping over common pitfalls.
1. Prerequisites
- A CentOS 8 system with root or sudo privileges
- An internet connection for downloading packages
- Basic knowledge of terminal commands
Real‑world note: I once had a server where php-fpm crashed because the mod_php module was missing from the stack—always double‑check that the PHP packages you install match your web server.
2. Set Up Repositories
SuiteCRM requires PHP 7.4+ and MySQL 8 (or MariaDB). CentOS 8 ships with older defaults, so we’ll enable the EPEL and Remi repos first.
sudo dnf install -y epel-release sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm
> Why this matters: Without these repos you can’t pull PHP 7.4 or the newer MariaDB packages that SuiteCRM expects.
3. Install Core Packages
sudo dnf module enable php:remi-7.4 -y sudo dnf install -y httpd mariadb-server php php-mysqlnd php-gd php-curl php-xml php-mbstring php-zip php-bcmath
- httpd – Apache web server
- mariadb-server – MySQL‑compatible database
- PHP extensions – SuiteCRM relies on these for everything from XML parsing to session handling
4. Start and Secure the Database
sudo systemctl enable --now mariadb sudo mysql_secure_installation
During the secure install, set a strong root password, remove anonymous users, disallow remote root logins, and drop the test database.
> If you skip this step, your database will be exposed to anyone on the network—no one wants that.
5. Create SuiteCRM Database & User
sudo mysql -u root -p
Inside MySQL:
CREATE DATABASE suitecrm CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; GRANT ALL PRIVILEGES ON suitecrm.* TO 'suiteuser'@'localhost' IDENTIFIED BY 'StrongPassword!23'; FLUSH PRIVILEGES; EXIT;
> The utf8mb4 collation is essential; SuiteCRM stores emojis and special characters. Forgetting this leads to data corruption.
6. Pull the Latest SuiteCRM
cd /var/www/html sudo wget https://suitecrm.com/downloads/SuiteCRM-7.x.x.zip sudo unzip SuiteCRM-7.x.x.zip sudo mv SuiteCRM suitecrm
> I’ve seen sites fail to work because they used an older zip that lacked the necessary composer.json for dependencies.
7. Set File Permissions
cd /var/www/html/suitecrm
sudo chown -R apache:apache .
sudo find . -type d -exec chmod 755 {} \;
sudo find . -type f -exec chmod 644 {} \;
> Apache must own the files; otherwise, PHP scripts can’t write logs or upload documents. The directory/file permissions keep everything readable while preventing arbitrary writes.
8. Configure Apache VirtualHost
Create /etc/httpd/conf.d/suitecrm.conf:
<VirtualHost *:80>
ServerName suitecrm.yourdomain.com
DocumentRoot /var/www/html/suitecrm
<Directory "/var/www/html/suitecrm">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog /var/log/httpd/suitecrm_error.log
CustomLog /var/log/httpd/suitecrm_access.log combined
</VirtualHost>
> The AllowOverride All line lets SuiteCRM’s .htaccess file manage URL rewriting without manual Apache edits.
9. Restart Services
sudo systemctl enable --now httpd sudo systemctl restart httpd
Now point your browser to http://suitecrm.yourdomain.com. The installer will launch, asking for the database credentials you created earlier and a few optional settings.
> If the page fails to load or throws “PHP Fatal error: Uncaught Error: Call to undefined function …”, double‑check that all PHP extensions are installed and Apache restarted after any changes.
10. Post‑Installation Tweaks
- SSL: Use Let’s Encrypt for free HTTPS certificates (sudo dnf install certbot python3-certbot-apache).
- Performance: Enable PHP OPCache via /etc/php-fpm.d/www.conf or the Apache module.
- Backups: Schedule regular database dumps and file system snapshots.
You’ve just installed SuiteCRM on CentOS 8 without pulling a coffee cup. If you hit snags, check that every package is from the right repo and that your firewall isn’t blocking port 80/443. Happy CRM‑ing!