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-servertask - 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.
Contents

Getting ready
- 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.
- Ubuntu's
taskselsystem lets you install curated groups of packages suited to a particular role. You do not need to installtaskselitself — you can invoke tasks directly throughaptby 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. - 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 - Open
http://localhostin 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.
Apache2 default page after lamp-server installation on Ubuntu 24.04 -
Note — The Forum Post Assistant is most useful once Joomla is already installed, but running it against a bare LAMP stack is a practical way to see exactly which PHP modules and Apache features are still missing before you install Joomla.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.phpfor 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 on a bare lamp-server installation
PHP modules required by Joomla 5
- 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-servertask:PHP modules recommended by Joomla 5 versus those installed by the lamp-server task # Required by Joomla 5 In lamp-server install 1 jsonYes 2 simplexmlNo 3 domNo 4 zlibYes 5 gdNo 6 one of mysqlnd,pdo_mysql, orpdo_pgsqlYes — pdo_mysql - 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}
- Joomla 5 also requires Apache's
mod_rewritefor SEF URLs. The Forum Post Assistant will also flagmod_expiresandmod_sslas absent. Enable all three in one command: $ sudo a2enmod rewrite expires ssl. Restart Apache afterwards: $ sudo systemctl restart apache2. - 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 -mat 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.

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?
- 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/htmlor a subdirectory of your choice.
Joomla Downloads page — always download the latest stable Joomla 5 release - 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-datauser, and a freshly extracted Joomla archive owned by root will not be writable by the web server.-

500 error — almost always a permissions issue
-
- Fix permissions so that your development user owns the files but
www-datacan 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