Cómo instalar Moodle con Nginx y Let’s Encrypt SSL en Ubuntu 20.04

Moodle es un sistema de gestión del aprendizaje gratuito y de código abierto escrito en PHP. Ofrece a los tutores e instructores una forma de crear cursos para sus alumnos o estudiantes. Moodle proporciona un sistema integrado robusto y seguro y viene con un panel de control personalizado que ayuda a los usuarios a acceder a los cursos actuales, pasados o futuros, así como a revisar el trabajo pendiente. Lo utilizan muchas escuelas, universidades y organizaciones de todo el mundo y proporciona una mejor experiencia de aprendizaje. Ofrece un rico conjunto de funciones, como wiki, calificación, envío de tareas, cuestionarios en línea, tableros de discusión y mucho más.

En este tutorial, te mostraremos cómo instalar Moodle con el servidor web Nginx y Let’s Encrypt SSL en Ubuntu 20.04.

Requisitos previos

  • Un servidor con Ubuntu 20.04.
  • Un nombre de dominio válido apuntado con la IP de tu servidor.
  • Una contraseña de root configurada el servidor.

Cómo empezar

Antes de empezar, tendrás que actualizar los paquetes de tu sistema a la última versión. Puedes actualizarlos mediante el siguiente comando:

apt-get update -y

Una vez que tu servidor esté actualizado, puedes pasar al siguiente paso.

Instalar LEMP

En primer lugar, tendrás que instalar en tu sistema las librerías de Apache, MariaDB, PHP y otras librerías de PHP. Puedes instalarlos todos con el siguiente comando:

apt-get install nginx mariadb-server php-fpm php-common php-mysql php-gmp php-curl php-intl php-mbstring php-soap php-xmlrpc php-gd php-xml php-cli php-zip unzip git curl -y

Una vez instalados todos los paquetes, edita el archivo php.ini y cambia algunos ajustes:

nano /etc/php/7.4/fpm/php.ini

Cambia las siguientes líneas:

memory_limit = 256M
cgi.fix_pathinfo = 0
upload_max_filesize = 100M
max_execution_time = 360
date.timezone = America/Chicago

Guarda y cierra el archivo y luego reinicia el servicio PHP-FPM para aplicar los cambios:

systemctl restart php7.4-fpm

Una vez que hayas terminado, puedes pasar al siguiente paso.

Crear una base de datos

Moodle utiliza MySQL o MariaDB como base de datos, por lo que tendrás que crear una base de datos y un usuario para Moodle.

Primero, conéctate al shell de MySQL con el siguiente comando:

mysql

Una vez conectado, crea una base de datos y un usuario con el siguiente comando:

CREATE DATABASE moodledb;
CREATE USER 'moodle'@'localhost' IDENTIFIED BY 'password';

A continuación, concede todos los privilegios a la base de datos de Moodle con el siguiente comando:

GRANT ALL ON moodledb.* TO 'moodle'@'localhost' WITH GRANT OPTION;

A continuación, vacía los privilegios y sal de MySQL con el siguiente comando

FLUSH PRIVILEGES;
EXIT;

A continuación, edita el archivo de configuración por defecto de MariaDB y define el formato innodb_file_format:

nano /etc/mysql/mariadb.conf.d/50-server.cnf

Añade las siguientes líneas dentro de la sección [mysqld]:

[mysqld]
innodb_file_format = Barracuda
innodb_file_per_table = 1
innodb_large_prefix = ON

Guarda el archivo y luego reinicia el servicio MariaDB para aplicar los cambios:

systemctl restart mariadb

Instalar Moodle

Primero, cambia el directorio al directorio raíz de Apache y descarga la última versión de Moodle con el siguiente comando:

cd /var/www/html
git clone -b MOODLE_38_STABLE git://git.moodle.org/moodle.git moodle

Una vez completada la descarga, edita el config.php de Moodle y define el tipo de base de datos:

nano /var/www/html/moodle/config.php

Busca la siguiente línea:

$CFG->dbtype    = 'mysqli';

Y, sustitúyela por la siguiente línea:

$CFG->dbtype    = 'mariadb';

Guarda y cierra el archivo y luego crea un directorio de datos de Moodle estableciendo la propiedad y el permiso adecuados con el siguiente comando:

