Joomla is a mature, feature-rich open-source CMS offering a middle ground between WordPress's simplicity and Drupal's flexibility — particularly strong for multilingual sites and community/membership-driven websites.
Prerequisites
- Ubuntu 22.04/24.04 VPS: 2 vCPU, 2-4 GB RAM
- Nginx or Apache, PHP 8.1+, MySQL/MariaDB
Step 1 — Install Required PHP Extensions
sudo apt install php8.2-gd php8.2-curl php8.2-mbstring php8.2-xml php8.2-zip php8.2-mysql -y
Step 2 — Create the Database
sudo mysql
CREATE DATABASE joomla;
CREATE USER 'joomla'@'localhost' IDENTIFIED BY 'CHANGE_ME_STRONG_PASSWORD';
GRANT ALL PRIVILEGES ON joomla.* TO 'joomla'@'localhost';
FLUSH PRIVILEGES;
Step 3 — Download Joomla
cd /var/www
sudo mkdir joomla
cd joomla
sudo wget https://downloads.joomla.org/cms/joomla5/VERSION/Joomla_VERSION-Stable-Full_Package.zip
sudo unzip Joomla_*.zip
sudo chown -R www-data:www-data .
Step 4 — Configure Nginx
server {
listen 80;
server_name yourdomain.com;
root /var/www/joomla;
index index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}
}
Step 5 — Run the Web Installer
http://yourdomain.com
Follow the setup wizard: site name, admin account, and database configuration matching Step 2.
Step 6 — Remove the Installation Directory
sudo rm -rf /var/www/joomla/installation
Joomla won't allow full access until this directory is removed post-install — also an important security measure.
Step 7 — Add HTTPS
sudo certbot --nginx -d yourdomain.com
Step 8 — Enable Search Engine Friendly URLs
Under System → Global Configuration → Site, enable "Search Engine Friendly URLs" and, if using Nginx (URL rewriting differs from Apache's .htaccess approach), ensure your Nginx config's try_files directive supports this correctly (as shown in Step 4).
Installing Extensions
Under System → Install → Extensions, upload or install from the Joomla Extensions Directory to add functionality beyond the core CMS.
Setting Up Multilingual Content
Joomla includes native multilingual support — see How to Set Up Multilingual Content in Joomla/Drupal for the configuration process.
Common Errors
"JFolder::create: Could not create directory" — verify web server user (typically www-data) has write permissions to the relevant directories.
SEF URLs return 404 errors — verify Nginx's try_files is correctly routing unmatched requests through index.php.
Continue Reading
- How to Set Up Multilingual Content in Joomla/Drupal
- How to Secure a Drupal or Joomla Installation
- Choosing the Right CMS for Your Project: WordPress vs Drupal vs Joomla vs Craft
Browse more articles in CMS Platforms Beyond WordPress.