How To Install Joomla on Debian 13

Setting up a content management system can transform your web presence. Joomla stands as one of the most powerful open-source CMS platforms, powering millions of websites worldwide with its robust features and extensive customization options. This comprehensive guide walks you through installing Joomla on Debian 13, combining the reliability of Debian’s stable operating system with Joomla’s flexibility to create a secure, high-performance web environment.
Debian 13 provides an excellent foundation for hosting Joomla websites. The operating system offers long-term support, enhanced security features, and exceptional stability. Whether you’re building a corporate website, blog, e-commerce platform, or community portal, this tutorial equips you with everything needed for a successful installation.
By the end of this guide, you’ll have a fully functional Joomla installation running on a LAMP stack (Linux, Apache, MariaDB, PHP). The process takes approximately 20-30 minutes. We’ll cover system preparation, server configuration, database setup, SSL implementation, and security hardening to ensure your installation follows industry best practices.
Prerequisites and System Requirements
Before beginning the installation process, ensure your system meets all necessary requirements. A Debian 13 server with at least 2GB RAM and 20GB storage space provides adequate resources for most Joomla installations. You’ll need root or sudo user access to execute administrative commands throughout this tutorial.
Technical Requirements
Joomla 5.x requires specific software versions for optimal performance. Your server needs PHP 8.1 or higher, with PHP 8.4 being the recommended version for Debian 13. The database backend requires MySQL 8.0.13+ or MariaDB 10.4+. Apache 2.4+ serves as the web server, though Nginx is also supported.
Essential PHP extensions include mbstring for multibyte string handling, mysql for database connectivity, xml for XML parsing, curl for URL requests, gd for image manipulation, and zip for archive handling. Additional modules like intl, json, and imagick enhance functionality. A valid domain name configured with proper DNS records completes the prerequisites.
Step 1: Update and Prepare the System
System updates establish a secure foundation for your Joomla installation. Connect to your Debian 13 server via SSH and execute the update process. Begin by refreshing the package repository cache:
sudo apt update
This command downloads the latest package information from configured repositories. Next, upgrade all installed packages to their newest versions:
sudo apt upgrade -y
The -y flag automatically confirms the upgrade process. This ensures your system has the latest security patches and bug fixes before installing new software.
Install essential utilities that facilitate the installation process:
sudo apt install wget unzip curl -y
These tools enable downloading files from the internet, extracting compressed archives, and making HTTP requests. With your system updated and prepared, you’re ready to install the LAMP stack components.
Step 2: Install Apache Web Server
Apache serves as the web server component that delivers your Joomla website to visitors. Install Apache2 with this command:
sudo apt install apache2 -y
This installs Apache along with necessary dependencies. Once installation completes, start the Apache service:
sudo systemctl start apache2
Enable Apache to launch automatically at system boot:
sudo systemctl enable apache2
Verify the service status to confirm successful installation:
sudo systemctl status apache2
You should see “active (running)” in the output. Test Apache by opening your server’s IP address in a web browser. The default Apache welcome page confirms proper installation.
Apache’s modular architecture allows enabling additional functionality through modules. The rewrite module, essential for Joomla’s SEO-friendly URLs, will be enabled later during virtual host configuration.
Step 3: Install and Configure MariaDB Database
MariaDB provides the database backend for storing Joomla content, configurations, and user data. Install the MariaDB server package:
sudo apt install mariadb-server -y
Start the MariaDB service immediately after installation:
sudo systemctl start mariadb
Enable MariaDB to start automatically on system boot:
sudo systemctl enable mariadb
Verify the service is running correctly:
sudo systemctl status mariadb
Securing MariaDB
Database security is paramount for protecting your website. Run the security script:
sudo mysql_secure_installation
The script guides you through several security enhancements. When prompted, press Enter if no root password is currently set. Choose to switch to unix_socket authentication by typing n if you prefer password-based root access.
Set a strong root password when prompted. Use a combination of uppercase letters, lowercase letters, numbers, and special characters. Remove anonymous users by typing y to prevent unauthorized database access.
Disable remote root login by selecting y. This prevents root database access from external sources, significantly enhancing security. Remove the test database by typing y, as it’s unnecessary for production environments.
Reload privilege tables by selecting y to apply all changes immediately. Your MariaDB installation is now secured and ready for Joomla database creation.
Step 4: Install PHP and Required Extensions
PHP processes dynamic content and connects Joomla to the database. Install PHP along with all required extensions in a single command:
sudo apt install php libapache2-mod-php php-mysql php-curl php-json php-intl php-xml php-gd php-mbstring php-zip php-imagick -y
This comprehensive command installs PHP 8.4 and essential modules. The libapache2-mod-php package integrates PHP with Apache. Each extension serves specific purposes: php-mysql enables database connectivity, php-curl handles external requests, php-json processes JSON data, php-intl supports internationalization, php-xml parses XML documents, php-gd manages image operations, php-mbstring handles multibyte strings, and php-zip works with compressed files.
Verify PHP installation by checking the version:
php -v
The output displays the installed PHP version, confirming successful installation. Restart Apache to load the PHP module:
sudo systemctl restart apache2
Create a test PHP file to verify Apache-PHP integration:
echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php
Access http://your-server-ip/info.php in your browser. The PHP information page displays your configuration. Remove this file after testing for security reasons:
sudo rm /var/www/html/info.php
Exposing PHP configuration details presents security risks in production environments.
Step 5: Create Joomla Database and User
Joomla requires a dedicated database and user account. Log into MariaDB as the root user:
sudo mysql -u root -p
Enter your root password when prompted. Create a new database for Joomla:
CREATE DATABASE joomla_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
The utf8mb4 character set supports full Unicode, including emojis and special characters. Create a dedicated database user:
CREATE USER 'joomla_user'@'localhost' IDENTIFIED BY 'StrongPassword123!';
Replace StrongPassword123! with a secure password. Grant necessary privileges to the Joomla user:
GRANT ALL PRIVILEGES ON joomla_db.* TO 'joomla_user'@'localhost';
This grants complete control over the joomla_db database. Flush privileges to apply changes:
FLUSH PRIVILEGES;
Exit the MariaDB console:
EXIT;
Record the database name, username, and password securely. You’ll need these credentials during the web-based installation.
Step 6: Download and Extract Joomla Files
Navigate to the web root directory:
cd /var/www
Download the latest Joomla release using wget:
sudo wget https://downloads.joomla.org/cms/joomla6/6-0-0/Joomla_6-0-0-Stable-Full_Package.zip
This downloads Joomla version 5.3.2, the current stable release. Create a directory for Joomla installation:
sudo mkdir joomla
Extract the downloaded archive into the joomla directory:
sudo unzipJoomla_6-0-0-Stable-Full_Package.zip -d joomla
The unzip command extracts all files and directories to /var/www/joomla. Remove the downloaded archive to save disk space:
sudo rm Joomla_6-0-0-Stable-Full_Package.zip
Your Joomla files are now in place and ready for permission configuration.
Step 7: Set Proper Permissions and Ownership
Correct file permissions prevent unauthorized access while allowing Joomla to function properly. Set ownership of all Joomla files to the Apache user:
sudo chown -R www-data:www-data /var/www/joomla
The www-data user runs the Apache web server process on Debian. Set appropriate directory permissions:
sudo chmod -R 755 /var/www/joomla
This grants read, write, and execute permissions to the owner, while others receive read and execute permissions. For enhanced security, set file permissions separately:
sudo find /var/www/joomla -type f -exec chmod 644 {} \;
Files receive read and write permissions for the owner, read-only for others. These permission settings balance functionality with security, preventing common exploitation attempts.
Step 8: Configure Apache Virtual Host
Apache virtual hosts allow hosting multiple websites on a single server. Create a new configuration file for Joomla:
sudo nano /etc/apache2/sites-available/joomla.conf
Add the following configuration, replacing example.com with your actual domain:
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
ServerAdmin webmaster@example.com
DocumentRoot /var/www/joomla
<Directory /var/www/joomla>
Options FollowSymlinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/joomla_error.log
CustomLog ${APACHE_LOG_DIR}/joomla_access.log combined
</VirtualHost>
The ServerName directive specifies your domain. ServerAlias handles the www subdomain. DocumentRoot points to the Joomla installation directory. The Directory block sets permissions and options for the Joomla folder.
AllowOverride All permits Joomla’s .htaccess file to override server configuration. Options FollowSymlinks allows following symbolic links. Require all granted permits access from all sources. Error and access logs track issues and visitor activity.
Save the file by pressing Ctrl+X, then Y, and Enter. Enable the Joomla site configuration:
sudo a2ensite joomla.conf
Enable the Apache rewrite module required for SEO-friendly URLs:
sudo a2enmod rewrite
Disable the default Apache site to avoid conflicts:
sudo a2dissite 000-default.conf
Test Apache configuration for syntax errors:
sudo apachectl configtest
You should see “Syntax OK”. Restart Apache to apply all changes:
sudo systemctl restart apache2
Your Apache web server is now configured to serve the Joomla installation.
Step 9: Complete Web-Based Joomla Installation
Open your web browser and navigate to your domain or server IP address. The Joomla installation wizard launches automatically.
Initial Configuration
Select your preferred language from the dropdown menu. The installation wizard supports multiple languages for the backend and frontend. Enter your site name in the designated field. This appears in your browser’s title bar and throughout the admin interface.
Provide a site description summarizing your website’s purpose. This optional field aids search engine optimization. The setup wizard guides you through several configuration steps in a logical sequence.

