Deployment guide

Joomla 6

Overview

Joomla 6 is an open-source content management system for building and managing websites. This SecureAnyCloud image runs Joomla behind nginx on a single EC2 instance, ready to sign in to as soon as it boots.

What you get:

  • Joomla served by nginx, with PHP FPM 8.3 and OPcache enabled
  • Site content and configuration stored in MariaDB on the same instance, bound to the loopback interface only
  • Joomla's built-in task scheduler, run hourly by a systemd timer, so scheduled jobs fire without manual intervention
  • Joomla administrator and MariaDB credentials generated on the first boot of every instance, so two instances launched from the same Amazon Machine Image never share passwords
  • The initial administrator and MariaDB passwords written to /root/joomla-credentials.txt with mode 0600, readable only by root
  • Joomla configured to accept requests on any host, with no instance metadata lookup and no value to edit on first boot
  • 24/7 SecureAnyCloud support

Because Joomla accepts any host, the site works on whatever public DNS name or IP address visitors use. Deployments behind an Application Load Balancer, in a private subnet or on a custom domain need no changes.

Prerequisites

Before you deploy this image, have the following ready:

  • An Amazon Web Services account where you can launch EC2 instances
  • IAM permissions to launch instances, create security groups and subscribe to AWS Marketplace products
  • An EC2 key pair in the target Region for SSH access
  • A VPC and subnet in the target Region, with a security group that allows inbound port 22 from your management network and inbound ports 80 and 443 from the networks your visitors use
  • The AWS CLI (version 2) installed locally, if you plan to deploy from the command line
1

Launch the instance from the AWS Marketplace

Sign in to the AWS Management Console, open the EC2 service and select Launch instance. Under Application and OS Images, choose AWS Marketplace AMIs and search for Joomla CMS. Select the SecureAnyCloud listing, choose Select, then choose Continue on the subscription summary.

Pick an instance type of m5.large or larger, because Joomla is PHP and MariaDB heavy. Choose your EC2 key pair under Key pair (login). Under Network settings, select your VPC and subnet. Create or select a security group that allows inbound port 22 from your management network and inbound ports 80 and 443 from the networks your visitors use. Keep the root volume at the default size or larger.

Select Launch instance. First-boot initialisation takes about one minute after the instance state becomes Running and the status checks pass.

2

Launch the instance from the AWS CLI

Run the command below to launch the SecureAnyCloud Joomla Marketplace AMI into an existing subnet and security group. Replace <ami-id> with the AMI ID on the Marketplace listing and <key-name> with your EC2 key pair name. Replace <subnet-id> with your subnet ID and <security-group-id> with a security group that opens ports 22, 80 and 443 as described above.

aws ec2 run-instances \
  --image-id <ami-id> \
  --instance-type m5.large \
  --key-name <key-name> \
  --subnet-id <subnet-id> \
  --security-group-ids <security-group-id> \
  --block-device-mappings '[{"DeviceName":"/dev/sda1","Ebs":{"VolumeSize":30,"VolumeType":"gp3"}}]' \
  --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=joomla-cms-01}]'

On success the command prints a JSON document. Note the instance ID. Once the instance is running, get its public address with aws ec2 describe-instances --instance-ids <instance-id> --query "Reservations[].Instances[].PublicIpAddress" --output text.

3

Connect and retrieve the initial credentials

Connect over SSH with the key pair you selected and the public IP address from step 2. For Joomla 6 on Ubuntu 24.04, the SSH login user is ubuntu.

The first-boot service runs before the SSH daemon is ready, so the credentials file is in place the first time you log in.

ssh <login-user>@<public-ip>
sudo cat /root/joomla-credentials.txt

The plain-text file lists the Joomla URL, the administrator username (admin) and password, and the MariaDB database name, user and password. Copy these values to a password manager or encrypted vault. Do not commit them to source control.

From the same SSH session, confirm that the deployment is healthy:

curl -fsS -o /dev/null -w 'administrator login HTTP %{http_code}\n' http://127.0.0.1/administrator/

A response of administrator login HTTP 200 confirms that the full stack (nginx, PHP and MariaDB) is serving Joomla.

4

Sign in to the Joomla administrator interface

Open http://<public-ip>/administrator/ in a browser. Joomla shows the administrator sign-in form.

Enter the administrator username admin and the administrator password from /root/joomla-credentials.txt, then select Log in. The public site is at http://<public-ip>/.

5

Explore the administrator control panel

