Joomla es un sistema de gestión de contenidos de código abierto escrito en PHP, con un panel de administración completo y un amplio catálogo de extensiones. En este tutorial instalarás la última versión estable de Joomla en Ubuntu 24.04 sobre Apache, PHP 8.3 y MariaDB, completarás el instalador web, activarás las URL amigables y servirás el sitio por HTTPS con un certificado de Let's Encrypt.

Requisitos previos

Para seguir esta guía necesitas:

  • Un servidor con Ubuntu 24.04 LTS y al menos 1 GB de RAM, por ejemplo un VPS de CubePath.
  • Un usuario no root con privilegios sudo.
  • Un dominio, representado aquí como your_domain, con un registro DNS A apuntando a la IP del servidor.
  • Los puertos 22, 80 y 443 abiertos.

Joomla 5 funciona con PHP 8.1 o superior y Joomla 6 requiere PHP 8.3; Ubuntu 24.04 incluye PHP 8.3, así que sirve para ambas versiones sin repositorios externos.

Paso 1: Instalar Apache, PHP y MariaDB

Instala Apache, PHP 8.3 con las extensiones que usa Joomla, MariaDB y unzip:

sudo apt update
sudo apt install apache2 mariadb-server \
  php8.3 libapache2-mod-php8.3 php8.3-mysql php8.3-xml php8.3-zip \
  php8.3-gd php8.3-intl php8.3-mbstring php8.3-curl php8.3-opcache \
  unzip

Comprueba que Apache está en marcha y que PHP tiene la versión esperada:

systemctl is-active apache2
php -v
active
PHP 8.3.x (cli) (built: ...)

Abre los puertos en UFW:

sudo ufw allow OpenSSH
sudo ufw allow 'Apache Full'
sudo ufw enable

Paso 2: Ajustar PHP

Los valores por defecto de PHP limitan la subida de archivos a 2 MB, poco para instalar extensiones o subir imágenes. Edita el php.ini que usa Apache:

sudo nano /etc/php/8.3/apache2/php.ini

Busca estas directivas (con Ctrl+W en nano) y cambia sus valores. Joomla recomienda además desactivar output_buffering:

memory_limit = 256M
upload_max_filesize = 32M
post_max_size = 32M
max_execution_time = 120
output_buffering = Off

Reinicia Apache para aplicar los cambios:

sudo systemctl restart apache2

Puedes comprobar un valor concreto desde la línea de comandos indicando ese mismo php.ini:

php -c /etc/php/8.3/apache2/php.ini -r 'echo ini_get("upload_max_filesize"), PHP_EOL;'
32M

Paso 3: Crear la base de datos

Ejecuta el asistente de seguridad de MariaDB para eliminar usuarios anónimos y la base de datos de pruebas. Puedes mantener la autenticación por socket de root y responder Y al resto de preguntas:

sudo mariadb-secure-installation

Entra en la consola:

sudo mariadb

Crea la base de datos y un usuario dedicado. Sustituye your_db_password por una contraseña segura:

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

Comprueba el acceso:

mariadb -u joomla -p -e "SHOW DATABASES;"
+--------------------+
| Database           |
+--------------------+
| information_schema |
| joomla             |
+--------------------+

Paso 4: Descargar Joomla

Consulta la última versión estable en la página de versiones de Joomla en GitHub y guárdala en una variable. Sustituye x.y.z por el número de versión, por ejemplo 5.3.3:

JOOMLA_VERSION=x.y.z

Descarga el paquete completo (Full_Package) en un directorio temporal:

cd /tmp
curl -fLO "https://github.com/joomla/joomla-cms/releases/download/${JOOMLA_VERSION}/Joomla_${JOOMLA_VERSION}-Stable-Full_Package.zip"

Si curl devuelve un error 404, revisa que el número de versión es exacto y que en la página de la versión existe un archivo con ese nombre.

Descomprímelo en el directorio del sitio:

sudo mkdir -p /var/www/joomla
sudo unzip -q "Joomla_${JOOMLA_VERSION}-Stable-Full_Package.zip" -d /var/www/joomla

Joomla instala y actualiza extensiones desde el panel, así que Apache necesita ser propietario de los archivos. Asigna la propiedad a www-data con permisos 755 para directorios y 644 para archivos:

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 {} +

Comprueba que están los archivos esperados:

ls /var/www/joomla
LICENSE.txt  README.txt  administrator  api  cache  cli  components  htaccess.txt  images  includes  index.php  installation  language ...

Paso 5: Configurar Apache

Crea el host virtual del sitio:

sudo nano /etc/apache2/sites-available/joomla.conf

