Cómo instalar la plataforma de aprendizaje electrónico Moodle en Rocky Linux 8

Moodle es un Sistema de Gestión del Aprendizaje (LMS) gratuito y de código abierto. Permite a los educadores crear un sitio web totalmente funcional para cursos educativos, con una experiencia de clase en línea. Está escrito en PHP. Ofrece un amplio conjunto de funciones, como wiki, calificación, envío de tareas, cuestionarios en línea, foros de discusión y mucho más.

Esta guía explica cómo instalar Moodle en un servidor Rocky Linux 8.

Requisitos previos

  • Un servidor con Rocky Linux 8.

  • Un nombre de dominio que apunte al servidor. Para nuestro tutorial, utilizaremos el dominio moodle.example.com.

  • Un usuario no root con privilegios sudo.

  • Asegúrate de que todo está actualizado.

    $ sudo dnf update
    
  • Instala los paquetes de utilidades básicas. Es posible que algunos de ellos ya estén instalados.

    $ sudo dnf install wget curl nano unzip yum-utils -y
    

Paso 1 – Configurar el cortafuegos

El primer paso es configurar el cortafuegos. Rocky Linux utiliza el cortafuegos Firewalld. Comprueba el estado del cortafuegos.

$ sudo firewall-cmd --state
running

El cortafuegos funciona con diferentes zonas, y la zona pública es la que utilizaremos por defecto. Enumera todos los servicios y puertos activos en el cortafuegos.

$ sudo firewall-cmd --permanent --list-services

Debería mostrar la siguiente salida.

cockpit dhcpv6-client ssh

Moodle necesita los puertos HTTP y HTTPS para funcionar. Ábrelos.

$ sudo firewall-cmd --add-service=http --permanent
$ sudo firewall-cmd --add-service=https --permanent

Recarga el cortafuegos para aplicar los cambios.

$ sudo firewall-cmd --reload

Paso 2 – Instalar Git

Moodle necesita Git para coger los archivos de la aplicación. Instala Git.

$ sudo dnf install git

Paso 3 – Instalar y configurar PHP

Necesitamos instalar PHP 8.0 para que Moodle funcione para nuestro tutorial. El primer paso es coger el repositorio Epel.

$ sudo dnf install epel-release

A continuación, instala el repositorio Remi.

$ sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

Comprueba si hay versiones de PHP disponibles.

$ dnf module list php -y
Rocky Linux 8 - AppStream
Name                Stream                 Profiles                                 Summary
php                 7.2 [d]                common [d], devel, minimal               PHP scripting language
php                 7.3                    common [d], devel, minimal               PHP scripting language
php                 7.4                    common [d], devel, minimal               PHP scripting language
php                 8.0                    common [d], devel, minimal               PHP scripting language

Remi's Modular repository for Enterprise Linux 8 - x86_64
Name                Stream                 Profiles                                 Summary
php                 remi-7.2               common [d], devel, minimal               PHP scripting language
php                 remi-7.3               common [d], devel, minimal               PHP scripting language
php                 remi-7.4               common [d], devel, minimal               PHP scripting language
php                 remi-8.0               common [d], devel, minimal               PHP scripting language
php                 remi-8.1               common [d], devel, minimal               PHP scripting language

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

La versión por defecto es la 7.2. Activa el repositorio PHP 8.0 de Remi.

$ sudo dnf module reset php -y
$ sudo dnf module enable php:remi-8.0

Instala PHP y las extensiones requeridas por Moodle.

$ sudo dnf install graphviz aspell ghostscript clamav php-fpm php-iconv php-curl php-mysqlnd php-cli php-mbstring php-xmlrpc php-soap php-zip php-gd php-xml php-intl php-json php-sodium php-opcache

Verifica la instalación.

$ php --version
PHP 8.0.21 (cli) (built: Jul  6 2022 10:13:53) ( NTS gcc x86_64 )
Copyright (c) The PHP Group
Zend Engine v4.0.21, Copyright (c) Zend Technologies
    with Zend OPcache v8.0.21, Copyright (c), by Zend Technologies

