Installing Joomla 5 on Ubuntu Desktop 24.04 LTS
Joomla 5.0.3 successfully installed on Ubuntu 24.04

Joomla 5.x on Ubuntu 24.04 LTS with PHP 8.3 — Updated for 2026

Ubuntu 24.04 LTS is a rock-solid long-term support platform. If you are building or rebuilding a Joomla development machine in 2026, this combination — Ubuntu 24.04, Apache 2, MySQL 8.0, and PHP 8.3 — remains the most dependable and widely supported stack you can choose. PHP 8.3 is now fully proven with Joomla 5, and the Ubuntu LTS repositories keep everything coherent and maintainable without chasing third-party PPAs. This guide walks through a clean installation from scratch, covering the full stack from a bare Ubuntu desktop to a working, SSL-secured Joomla 5 site.

What will be installed

  • Apache 2, MySQL 8.0, and PHP 8.3 via the Ubuntu lamp-server task
  • Joomla 5.x — the current stable release — in one or more Apache virtual hosts
  • Additional PHP modules required by Joomla 5
  • ddclient for dynamic DNS updates, useful if you are working on a laptop that changes networks
  • Certbot for Let's Encrypt SSL certificates

TL:DR – Installing Joomla properly forces you to think through first principles: where your databases live, how the web server is structured, whether your network topology supports Let's Encrypt's HTTP-01 challenge for certificate renewal. It is easy to lose track of the moving parts, so this guide documents every step with commands you can copy directly. Hopefully it saves someone a few hours of archaeology.

Joomla installation succeeded

