Vultr prices checked Independent, not affiliated with Joomla!
Step by step · 12 min read

Install Joomla 6 on a Vultr server

A documentation-based Ubuntu 24.04 walkthrough for Apache, PHP 8.3, MySQL, HTTPS and a fresh Joomla 6 installation.

Scope: a fresh Ubuntu 24.04 server, Apache 2.4, PHP 8.3 and MySQL 8.0. This walkthrough has been checked against primary documentation, but has not been run end to end on a live Vultr instance. It contains no original benchmark or installation screenshots. Test on a disposable environment before using it for a production site.

1. Prepare the server and domain

Choose an instance and region, add your SSH key and use a non-root administrative account with sudo access. Keep access to Vultr’s recovery console. Review the monthly cost examples before deploying anything billable.

Create the A record for a hostname such as site.example.com pointing to the new server. Only add an AAAA record if IPv6 is actually configured for that server. Keep email and other unrelated DNS records intact. All example hostnames, usernames, IPs and passwords below must be replaced with your own values.

This is a fresh-install procedure. For an existing Joomla site, first read the migration checklist; do not run a fresh installer against its production database.

2. Install the native Ubuntu packages

Connect over SSH. Review and apply operating-system updates, including any required reboot, before continuing. Then install the stack from Ubuntu’s repositories:

sudo apt update
sudo apt install apache2 apache2-utils mysql-server unzip certbot python3-certbot-apache
sudo apt install libapache2-mod-php8.3 php8.3-cli php8.3-mysql php8.3-xml php8.3-gd php8.3-mbstring php8.3-curl php8.3-zip php8.3-intl
sudo a2enmod rewrite
sudo systemctl enable --now apache2 mysql

Confirm the installed versions and modules:

apache2ctl -v
php8.3 -v
php8.3 -m
sudo mysql -e 'SELECT VERSION();'

PHP 8.3 is the supported baseline for Joomla 6; Joomla’s documentation recommends a newer version. This example deliberately uses Ubuntu 24.04’s native PHP 8.3 packages. Check the requirements and your extensions rather than replacing PHP with an arbitrary third-party repository.

Permit HTTP and HTTPS through the relevant provider and host firewalls. If you use UFW, allow your actual SSH access before enabling or changing it. For a default port-22 configuration, the profiles are commonly OpenSSH and Apache Full. Keep a session open and verify another SSH login before closing it.

3. Create a site database

Open the local database administration session:

sudo mysql

For a new, empty site only, create a dedicated database and user. Replace the example password with a unique value; do not reuse the database administrator’s credentials in Joomla.

CREATE DATABASE joomla CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'joomla_app'@'localhost' IDENTIFIED BY 'REPLACE_WITH_A_UNIQUE_PASSWORD';
GRANT ALL PRIVILEGES ON joomla.* TO 'joomla_app'@'localhost';
EXIT;

Keep the database listening locally for this single-server setup. There is no need to open its port to the public internet. Record the database name and credentials securely for the installer.

4. Configure Apache for your hostname

Create the document root:

sudo mkdir -p /var/www/joomla
sudo nano /etc/apache2/sites-available/joomla.conf

Use this site-specific configuration, replacing the hostname:

<VirtualHost *:80>
    ServerName site.example.com
    DocumentRoot /var/www/joomla
    DirectoryIndex index.php index.html

    <Directory /var/www/joomla>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/joomla-error.log
    CustomLog ${APACHE_LOG_DIR}/joomla-access.log combined
</VirtualHost>

Enable the site, check the configuration and reload:

sudo a2ensite joomla.conf
sudo apache2ctl configtest
sudo systemctl reload apache2

On a fresh server only, disable the default Apache site if it would otherwise answer for your application. Keep existing virtual hosts on a server that already serves other websites.

5. Set up HTTPS before using the installer

When public DNS resolves to this server and ports 80/443 are reachable, request the certificate:

sudo certbot --apache -d site.example.com --redirect

