Instalación de Joomla en servidor Linux

Joomla es un potente y fácil de usar sistema de gestión de contenido construido en PHP que permite la creación de aplicaciones web sofisticadas y sitios web dinámicos impulsados por contenido. Con un fuerte apoyo de la comunidad y una amplia extensibilidad a través de componentes y módulos, Joomla impulsa millones de sitios web globalmente. Esta guía proporciona un walkthrough completo para instalar Joomla en un servidor Linux con Apache o Nginx, configurar MySQL, endurecimiento de seguridad y optimización del rendimiento.

Tabla de contenidos

Requisitos previos

Antes de la instalación, verifique que tiene:

  • Ubuntu 20.04 LTS o posterior ejecutándose en su servidor
  • Privilegios root o sudo
  • Un nombre de dominio válido
  • Mínimo 2GB de RAM (4GB+ recomendado)
  • 15GB de espacio en disco disponible
  • Conocimientos básicos de administración de Linux

Actualice los paquetes del sistema:

sudo apt update && sudo apt upgrade -y

Requisitos del sistema

Joomla requiere versiones específicas de software para un funcionamiento óptimo. Verifique su entorno:

Vea la distribución de Linux y kernel:

cat /etc/os-release
uname -r

Verifique la memoria disponible:

free -h

Verifique el espacio en disco disponible:

df -h /var/www

Instalación de la pila LAMP

Instale la pila completa de Linux, Apache, MySQL y PHP:

Instale el servidor web Apache:

sudo apt install -y apache2 apache2-utils apache2-doc

Instale MySQL Server:

sudo apt install -y mysql-server mysql-client

Instale PHP 8.0 o posterior:

sudo apt install -y php php-common php-mysql php-curl php-gd php-json php-mbstring php-xml php-xmlrpc php-opcache php-soap php-zip

Verifique la versión de PHP:

php --version

Verifique que las extensiones están cargadas:

php -m | grep -E "curl|gd|json|mbstring|mysql|xml|zip"

Habilite los módulos de Apache:

sudo a2enmod rewrite
sudo a2enmod headers
sudo a2enmod ssl
sudo a2enmod proxy

Inicie los servicios:

sudo systemctl start apache2
sudo systemctl start mysql
sudo systemctl enable apache2
sudo systemctl enable mysql

Configuración de PHP

Configure PHP para los requisitos de Joomla:

Edite la configuración de PHP:

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

Actualice estas configuraciones críticas:

memory_limit = 256M
max_execution_time = 300
upload_max_filesize = 100M
post_max_size = 100M
max_input_vars = 5000
date.timezone = UTC

Edite la configuración de PHP-CLI:

sudo nano /etc/php/8.0/cli/php.ini

Aplique la misma configuración. Reinicie Apache:

sudo systemctl restart apache2

Configuración de la base de datos

Asegure la instalación de MySQL:

sudo mysql_secure_installation

Cree la base de datos de Joomla:

sudo mysql -u root -p << EOF
CREATE DATABASE joomla;
CREATE USER 'joomla'@'localhost' IDENTIFIED BY 'ComplexPassword123!';
GRANT ALL PRIVILEGES ON joomla.* TO 'joomla'@'localhost';
FLUSH PRIVILEGES;
EXIT;
EOF

Verifique el acceso a la base de datos:

mysql -u joomla -p -h localhost joomla
show tables;
exit;

Instalación de Joomla

Cree el directorio web:

sudo mkdir -p /var/www/joomla
sudo chown -R www-data:www-data /var/www/joomla

Descargue la última versión de Joomla:

cd /tmp
wget https://downloads.joomla.org/cms/joomla4/stable-4/Joomla_4-latest-Stable-Full_Package.zip
unzip Joomla_4-latest-Stable-Full_Package.zip

Copie los archivos a la raíz web:

sudo cp -r /tmp/joomla/* /var/www/joomla/
sudo cp /tmp/joomla/.htaccess /var/www/joomla/

Establezca los permisos correctos:

sudo chown -R www-data:www-data /var/www/joomla
sudo find /var/www/joomla -type f -exec chmod 644 {} \;
sudo find /var/www/joomla -type d -exec chmod 755 {} \;
sudo chmod 777 /var/www/joomla/configuration.php

Configuración del servidor web

Configuración de Apache

Cree un host virtual:

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

Agregue la configuración:

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    ServerAdmin [email protected]
    DocumentRoot /var/www/joomla

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

    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(.*)$ index.php [QSA,L]
    </IfModule>

    ErrorLog ${APACHE_LOG_DIR}/joomla_error.log
    CustomLog ${APACHE_LOG_DIR}/joomla_access.log combined
</VirtualHost>

Habilite el sitio y deshabilite el predeterminado:

sudo a2ensite joomla.conf
sudo a2dissite 000-default.conf

Pruebe y recargue Apache:

sudo apache2ctl configtest
sudo systemctl reload apache2

Habilite la compatibilidad con .htaccess:

sudo nano /var/www/joomla/.htaccess

Verifique que la RewriteBase esté configurada correctamente.

Configuración de Nginx

Cree la configuración de Nginx:

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

Agregue la configuración:

server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/joomla;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location ~ /\. {
        deny all;
        access_log off;
        log_not_found off;
    }
}

Habilite la configuración:

sudo ln -s /etc/nginx/sites-available/joomla.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

SSL y HTTPS

Instale Certbot para certificados SSL de Let's Encrypt:

sudo apt install -y certbot python3-certbot-apache

Obtenga un certificado SSL:

sudo certbot certonly --apache -d example.com -d www.example.com

Actualice la configuración de Apache para usar HTTPS:

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

Reemplace el contenido con:

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    Redirect permanent / https://example.com/
</VirtualHost>

<VirtualHost *:443>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/joomla

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem

    <Directory /var/www/joomla>
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/joomla_ssl_error.log
    CustomLog ${APACHE_LOG_DIR}/joomla_ssl_access.log combined
</VirtualHost>

Habilite los módulos SSL:

sudo a2enmod ssl
sudo apache2ctl configtest
sudo systemctl reload apache2

Endurecimiento de seguridad

Deshabilite la ejecución de PHP en directorios de carga:

sudo nano /var/www/joomla/images/.htaccess

Agregue:

php_flag engine off
<FilesMatch "\.php$">
    Deny from all
</FilesMatch>

Cambie el nombre del archivo de configuración después de la instalación:

sudo mv /var/www/joomla/configuration.php /var/www/joomla/configuration.php.bak

Elimine la carpeta de instalación después de la configuración:

sudo rm -rf /var/www/joomla/installation

Deshabilite la edición de archivos en el administrador de Joomla:

Actualice configuration.php en el panel de administración de Joomla y establezca:

  • System → Global Configuration → Server → File Permissions → Deshabilitar "Edit Core Files"

Configure encabezados de seguridad en Apache:

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

Agregue al VirtualHost:

Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-XSS-Protection "1; mode=block"
Header always set Referrer-Policy "no-referrer-when-downgrade"

Configure firewall de aplicaciones web:

sudo apt install -y libapache2-mod-security2
sudo a2enmod security2
sudo systemctl reload apache2

Configuración posterior a la instalación

Acceda al asistente de instalación de Joomla en https://example.com y complete la configuración:

  1. Configure el nombre del sitio, descripción y correo electrónico del administrador
  2. Configuración de la base de datos (host: localhost, nombre: joomla, usuario: joomla)
  3. Cree una cuenta de administrador con contraseña fuerte
  4. Elimine la carpeta de instalación

Verifique la finalización de la instalación:

ls -la /var/www/joomla/installation

Debería estar vacío o eliminado.

Configure URL amigables en Joomla:

  1. Inicie sesión en el panel de administración
  2. System → Global Configuration → SEO Settings
  3. Habilite "Search Engine Friendly URLs"

Configure SMTP para correo electrónico:

  1. System → Global Configuration → Server
  2. Establezca el nombre de correo de envío y correo electrónico
  3. Configure los detalles del servidor SMTP

Estrategia de copia de seguridad

Cree un script de copia de seguridad:

sudo nano /usr/local/bin/joomla-backup.sh

Agregue:

#!/bin/bash

BACKUP_DIR="/backups/joomla"
JOOMLA_DIR="/var/www/joomla"
DATE=$(date +%Y%m%d_%H%M%S)

mkdir -p $BACKUP_DIR

# Copia de seguridad de la base de datos
mysqldump -u joomla -p'ComplexPassword123!' joomla | gzip > "$BACKUP_DIR/joomla-db-$DATE.sql.gz"

# Copia de seguridad de archivos
tar -czf "$BACKUP_DIR/joomla-files-$DATE.tar.gz" "$JOOMLA_DIR"

# Mantener solo 30 días
find $BACKUP_DIR -type f -mtime +30 -delete

echo "Backup completed: $DATE"

Haga ejecutable:

sudo chmod +x /usr/local/bin/joomla-backup.sh

Programe copias de seguridad diarias:

sudo crontab -e

Agregue:

0 2 * * * /usr/local/bin/joomla-backup.sh >> /var/log/joomla-backup.log 2>&1

Conclusión

Joomla ahora está completamente instalado, configurado y asegurado en su servidor Linux. La combinación de Apache/Nginx, base de datos MySQL, encriptación SSL y endurecimiento de seguridad proporciona una plataforma robusta para su presencia web. Mantenga copias de seguridad regulares, mantenga las extensiones actualizadas y monitoree el rendimiento de su sitio para una operación óptima. Aproveche las poderosas características de Joomla y la amplia biblioteca de componentes para crear experiencias web atractivas.