After you sign in, Joomla opens the control panel, the home dashboard of the administrator interface. The left-hand menu leads to every management area:

  • Content: articles, categories and media
  • Menus: site navigation
  • Components: built-in applications such as contacts and banners
  • Users: accounts and groups
  • System: global configuration, templates, extensions and maintenance

The control panel shows the most common tasks, any post-installation messages, and the Joomla and PHP versions in use. Check the System dashboard first to review the health of a deployment.

6

Change the administrator password

For a production deployment, replace the administrator password generated on first boot. Open Users, then Manage, and select the admin user. On the Account Details tab, enter a new value in the Password and Confirm Password fields, then select Save.

While you are there, set a real email address on the account so that password recovery and system notifications reach you.

7

Create your first article

Joomla organises content as articles within categories. Open Content, then Articles, and select New. Give the article a title, write the body in the editor and assign a category. On the Publishing tab, set the publish state. Use the Featured toggle to promote the article to the site front page.

Select Save & Close. Manage the site front page from Content, then Site Modules, and the navigation from Menus.

8

Install extensions and templates

Extend Joomla with components, modules, plugins and templates from the Joomla Extensions Directory at https://extensions.joomla.org/. Open System, then under Install choose Extensions.

Upload an extension package directly, install one from a URL, or browse the Install from Web tab. Install templates the same way, then assign them under System, then Site Templates. Manage installed extensions under System, then Manage, then Extensions.

9

Configure outbound email

By default, Joomla sends mail through the server's PHP mail function. For reliable delivery from a cloud instance, route mail through an SMTP provider such as Amazon SES, SendGrid or Mailgun.

Open System, then Global Configuration, and select the Server tab. Under Mail Settings, set Mailer to SMTP. Enter your provider's SMTP host, port, security and credentials, select Save and send a test message.

10

Enable HTTPS with Let's Encrypt

For any production Joomla deployment, serve the site over HTTPS so that session cookies and authentication tokens cannot be intercepted. The image ships with nginx, which certbot can configure automatically.

These commands assume a DNS record already points your fully qualified domain name at the instance's public IP address.

sudo apt-get update && sudo apt-get install -y certbot python3-certbot-nginx
sudo certbot --nginx -d joomla.your-domain.example \
  --non-interactive --agree-tos -m you@your-domain.example \
  --redirect

When certbot finishes, open System, then Global Configuration, and set Force HTTPS to Entire Site. Joomla then generates HTTPS links throughout.

11

Back up and maintain the site

Back up two data sources together: the MariaDB database and the site files in /var/www/joomla. The site files hold the Joomla code tree, installed extensions and uploaded media under images/.

sudo mysqldump --single-transaction joomla > /var/backups/joomla-db-$(date +%F).sql
sudo tar --acls --xattrs -czf /var/backups/joomla-files-$(date +%F).tgz -C /var/www joomla

Copy both files to an Amazon S3 bucket or another object store. The task scheduler timer installed with the image runs Joomla's scheduled tasks hourly.

Ubuntu's unattended-upgrades is enabled by default, so security patches for the kernel and packages apply automatically. To update Joomla core and extensions, use the built-in updater under System, then Update, then Joomla.

12

Scale beyond a single instance

For larger deployments, move Joomla off the single-instance pattern:

  • Move MariaDB to Amazon RDS for MariaDB and update the database host in /var/www/joomla/configuration.php
  • Put the Joomla web tier behind an Application Load Balancer and scale horizontally with an Auto Scaling group, with the images/ directory on Amazon EFS shared storage
  • Offload Joomla caching to Amazon ElastiCache for Redis through Joomla's cache settings
  • Serve static assets and uploaded media through Amazon CloudFront

The official Joomla documentation at https://docs.joomla.org/ covers each of these.

Screenshots

The Joomla administrator sign-in page, served on first boot with no manual setup.

The Joomla administrator control panel after first sign-in.

Creating an article from the Joomla administrator interface.

The Joomla Extensions area for installing components, modules and plugins.

Support

SecureAnyCloud provides 24/7/365 expert technical support for this image. Guaranteed response within 24 hours, one hour average for critical issues. Contact sales@secureanycloud.com.

For general Joomla administration questions, see the community at https://www.joomla.org/ and the documentation at https://docs.joomla.org/.

Deploy on AWS

Launch Joomla CMS on AWS with 24/7 support from SecureAnyCloud.

View on Marketplace

Need Help?

Our support team is available 24/7.

sales@secureanycloud.com

Deploy on AWS