Setting Up Admin Credentials
Create your super user account by entering a username. Avoid using “admin” or other common usernames to enhance security. Choose a strong password containing uppercase letters, lowercase letters, numbers, and special characters. Joomla’s password strength meter helps create secure credentials.
Enter your email address for the administrator account. Joomla sends system notifications and password reset links to this address. Confirm your password by retyping it in the verification field.
Database Connection Configuration
Select MySQLi as the database type from the dropdown menu. Enter localhost as the hostname since the database runs on the same server. Input the database username created earlier (joomla_user).
Provide the database password set during database creation. Enter the database name (joomla_db) in the corresponding field. The table prefix field defaults to a random string for security. You can keep the default or customize it.
Click the database connection test button to verify credentials. A success message confirms proper configuration. If errors occur, double-check your database credentials and MariaDB service status.
Completing Installation
Review your configuration summary displayed on the overview page. The wizard shows site settings, database information, and pre-installation checks. Address any warnings or errors before proceeding. Yellow warnings may not prevent installation, but red errors must be resolved.
Click the Install button to begin the installation process. Joomla creates necessary database tables and configures the system. The installation typically completes within 30-60 seconds.
After successful installation, remove the installation folder immediately:
sudo rm -rf /var/www/joomla/installation
This critical security step prevents potential attackers from running the installation wizard again. Joomla displays a warning until the installation directory is removed.
Step 10: Secure Joomla with SSL Certificate
SSL certificates encrypt data transmitted between visitors and your server. Install Certbot for Let’s Encrypt SSL certificates:
sudo apt install certbot python3-certbot-apache -y
This installs Certbot and the Apache plugin. Obtain and install an SSL certificate for your domain:
sudo certbot --apache -d example.com -d www.example.com
Replace example.com with your actual domain. Certbot prompts for your email address to send renewal notifications and important security alerts. Agree to the terms of service by typing y.
Choose whether to share your email with the Electronic Frontier Foundation. This is optional. Select option 2 to redirect all HTTP traffic to HTTPS automatically. Certbot configures Apache, obtains the certificate, and enables HTTPS.
Test automatic certificate renewal:
sudo certbot renew --dry-run
This simulates the renewal process without making changes. Let’s Encrypt certificates expire after 90 days, but Certbot automatically renews them. Access your site using https://example.com to verify SSL installation. Your browser displays a padlock icon indicating a secure connection.
Post-Installation Security Hardening
Security measures protect your Joomla installation from common threats. Access the Joomla administrator dashboard at https://example.com/administrator. Log in using the super user credentials created during installation.
Essential Security Measures
Navigate to System > Global Configuration > Users tab. Enable two-factor authentication for administrator accounts. This adds an extra security layer requiring a verification code from a mobile app. Install the “Admin Tools” or similar security extension from the Joomla Extensions Directory.
Configure security headers in your Apache configuration. Edit your virtual host file:
sudo nano /etc/apache2/sites-available/joomla.conf
Add these security headers inside the VirtualHost block:
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-XSS-Protection "1; mode=block"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Enable the headers module:
sudo a2enmod headers
Restart Apache to apply changes:
sudo systemctl restart apache2
These headers protect against common attacks like cross-site scripting and clickjacking.
File and Directory Security
Secure the configuration file containing sensitive database credentials:
sudo chmod 444 /var/www/joomla/configuration.php
This makes the file read-only, preventing unauthorized modifications. Edit the .htaccess file to enhance security:
sudo nano /var/www/joomla/.htaccess
Add these directives at the top:
## Disable directory browsing
Options -Indexes
## Block access to sensitive files
<FilesMatch "^\.>
Require all denied
</FilesMatch>
Directory browsing exposes your file structure, while blocking hidden files prevents access to sensitive system files.
Regular Maintenance Tasks
Install Akeeba Backup or similar backup extension from the Extensions Manager. Configure automated daily backups stored off-site. Regular backups enable quick recovery from security incidents or data loss.
Enable Joomla’s Update Notifications in Global Configuration. This alerts you to available core and extension updates. Apply security patches promptly to protect against known vulnerabilities. Review administrator accounts monthly and remove unused accounts.
Monitor error logs regularly for suspicious activity:
sudo tail -f /var/log/apache2/joomla_error.log
This command displays real-time log entries. Unusual patterns may indicate attack attempts.
Post-Installation Configuration
Access the Joomla administrator dashboard to configure essential settings. Navigate to System > Global Configuration. The Site tab contains basic settings like site name, default editor, and site offline options.
Configuring SEO-Friendly URLs
Enable Search Engine Friendly URLs in the Site tab. Set “Search Engine Friendly URLs” to Yes. Enable “Use URL Rewriting” for cleaner URLs without “index.php”. Set “Add Suffix to URL” to Yes to append .html to URLs.
These settings create readable URLs that improve search engine rankings. The htaccess.txt file in your Joomla directory contains necessary rewrite rules. Rename it to .htaccess:
sudo mv /var/www/joomla/htaccess.txt /var/www/joomla/.htaccess
Test SEO-friendly URLs by accessing various pages on your site.
Optimizing Performance
Navigate to System > Global Configuration > System tab. Enable Joomla’s cache system by setting “Cache” to Yes. Select “Progressive” as the cache handler for better performance. Set cache time to 15 minutes for most websites.
Enable Gzip page compression in the Server tab to reduce bandwidth usage. This compresses pages before sending them to visitors’ browsers. Install the JCH Optimize extension for advanced performance optimization.
Configure PHP OPcache for improved performance:
sudo nano /etc/php/8.4/apache2/php.ini
Find and modify these settings:
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
Restart Apache to apply changes:
sudo systemctl restart apache2
OPcache stores precompiled PHP bytecode in memory, significantly improving execution speed.
Troubleshooting Common Installation Issues
Installation problems occasionally occur despite following instructions carefully. Understanding common issues and solutions helps resolve problems quickly.
Database Connection Errors
The “Could not connect to database” error indicates incorrect credentials or service issues. Verify your database name, username, and password match those created earlier. Check if MariaDB is running:
sudo systemctl status mariadb
Restart the service if necessary:
sudo systemctl restart mariadb
Try using 127.0.0.1 instead of localhost for the database hostname. Some configurations handle IP addresses differently than hostname resolution. Test database connectivity manually:
mysql -u joomla_user -p joomla_db
If this fails, your database credentials are incorrect.
PHP Configuration Issues
Memory limit errors appear when PHP’s memory allocation is insufficient. Edit the PHP configuration file:
sudo nano /etc/php/8.4/apache2/php.ini
Increase the memory limit:
memory_limit = 256M
Also increase upload size limits if needed:
upload_max_filesize = 32M
post_max_size = 32M
Restart Apache after changes:
sudo systemctl restart apache2
Missing PHP extensions cause various errors during installation. Verify all required extensions are installed:
php -m
This lists all installed PHP modules. Install any missing extensions using apt.
Permission and Ownership Problems
403 Forbidden errors indicate incorrect file permissions. Verify ownership is set correctly:
ls -la /var/www/joomla
Files should be owned by www-data:www-data. Reset permissions if needed:
sudo chown -R www-data:www-data /var/www/joomla
sudo find /var/www/joomla -type d -exec chmod 755 {} \;
sudo find /var/www/joomla -type f -exec chmod 644 {} \;
File write errors during installation indicate insufficient write permissions. Temporarily increase permissions:
sudo chmod -R 775 /var/www/joomla
Restore secure permissions after completing installation.
Apache Configuration Issues
Virtual host conflicts prevent proper site loading. Check enabled sites:
sudo apache2ctl -S
This displays all configured virtual hosts. Ensure only your Joomla site is enabled, or configure different ports/domains for multiple sites.
.htaccess conflicts cause Internal Server Error (500) messages. Temporarily rename .htaccess to disable it:
sudo mv /var/www/joomla/.htaccess /var/www/joomla/.htaccess.bak
If the site loads, gradually add .htaccess directives to identify the problematic rule. Check Apache error logs for specific error messages:
sudo tail -50 /var/log/apache2/joomla_error.log
Error logs provide detailed information about configuration problems.
Performance Optimization Tips
Optimized Joomla installations deliver faster page loads and better user experiences. Enable PHP OPcache as described earlier to cache compiled PHP code. This eliminates repeated compilation of PHP scripts.
Configure Joomla’s built-in caching in Global Configuration. Enable both conservative and progressive caching for maximum performance gains. Install a CDN extension like Cloudflare to distribute static assets globally. CDNs reduce latency by serving content from servers geographically closer to visitors.
Optimize database tables regularly through phpMyAdmin or command line:
mysqlcheck -u root -p --optimize joomla_db
This defragments tables and updates statistics for better query performance. Enable lazy loading for images by installing appropriate extensions. Lazy loading defers image loading until they enter the viewport.
Minify CSS and JavaScript files using JCH Optimize or similar extensions. Minification removes unnecessary characters, reducing file sizes. Enable browser caching by adding these directives to .htaccess:
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
</IfModule>
Browser caching stores static resources locally, reducing server requests on repeat visits.
Congratulations! You have successfully installed Joomla. Thanks for using this tutorial for installing the Joomla open-source content management system on Debian 13 “Trixie”. For additional help or useful information, we recommend you check the Joomla website.