AllowOverride All permite que funcione el .htaccess de Joomla, que activarás más adelante para las URL amigables:

<VirtualHost *:80>
    ServerName your_domain
    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>

Activa rewrite, habilita el sitio, desactiva el sitio por defecto y valida la configuración:

sudo a2enmod rewrite
sudo a2ensite joomla.conf
sudo a2dissite 000-default.conf
sudo apache2ctl configtest
Syntax OK
sudo systemctl reload apache2

Paso 6: Activar HTTPS con Let's Encrypt

Obtén el certificado antes de abrir el instalador, así las credenciales de administrador viajan cifradas. Instala Certbot con el plugin de Apache:

sudo apt install certbot python3-certbot-apache
sudo certbot --apache -d your_domain

Certbot crea el host virtual en el puerto 443 y redirige HTTP a HTTPS. Comprueba la renovación automática:

sudo certbot renew --dry-run
Congratulations, all simulated renewals succeeded:
  /etc/letsencrypt/live/your_domain/fullchain.pem (success)

Paso 7: Completar el instalador web

Visita https://your_domain en el navegador. Se abrirá el instalador de Joomla, que tiene tres pantallas:

  1. Configuración del sitio: elige el idioma de instalación y escribe el nombre del sitio.
  2. Datos de acceso: nombre real, nombre de usuario, contraseña y correo del superusuario. Evita admin como nombre de usuario.
  3. Configuración de la base de datos:
    • Tipo de base de datos: MySQLi
    • Servidor: localhost
    • Usuario: joomla
    • Contraseña: your_db_password
    • Nombre de la base de datos: joomla
    • Prefijo de tablas: deja el aleatorio que propone Joomla
    • Cifrado de la conexión: Predeterminado

Pulsa Instalar Joomla. Al terminar, Joomla elimina el directorio installation (en algunas versiones lo hace el botón final del instalador). Compruébalo:

ls /var/www/joomla/installation
ls: cannot access '/var/www/joomla/installation': No such file or directory

Si el directorio sigue existiendo, bórralo a mano con sudo rm -rf /var/www/joomla/installation: mientras exista, cualquiera podría reinstalar el sitio.

Accede al panel en https://your_domain/administrator con el superusuario que acabas de crear.

Paso 8: Activar las URL amigables y forzar HTTPS

Por defecto las URL de Joomla incluyen index.php. Para quitarlo, activa el .htaccess que trae Joomla:

sudo -u www-data cp /var/www/joomla/htaccess.txt /var/www/joomla/.htaccess

En el panel ve a Sistema > Configuración global, pestaña Sitio, y en Ajustes SEO:

  • Activa Usar la reescritura de URL.

En la pestaña Servidor:

  • Cambia Forzar HTTPS a Todo el sitio.

Pulsa Guardar. Comprueba que una URL interna responde sin index.php, por ejemplo la de restablecimiento de contraseña:

curl -sI https://your_domain/component/users/reset | head -n 1
HTTP/2 200

Paso 9: Tareas programadas y actualizaciones

Joomla incluye un programador de tareas (Sistema > Tareas programadas) que, por defecto, se lanza con las visitas al sitio. Mantén Joomla y sus extensiones actualizados desde Sistema > Actualizar > Joomla y Sistema > Actualizar > Extensiones, y haz una copia de seguridad antes de cada actualización mayor:

sudo mariadb-dump joomla > ~/joomla-$(date +%F).sql
sudo tar czf ~/joomla-files-$(date +%F).tar.gz -C /var/www joomla

Solución de problemas

  • Página en blanco o error 500: revisa /var/log/apache2/joomla_error.log. Para ver el error en pantalla temporalmente, sube Informe de errores a Máximo en Configuración global > Servidor y devuélvelo a Predeterminado después.
  • Las URL amigables devuelven 404: falta el archivo .htaccess, el módulo rewrite o AllowOverride All en el host virtual.
  • No se pueden instalar extensiones: los archivos no pertenecen a www-data; repite los comandos de permisos del paso 4. En Sistema > Información del sistema > Permisos de directorios puedes ver qué directorios no son escribibles.
  • Error al subir archivos grandes: revisa upload_max_filesize y post_max_size del paso 2.

Conclusión

Tienes Joomla funcionando en Ubuntu 24.04 con Apache, PHP 8.3 y MariaDB, con HTTPS forzado y URL amigables. Como siguientes pasos, activa la autenticación en dos pasos para los superusuarios desde tu perfil, instala una plantilla o las extensiones que necesites desde Sistema > Instalar > Extensiones y programa las copias de seguridad de la base de datos y los archivos.