Follow Certbot’s prompts, then confirm HTTPS works for that hostname. Fix DNS or firewall problems before retrying repeatedly. Certbot may create a separate HTTPS virtual-host file; inspect the configuration it actually uses.

Check automatic renewal with the installed Certbot version’s documented process. Do not assume that a certificate issued once will renew successfully after future configuration changes.

6. Restrict the site while installing

Before uploading Joomla’s installer, protect the site with temporary web-server authentication or an equivalent access restriction. One Apache option is a password file outside the document root:

sudo htpasswd -c /etc/apache2/joomla-setup.htpasswd setup

Choose a unique temporary password at the prompt. In the active HTTP and HTTPS site configuration, change the document-root directory’s access rule from Require all granted to:

AuthType Basic
AuthName "Site setup"
AuthUserFile /etc/apache2/joomla-setup.htpasswd
Require valid-user

Run the configuration test, reload Apache and confirm that a fresh browser session receives the authentication prompt. Keep this restriction until installation is complete. It prevents another visitor from reaching the unfinished installer first.

7. Download and unpack Joomla

Use the official Joomla download page to get the latest supported Joomla 6 full package and verify it against the checksum supplied there. Do not use an upgrade-only package for a fresh installation.

Transfer that archive to the server outside the public web root. For example, from your own computer, replace the filename and destination account:

scp Joomla_6-2-0-Stable-Full_Package.zip your-admin@YOUR_SERVER_IP:/tmp/joomla.zip

Back on the server, extract into the empty document root:

sudo unzip /tmp/joomla.zip -d /var/www/joomla
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 {} \;
sudo cp /var/www/joomla/htaccess.txt /var/www/joomla/.htaccess

This simple ownership arrangement permits Joomla’s web-based installation and updates. It is not a hardened multi-tenant deployment model. Review write access as part of your maintenance plan; never use world-writable permissions to work around an error.

8. Review PHP limits and run the web installer

If the package defaults are unsuitable, create a site-related PHP configuration file such as /etc/php/8.3/apache2/conf.d/99-joomla.ini. For a modest starting environment, Joomla’s installation documentation gives these reference values:

memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 30

These are PHP limits, not a complete server-sizing recommendation. Your extensions may need different values. Reload or restart Apache as required after changing the active configuration.

Open https://site.example.com, pass the temporary authentication prompt and follow Joomla’s installer. Enter the site name, create a unique administrator account and use the dedicated database credentials. Complete the installation and confirm that the installation directory has been removed as expected.

Check that configuration.php is not world-readable where your access model permits tighter permissions. With this example’s www-data ownership, a mode such as 640 can retain application access; verify that updates and administration still behave as intended.

9. Test the website before opening it

Check administrator login, media uploads, a nested article URL and any installed extension. Configure search-engine-friendly URLs in Joomla and enable URL rewriting only after the .htaccess file and Apache rewrite module work.

Set up SMTP email, create an independent application backup and test recovery. Only after the installer is gone and these checks pass should you remove the temporary Apache authentication and reload the server. Recheck public HTTPS, redirects and certificate renewal after removing it.

10. Troubleshoot by layer

For an Apache error, inspect the configured joomla-error.log and the service status. For a database connection error, check the database name, local user and credentials. For broken nested URLs, revisit rewrite support and Joomla’s SEO settings.

If a PHP file is downloaded rather than executed, take the site out of public access and fix the PHP handler before continuing. Do not leave diagnostic PHP pages, SQL exports or installation archives in the public document root.

Record the versions you deployed and give ongoing maintenance a named owner. For an existing website, follow the separate migration procedure rather than assuming a successful fresh install proves a safe cutover.

References: Ubuntu’s PHP installation documentation, Vultr’s Apache guide for Ubuntu 24.04, Joomla’s installer guide and Certbot’s official instructions. The shell examples are for the stated fresh environment and require adaptation and an end-to-end server test.