Abre el archivo php.ini para editarlo.

$ sudo nano /etc/php.ini

Cambia los valores de las siguientes variables para establecer el tamaño de los archivos adjuntos al correo en 25MB.

upload_max_filesize = 25M
post_max_size = 25M

A continuación, descomenta la variable max_input_vars eliminando el punto y coma que la precede y cambiando su valor a 5000.

max_input_vars = 5000

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Abre el archivo /etc/php-fpm.d/www.conf.

$ sudo nano /etc/php-fpm.d/www.conf

Busca las líneas user=apache y group=apache en el archivo y cámbialas como sigue.

...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
...

A continuación, descomenta la línea del propietario, el grupo y el permiso por defecto del archivo socket y modifícalos como se muestra a continuación.

; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server.
; Default Values: user and group are set as the running user
;                 mode is set to 0660
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

A continuación, comenta la siguiente línea como se muestra poniendo un punto y coma delante de ella.

;listen.acl_users = apache,nginx

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando te lo pida.

Da los permisos adecuados al directorio de sesión de PHP.

$ chown -R nginx:nginx /var/lib/php/session/

Activa e inicia el servicio PHP-FPM.

$ sudo systemctl enable php-fpm --now

Paso 4 – Instalar y configurar MySQL

Instala el servidor MySQL.

$ sudo dnf install mysql-server

Confirma la instalación comprobando la versión.

$ mysql --version
mysql  Ver 8.0.26 for Linux on x86_64 (Source distribution)

Activa e inicia el servicio MySQL.

$ sudo systemctl enable mysqld --now

Ejecuta el script de instalación segura.

$ sudo mysql_secure_installation

Recibirás varias indicaciones. La primera te preguntará si quieres instalar el Plugin de Validación de Contraseñas. Pulsa Y para instalar el plugin. Elige 2 como nivel de seguridad, lo que requerirá que tu contraseña tenga al menos 8 caracteres e incluya una mezcla de mayúsculas, minúsculas, números y caracteres especiales.

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: (Press Y)

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: (Type 2)

A continuación, se te pedirá que crees una contraseña de root fuerte. Asegúrate de que tu contraseña coincide con los requisitos del plugin Validar.

Please set the password for root here.

New password:

Re-enter new password:

A continuación, se te pedirán varias preguntas relacionadas con el aumento de la seguridad de la base de datos. Pulsa Y en cada pregunta.

Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : (Press Y)
Remove anonymous users? (Press y|Y for Yes, any other key for No) : (Press Y)
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : (Press Y)
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : (Press Y)
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : (Press Y)
Success.

All done!

Accede al shell de MariaDB.

$ sudo mysql

Crea una base de datos para Moodle.

mysql > CREATE DATABASE moodledb DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Crea un usuario SQL para acceder a la base de datos. Sustituye YourPassword23! por una contraseña de tu elección.

mysql > create user 'moodleuser'@'localhost' IDENTIFIED BY 'YourPassword23!';

Concede a moodleuser acceso a la base de datos.

mysql > GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,CREATE TEMPORARY TABLES,DROP,INDEX,ALTER ON moodledb.* TO 'moodleuser'@'localhost';

Recarga la tabla de privilegios.

mysql > FLUSH PRIVILEGES;

Sal del shell.

mysql > exit

Paso 5 – Instalar Nginx

Rocky Linux viene con una versión antigua de Nginx. Necesitas descargar el repositorio oficial de Nginx para instalar la última versión.

Crea y abre el archivo /etc/yum.repos.d/nginx.repo para crear el repositorio oficial de Nginx.

$ sudo nano /etc/yum.repos.d/nginx.repo

Pega en él el siguiente código.

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando te lo pida.

Instala el servidor Nginx.

$ sudo dnf install nginx

Verifica la instalación.

$ nginx -v
nginx version: nginx/1.22.0

Paso 6 – Instalar Moodle

Crea el directorio público para Moodle.