mkdir -p /var/www/html/moodledata
chown -R www-data:www-data /var/www/html/moodle
chmod -R 755 /var/www/html/*
chown www-data:www-data /var/www/html/moodledata

Una vez que hayas terminado, puedes pasar al siguiente paso.

Configurar Nginx para Moodle

A continuación, tendrás que crear un archivo de configuración del host virtual Nginx para alojar Moodle:

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

Añade las siguientes líneas:

server {
    listen 80;
    root /var/www/html/moodle;
    index  index.php index.html index.htm;
    server_name  moodle.example.com;

    client_max_body_size 100M;
    autoindex off;
    location / {
        try_files $uri $uri/ =404;
    }

    location /dataroot/ {
      internal;
      alias /var/www/html/moodledata/;
    }

    location ~ [^/].php(/|$) {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

Guarda y cierra el archivo y luego verifica que Nginx no tenga ningún error de sintaxis con el siguiente comando:

nginx -t

Deberías obtener la siguiente salida:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Por último, reinicia el servicio Nginx para aplicar los cambios:

systemctl restart nginx

En este punto, Nginx está configurado para alojar Moodle. Ahora puedes pasar al siguiente paso.

Acceder a la interfaz web de Moodle

Ahora, abre tu navegador web y accede a la interfaz web de Moodle utilizando la URL http://moodle.example.com. Deberías ver la página de instalación de Moodle:

Elige la lengua

Selecciona tu idioma y haz clic en Siguiente. Deberías ver la siguiente página:

Dirección web y ruta de acceso

Proporciona tu dirección web de Moodle, la ruta del directorio, la ruta del directorio de datos y haz clic en Siguiente. Deberías ver la siguiente página:

Controlador de la base de datos

Selecciona tu tipo de controlador de base de datos y haz clic en Siguiente. Deberías ver la siguiente página:

Detalles de MySQL

Proporciona el host de tu base de datos, el nombre de la base de datos, el nombre de usuario, la contraseña y haz clic en Siguiente. Deberías ver la siguiente página:

Confirmar la instalación

Haz clic en el botón Continuar para confirmar todas las condiciones. Deberías ver la siguiente página:

Comprobación del sistema

Asegúrate de que todas las extensiones de PHP necesarias están instaladas y haz clic en Continuar. Deberías ver la siguiente página:

Comprobación de la extensión PHP

Haz clic en Continuar. Deberías ver la siguiente página:

Establecer el nombre de usuario y la contraseña

Elige la configuración del país

Proporciona tu nombre de usuario, contraseña, correo electrónico, país, zona horaria y haz clic en Actualizar perfil. Deberías ver la siguiente página:

Configuración de la página de inicio

Proporciona tu configuración de la página principal y haz clic en el botón Guardar cambios para guardar los cambios.

Asegurar Moodle con Let’s Encrypt SSL

A continuación, tendrás que instalar la herramienta Certbot para descargar Let’s Encrypt SSL y configurar Nginx para que utilice este SSL.

Primero, instala Certbot con el siguiente comando:

apt-get install python3-certbot-nginx -y

Una vez instalado, ejecuta el siguiente comando para descargar todo el SSL y configurar Nginx para que lo utilice:

certbot --nginx -d moodle.example.com

Se te pedirá que proporciones una dirección de correo electrónico válida y que aceptes las condiciones del servicio, como se muestra a continuación:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): [email protected]

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for moodle.example.com
Waiting for verification...
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/nginx/conf.d/moodle.conf

A continuación, elige si quieres redirigir el tráfico HTTP a HTTPS, como se muestra a continuación:

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

Escribe 2 y pulsa Intro para continuar. Deberías ver el siguiente resultado:

Redirecting all traffic on port 80 to ssl in /etc/nginx/conf.d/moodle.conf

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://moodle.example.com

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=moodle.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/moodle.example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/moodle.example.com/privkey.pem
   Your cert will expire on 2021-05-23. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

 - We were unable to subscribe you the EFF mailing list because your
   e-mail address appears to be invalid. You can try again later by
   visiting https://act.eff.org.

Ahora puedes acceder al sitio web de Moodle utilizando la URL http://moodle.example.com

Conclusión

Enhorabuena! has instalado con éxito Moodle con Nginx y Let’s Encrypt SSL en Ubuntu 20.04. Ahora puedes crear tu propio Sistema de Gestión del Aprendizaje con Moodle fácilmente.

También te podría gustar...