Getting ready

  1. On your freshly installed Ubuntu 24.04 Desktop, bring everything up to date before touching anything else: $ sudo apt update && sudo apt upgrade. This matters more than it might seem — Ubuntu 24.04 point releases have shipped meaningful security fixes to OpenSSL, curl, and the kernel, so starting from a fully patched baseline avoids surprises later.
  2. Ubuntu's tasksel system lets you install curated groups of packages suited to a particular role. You do not need to install tasksel itself — you can invoke tasks directly through apt by appending a caret (^) to the task name. To install the full LAMP stack in one go, run: $ sudo apt install lamp-server^. This pulls in Apache 2, MySQL 8.0, PHP 8.3, and all their dependencies as Ubuntu intended them to be configured — no third-party repositories, no version mismatches, and no manual wiring between components.
    $ sudo apt install lamp-server^
    [sudo] password for username:
    Reading package lists... Done
    Building dependency tree... Done
    Reading state information... Done
    Note, selecting 'libevent-pthreads-2.1-7' for task 'lamp-server'
    Note, selecting 'libperl5.38' for task 'lamp-server'
    Note, selecting 'libcurl4' for task 'lamp-server'
    Note, selecting 'libtimedate-perl' for task 'lamp-server'
    Note, selecting 'libhtml-tagset-perl' for task 'lamp-server'
    Note, selecting 'libgdbm-compat4' for task 'lamp-server'
    Note, selecting 'libssh-4' for task 'lamp-server'
    Note, selecting 'libldap2' for task 'lamp-server'
    Note, selecting 'ssl-cert' for task 'lamp-server'
    Note, selecting 'libfcgi-perl' for task 'lamp-server'
    Note, selecting 'perl' for task 'lamp-server'
    Note, selecting 'libldap-common' for task 'lamp-server'
    Note, selecting 'libaio1' for task 'lamp-server'
    Note, selecting 'libaprutil1-dbd-sqlite3' for task 'lamp-server'
    Note, selecting 'mysql-server-8.0' for task 'lamp-server'
    Note, selecting 'libapr1' for task 'lamp-server'
    Note, selecting 'php8.3-common' for task 'lamp-server'
    Note, selecting 'libsasl2-modules' for task 'lamp-server'
    Note, selecting 'mysql-client-8.0' for task 'lamp-server'
    Note, selecting 'libsasl2-2' for task 'lamp-server'
    Note, selecting 'mysql-common' for task 'lamp-server'
    Note, selecting 'libapache2-mod-php' for task 'lamp-server'
    Note, selecting 'php-common' for task 'lamp-server'
    Note, selecting 'php8.3-readline' for task 'lamp-server'
    Note, selecting 'libencode-locale-perl' for task 'lamp-server'
    Note, selecting 'librtmp1' for task 'lamp-server'
    Note, selecting 'liblua5.4-0' for task 'lamp-server'
    Note, selecting 'php8.3-opcache' for task 'lamp-server'
    Note, selecting 'libapache2-mod-php8.3' for task 'lamp-server'
    Note, selecting 'liblwp-mediatypes-perl' for task 'lamp-server'
    Note, selecting 'libsasl2-modules-db' for task 'lamp-server'
    Note, selecting 'libprotobuf-lite32' for task 'lamp-server'
    Note, selecting 'apache2-data' for task 'lamp-server'
    Note, selecting 'libhtml-template-perl' for task 'lamp-server'
    Note, selecting 'apache2-bin' for task 'lamp-server'
    Note, selecting 'liburi-perl' for task 'lamp-server'
    Note, selecting 'libfcgi0ldbl' for task 'lamp-server'
    Note, selecting 'libsodium23' for task 'lamp-server'
    Note, selecting 'libio-html-perl' for task 'lamp-server'
    Note, selecting 'mecab-ipadic-utf8' for task 'lamp-server'
    Note, selecting 'mecab-ipadic' for task 'lamp-server'
    Note, selecting 'libaprutil1' for task 'lamp-server'
    Note, selecting 'libhttp-date-perl' for task 'lamp-server'
    Note, selecting 'libmecab2' for task 'lamp-server'
    Note, selecting 'php-mysql' for task 'lamp-server'
    Note, selecting 'libhtml-parser-perl' for task 'lamp-server'
    Note, selecting 'libcgi-fast-perl' for task 'lamp-server'
    Note, selecting 'mysql-server' for task 'lamp-server'
    Note, selecting 'php8.3-mysql' for task 'lamp-server'
    Note, selecting 'mysql-server-core-8.0' for task 'lamp-server'
    Note, selecting 'apache2-utils' for task 'lamp-server'
    Note, selecting 'libbrotli1' for task 'lamp-server'
    Note, selecting 'mecab-utils' for task 'lamp-server'
    Note, selecting 'libevent-core-2.1-7' for task 'lamp-server'
    Note, selecting 'apache2' for task 'lamp-server'
    Note, selecting 'libclone-perl' for task 'lamp-server'
    Note, selecting 'mysql-client-core-8.0' for task 'lamp-server'
    Note, selecting 'libhttp-message-perl' for task 'lamp-server'
    Note, selecting 'perl-modules-5.38' for task 'lamp-server'
    Note, selecting 'libcgi-pm-perl' for task 'lamp-server'
    Note, selecting 'php8.3-cli' for task 'lamp-server'
    Note, selecting 'libaprutil1-ldap' for task 'lamp-server'
    The following NEW packages will be installed:
      apache2 apache2-bin apache2-data apache2-utils libaio1 libapache2-mod-php
      libapache2-mod-php8.3 libapr1 libaprutil1 libaprutil1-dbd-sqlite3
      libaprutil1-ldap libcgi-fast-perl libcgi-pm-perl libevent-core-2.1-7
      libevent-pthreads-2.1-7 libfcgi-perl libfcgi0ldbl libhtml-template-perl
      libmecab2 libprotobuf-lite32 mecab-ipadic mecab-ipadic-utf8 mecab-utils
      mysql-client-8.0 mysql-client-core-8.0 mysql-common mysql-server
      mysql-server-8.0 mysql-server-core-8.0 php-common php-mysql php8.3-cli
      php8.3-common php8.3-mysql php8.3-opcache php8.3-readline
    0 upgraded, 36 newly installed, 0 to remove and 0 not upgraded.
    
  3. You now have a functioning web server. Check the document root: $ ls -al /var/www/html
    $ ls -al /var/www/html
    total 20
    drwxr-xr-x 2 root root  4096 Mar 22 08:14 .
    drwxr-xr-x 3 root root  4096 Mar 22 08:14 ..
    -rw-r--r-- 1 root root 10671 Mar 22 08:14 index.html
    
  4. Open http://localhost in Firefox. The Apache2 Ubuntu default page will load — it is worth reading because it documents the directory layout and configuration conventions for Apache on Ubuntu, and it confirms the server is responding correctly before you go any further.
    Screenshot of Apache2 Web Server installed by the lamp-server^ task in Ubuntu 24.04
    Apache2 default page after lamp-server installation on Ubuntu 24.04
  5. The Forum Post Assistant is a single PHP file you drop into your web root. Download it from https://github.com/ForumPostAssistant/FPA/zipball/en-GB and copy it into place: $ sudo cp ~/Downloads/fpa-en.php /var/www/html. Then visit http://localhost/fpa-en.php for a detailed snapshot of your server's Joomla readiness. It will flag missing PHP extensions and Apache modules clearly, which makes the next section much easier to follow.
    Forum Post Assistant output showing bare lamp-server installation
    Forum Post Assistant output on a bare lamp-server installation