$ sudo mkdir /var/www/html/moodle

Da permiso al usuario conectado para acceder al directorio.

$ sudo chown -R $USER:$USER /var/www/html/moodle

Cambia al directorio público.

$ cd /var/www/html/moodle

Clona el repositorio de Moodle en Github.

$ git clone https://github.com/moodle/moodle.git .

Comprueba la lista de ramas disponibles.

$ git branch -a

Por ahora, MOODLE_400_STABLE es la última versión disponible. Crea una rama local llamada MOODLE_400_STABLE y configúrala para que siga la rama remota.

$ git branch --track MOODLE_400_STABLE origin/MOODLE_400_STABLE

Cambia a la rama local recién creada.

$ git checkout MOODLE_400_STABLE

Crea un directorio de datos para Moodle.

$ sudo mkdir /var/moodledata

Da los permisos adecuados al directorio de datos de Moodle.

$ sudo chown -R nginx /var/moodledata
$ sudo chmod -R 775 /var/moodledata

Da permisos de escritura al directorio de Moodle.

$ sudo chmod -R 755 /var/www/html/moodle

Paso 7 – Configurar Moodle

Cambia al directorio de Moodle.

$ cd /var/www/html/moodle

Copia el archivo de configuración de ejemplo para crear el archivo de configuración de Moodle.

$ cp config-dist.php config.php

Abre el archivo de configuración para editarlo.

$ nano config.php

Busca la sección de configuración de la base de datos y configura la base de datos donde se almacenarán todos los datos de Moodle, como se muestra a continuación.

$CFG->dbtype    = 'mysqli';      // 'pgsql', 'mariadb', 'mysqli', 'auroramysql', 'sqlsrv' or 'oci'
$CFG->dblibrary = 'native';     // 'native' only at the moment
$CFG->dbhost    = 'localhost';  // eg 'localhost' or 'db.isp.com' or IP
$CFG->dbname    = 'moodledb';     // database name, eg moodle
$CFG->dbuser    = 'moodleuser';   // your database username
$CFG->dbpass    = 'YourPassword23!';   // your database password
$CFG->prefix    = 'mdl_';       // prefix to use for all table names

Configura también la ubicación del nombre de dominio de Moodle y el directorio de datos.

$CFG->wwwroot   = 'https://moodle.example.com';
$CFG->dataroot  = '/var/moodledata';

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Paso 8 – Instalar SSL

La herramienta Certbot genera certificados SSL utilizando la API de Let’s Encrypt. Requiere el repositorio EPEL, pero como lo tenemos instalado, podemos proceder directamente. Emite el siguiente comando para instalarlo.

$ sudo dnf install certbot

Genera el certificado SSL.

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d moodle.example.com

El comando anterior descargará un certificado en el directorio /etc/letsencrypt/live/moodle.example.com de tu servidor.

Genera un certificado de grupo Diffie-Hellman.

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096

Crea un directorio raíz web de desafío para la renovación automática de Let’s Encrypt.

$ sudo mkdir -p /var/lib/letsencrypt

Crea un Cron Job para renovar el SSL. Se ejecutará cada día para comprobar el certificado y renovarlo si es necesario. Para ello, primero crea el archivo /etc/cron.daily/certbot-renew y ábrelo para editarlo.

$ sudo nano /etc/cron.daily/certbot-renew

Pega el siguiente código.

#!/bin/sh
certbot renew --cert-name moodle.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando te lo pida.

Cambia los permisos del archivo de la tarea para que sea ejecutable.

$ sudo chmod +x /etc/cron.daily/certbot-renew

Paso 9 – Configurar Nginx

Crea y abre el archivo /etc/nginx/conf.d/moodle.conf para editarlo.

$ sudo nano /etc/nginx/conf.d/moodle.conf

Pega en él el siguiente código.

# Redirect all non-encrypted to encrypted
server {
    listen 80;
    listen [::]:80;
    server_name moodle.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    
    server_name moodle.example.com;
    root   /var/www/html/moodle;
    index  index.php;

    ssl_certificate     /etc/letsencrypt/live/moodle.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/moodle.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/moodle.example.com/chain.pem;
    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;

    access_log /var/log/nginx/moodle.access.log main;
    error_log  /var/log/nginx/moodle.error.log;
    
    client_max_body_size 25M;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    
    location ~ ^(.+\.php)(.*)$ {
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        fastcgi_index index.php;
        fastcgi_pass unix:/run/php-fpm/www.sock;
        include /etc/nginx/mime.types;
        include fastcgi_params;
        fastcgi_param  PATH_INFO  $fastcgi_path_info;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
    
    # Hide all dot files but allow "Well-Known URIs" as per RFC 5785
	location ~ /\.(?!well-known).* {
    	return 404;
	}
 
	# This should be after the php fpm rule and very close to the last nginx ruleset.
	# Don't allow direct access to various internal files. See MDL-69333
	location ~ (/vendor/|/node_modules/|composer\.json|/readme|/README|readme\.txt|/upgrade\.txt|db/install\.xml|/fixtures/|/behat/|phpunit\.xml|\.lock|environment\.xml) {
     	deny all;
	    return 404;
	}
}

Una vez terminado, guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Abre el archivo /etc/nginx/nginx.conf para editarlo.

$ sudo nano /etc/nginx/nginx.conf

Añade la siguiente línea antes de la línea include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Comprueba la sintaxis del archivo de configuración de Nginx.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Activa e inicia el servicio Nginx para habilitar la nueva configuración.

$ sudo systemctl enable nginx --now

Si obtienes el siguiente error, lo más probable es que se deba a restricciones de SELinux.

nginx: [emerg] open() "/var/run/nginx.pid" failed (13: Permission denied)

Para solucionar el error, ejecuta los siguientes comandos.

$ sudo ausearch -c 'nginx' --raw | audit2allow -M my-nginx
$ sudo semodule -X 300 -i my-nginx.pp

Vuelve a iniciar el servicio Nginx.

$ sudo systemctl start nginx

Paso 10 – Configurar SELinux

Cambia el contexto de seguridad de los archivos del directorio web y de datos de Moodle.

$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/moodle'
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/moodledata'
$ sudo restorecon -Rv '/var/www/html/moodle'
$ sudo restorecon -Rv '/var/moodledata'

Configura SELinux para permitir las conexiones de red de Moodle.

$ sudo setsebool -P httpd_can_network_connect on

Paso 11 – Completar la instalación de Moodle

Abre la URL https://moodle.example.com en tu navegador y se te presentará la siguiente pantalla de bienvenida.

Página de bienvenida de Moodle

Pulsa el botón Continuar para proseguir. A continuación, el instalador comprobará los requisitos del sistema.

Requisitos del sistema Moodle

Si todo es correcto, desplázate hacia abajo y pulsa el botón Continuar para proceder a la instalación de los archivos y la configuración de la base de datos.

Página de instalación de Moodle

Haz clic en el botón Continuar una vez que se haya completado la instalación. A continuación, crea una cuenta de administrador rellenando los datos de la cuenta como se te pide.

Configuración de la cuenta de administrador de Moodle

Una vez terminado, desplázate hacia abajo en la página y haz clic en Actualizar perfil para continuar.

Actualización de la cuenta de administrador de Moodle

A continuación, se te pedirá que configures los ajustes de la página principal de Moodle.

Configuración de la página web de Moodle

Configúrala según tus necesidades y haz clic en Guardar cambios para pasar al panel de control de Moodle. A continuación, haz clic en el enlace Omitir de la parte inferior si no quieres registrar tu sitio Moodle en la empresa.

Panel de control de Moodle

Ahora puedes empezar a utilizar la plataforma de aprendizaje.

Conclusión

Con esto concluye nuestro tutorial sobre la instalación de la plataforma de aprendizaje Moodle en un servidor Rocky Linux 8. Si tienes alguna pregunta, publícala en los comentarios de abajo.

También te podría gustar...