PHP modules required by Joomla 5

  1. Joomla 5 officially supports PHP 8.1 through 8.3. PHP 8.3 is the version shipped in Ubuntu 24.04 LTS and it works well in practice — you do not need to downgrade or add a PPA. PHP 8.4 has been released upstream but is not yet in the Ubuntu 24.04 repositories, so 8.3 remains the correct choice for this platform. Joomla requires several PHP extensions beyond those included in the base lamp-server task:
    PHP modules recommended by Joomla 5 versus those installed by the lamp-server task
    #Required by Joomla 5In lamp-server install
    1 json Yes
    2 simplexml No
    3 dom No
    4 zlib Yes
    5 gd No
    6 one of mysqlnd, pdo_mysql, or pdo_pgsql Yes — pdo_mysql
  2. Install the missing PHP extensions. The Forum Post Assistant output will confirm exactly which ones are absent, but in practice the following covers everything Joomla 5 needs on a fresh Ubuntu 24.04 LAMP install: $ sudo apt install php-{simplexml,dom,gd,zip,curl,mbstring}
  3. Joomla 5 also requires Apache's mod_rewrite for SEF URLs. The Forum Post Assistant will also flag mod_expires and mod_ssl as absent. Enable all three in one command: $ sudo a2enmod rewrite expires ssl. Restart Apache afterwards: $ sudo systemctl restart apache2.
  4. Joomla 5 introduced stricter checks around missing extensions during installation — it will display clear warnings rather than silently failing, which is genuinely helpful. If the installer flags anything unexpected, cross-reference it with php -m at the command line to confirm what is actually loaded.

PHP info for Ubuntu 24.04

Before going further it is worth confirming exactly what PHP 8.3 looks like on your system. Create a phpinfo.php file in /var/www/html containing just <?php phpinfo(); ?>, then visit http://localhost/phpinfo.php. The output confirms your loaded extensions, INI file locations, and OPcache configuration. OPcache is enabled by default in the Ubuntu 24.04 PHP 8.3 packages and makes a noticeable difference to Joomla's backend responsiveness — check that it shows as enabled and operational before moving on.

PHP 8.3 info page on Ubuntu 24.04
PHP 8.3 info page on Ubuntu 24.04

Remove or rename both phpinfo.php and fpa-en.php from your web root once you have finished with them. Leaving diagnostic files publicly accessible is a security risk, even on a development machine that may occasionally be reachable from outside your local network.

Does Joomla run out of the box?

  1. Head to https://downloads.joomla.org/ and download the latest stable release of Joomla 5. The Joomla project has moved to a faster release cadence with Joomla 5, shipping minor updates regularly, so always grab the most recent version rather than an older point release. Extract the archive into /var/www/html or a subdirectory of your choice.
    Screenshot of Joomla Downloads page
    Joomla Downloads page — always download the latest stable Joomla 5 release
  2. If you navigate to the installer and see a 500 error immediately, the cause is almost always file permissions. Apache on Ubuntu runs as the www-data user, and a freshly extracted Joomla archive owned by root will not be writable by the web server.
    • 500 error during Joomla installation
      500 error — almost always a permissions issue
  3. Fix permissions so that your development user owns the files but www-data can still write to them. This is a development machine, so the approach below is appropriate — you would not use it on a production server.
    • Move into the web root parent: $ cd /var/www