Cómo instalar Moodle en CentOS 7

En esta entrada vamos a ver cómo instalar Moodle en CentOS 7 paso a paso, con lo que podremos trabajar con la plataforma de eLearning más usada en entornos de intranet, pero también muy utilizada a través de Internet. Con esta guía prepararás todos los requisitos básicos de tu servidor o VPS CentOS para que la instalación transcurra sin problemas, dejando el servicio listo para empezar a crear tus propios cursos y recursos online.

Antes de instalar Moodle en CentOS 7

Para poder seguir esta guía de instalación de Moodle en CentOS 7 necesitaremos cumplir una serie de requisitos:

  • Un sistema CentOS 7 actualizado.
  • Un entorno o pila tipo LAMP o LEMP, es decir, servicio web con PHP hasta la versión 8.0 y motor de bases de datos.
  • Acceso por terminal como root o usuario con permisos de sudo.
  • Conexión a Internet.

Si no dispones aún del entorno necesario puedes consultar nuestra guía de instalación de la pila LAMP en CentOS 7, o la guía de instalación de PostgreSQL en CentOS 7.

También necesitaremos algunas herramientas de consola que podemos instalar desde los repositorios de CentOS 7, para lo que actualizamos las listas de paquetes:

~$ sudo yum update

Y ya podemos instalar las herramientas:

~$ sudo yum install -y policycoreutils-python wget

Cómo descargar Moodle para CentOS 7

Vamos a descargar Moodle para CentOS 7, concretamente la última versión disponible en su sitio web oficial:

como instalar moodle en centos 7

En la sección principal de la zona de descargas del stio de Moodle encontraremos los enlaces de la última versión disponible (https://download.moodle.org/releases/latest/). Siguiendo el enlace anterior llegaremos a los enlaces de los paquetes de que disponemos para descargar cada versión de Moodle:

descargas de moodle para centos 7

Dependiendo de en qué momento accedamos a esta página veremos que junto a la versión oficial estable inicial se encuentra una versión más actualizada que la original, y es la que debemos descargar, ya que contiene actualizaciones y correcciones.

Disponemos de paquetes en formato .tgz y .zip. En esta guía usaremos el paquete .tgz. Al pinchar el enlace correspondiente nos lleva a la página que inicia automáticamente la descarga, pero también ofrece un enlace por si la descarga no se iniciara.

Si tienes abierto el navegador en la máquina CentOS que estás configurando te puede interesar la descarga automática. En mi caso copiaré el enlace alternativo para usarlo en la terminal remota con la que administro la máquina CentOS 7. De hecho, descargo el paquete con el comando wget:

~$ wget https://download.moodle.org/download.php/direct/stable400/moodle-latest-400.tgz

Cómo instalar Moodle en CentOS 7

Moodle se instala físicamente sobre dos carpetas, una para los archivos de la aplicación web y otra para los datos. Esta última debe ser accesible por el servidor web en modo lectura/escritura, pero no debe estar disponible vía web.

En esta guía instalaremos Moodle como parte del sitio web por defecto de CentOS 7, bajo la ruta /var/www/html/moodle/, siendo /var/www/html/moodle/ la carpeta de archivos web y /var/www/moodledata/ la carpeta de datos.

Descomprimimos el paquete de Moodle que acabamos de descargar en su ubicación final:

~$ sudo tar xf moodle-latest-400.tgz -C /var/www/html/

Para que el servidor web pueda escribir en la nueva carpeta que se acaba de crear, cambiaremos la propiedad de esta al usuario y grupo al con el que se ejecuta el servidor web (apache para Apache en CentOS 7):

~$ sudo chown -R apache: /var/www/html/moodle/

Ahora crearemos el directorio de datos de Moodle:

~$ sudo mkdir /var/www/moodledata

Igualmente cambiaremos el propietario:

~$ sudo chown apache: /var/www/moodledata/

Preparación de PHP

Aunque partimos de una pila LAMP, Moodle requiere una larga lista de módulos de PHP presentes en el sistema, por lo que debemos asegurarnos de tenerlos instalados. Y eso es lo que vamos a hacer a continuación.

Descargamos e instalamos todos los módulos de PHP necesarios mediante yum:

~$ sudo yum -y install php-curl php-mbstring php-opcache php-xml php-gd php-intl php-xmlrpc php-soap php-pecl-zip

Además, es importante tener instalada la extensión correspondiente al servicio de bases de datos que vayamos a usar, en el caso de MariaDB/MySQL:

~$ sudo yum -y install php-mysql

Y en el caso de PostgreSQL:

~$ sudo yum -y install php-pgsql

Por último es también necesario realizar un ajuse en el archivo php.ini:

~$ sudo nano /etc/php.ini

Buscaremos la directiva max_input_vars en el contenido del archivo:

...
;max_input_vars = 1000
...

Está desactivada por el carácter ; al inicio de línea, que eliminaremos, y cambiaremos el valor por defecto por 5000:

...
max_input_vars = 5000
...

Ya podemos guardar y cerrar el archivo.

Para que todos estos cambios se apliquen, recargamos la configuración del servidor web:

~$ sudo systemctl reload httpd

Preparación de la base de datos

Moodle necesita acceder al sistema de bases de datos para manejar y almacenar los datos del servicio. Por este motivo necesitaremos tener preparados una base de datos en exclusiva para Moodle y un usuario con suficientes privilegios para administrarla. Vamos a ver los dos tipos de bases de datos más usadas en Moodle para CentOS 7.

MariaDB/MySQL

Si usas MariaDB procedente de los repositorios de CentOS 7, Moodle necesitará algunos ajustes:

  • El uso del sistema de archivos Barracuda para las tablas.
  • La opción innodb_file_per_table debe estar activada.
  • Que la opción innodb_large_prefix esté activada también.

Haremos estos cambios editando el archivo de configuración del servidor (recordamos que en esta guía usamos MariaDB, para MySQL u otras versiones de MariaDB la ruta del archivo puede ser distinta):

~$ sudo nano /etc/my.cnf.d/server.cnf

En la sección server añadiremos estas líneas:

...
[server]
...
innodb_file_format = Barracuda
innodb_file_per_table = 1
innodb_large_prefix = on
...

Y reiniciamos el servicio:

~$ sudo systemctl restart mariadb

Solucionada la configuración general, es el momento de crear la base de datos, el usuario con su contraseña y los permisos de este sobre aquella. Conectamos con nuestro usuario administrador de MariaDB/MySQL:

~$ mysql -u root -p

Empezaremos creando la base de datos:

> create database moodle charset utf8mb4 collate utf8mb4_unicode_ci;

Para MySQL 5.x ó MariaDB, creamos el usuario así:

> create user moodle@localhost identified by 'XXXXXXXX';

Pero para MySQL 8 nos aseguramos de que use el plugin compatible:

> create user moodle@localhost identified with mysql_native_password by 'XXXXXXXX';

En cualquier caso, concedemos al usuario los permisos necesarios sobre la base de datos:

> grant all privileges on moodle.* to moodle@localhost;

Y ya podemos cerrar el cliente:

> exit

Anotaremos el nombre de la base de datos, el usuario y la contraseña para utilizarlos más adelante.

PostgreSQL

Para el caso de este motor de bases de datos crearemos un nuevo rol con contraseña:

~$ sudo -iu postgres createuser -P moodle

Y crearemos su base de datos asociada:

~$ sudo -iu postgres createdb moodle -O moodle

Todo listo para continuar.

SELinux

En el caso de tener activado SELinux en CentOS 7, lo que suele ocurrir por defecto, no basta con haber ajustado los permisos ordinarios de los archivos y directorios de Moodle. Como el contexto de estos archivos y carpetas es de sólo lectura, es necesario definir nuevos contextos de lectura/escritura para que SELinux permita al servidor web escribir además de leer.

Definimos el contexto para el directorio de instalación de Moodle:

~$ sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/moodle(/.*)?"

Aplicamos este nuevo contexto:

~$ sudo restorecon -R /var/www/html/moodle/

Definimos también el contexto para SELinux para la carpeta de datos de Moodle:

~$ sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/moodledata(/.*)?"

Si se produce algún aviso puedes ignorarlo tranquilamente.

Y aplicamos también este contexto:

~$ sudo restorecon /var/www/moodledata/

Finalmente, para conectar desde Moodle a algunos servicios de bases de datos (como PostgreSQL) es necesario dar permiso explícito:

~$ sudo setsebool -P httpd_can_network_connect_db on

El instalador web de Moodle en CentOS 7

Ya podemos introducir en el navegador la URL que corresponda, según hayamos decidido integrar Moodle en nuestro servicio web. En este ejemplo, el servidor CentOS 7 es accesible desde el dominio centos7.local.lan, así que la URL http://centos7.local.lan/moodle servirá:

como instalar moodle en centos 7

En esta primera pantalla elegimos el idioma de la instalación y continuamos. La siguiente pantalla nos pide confirmar las rutas de acceso e instalación de Moodle:

instalar moodle en centos 7

En principio no hay que cambiar ningún dato, a no ser que hayas creado el directorio de datos de Moodle en otra ruta. Lo mejor es dejar todo como está y continuar.

En la siguiente pantalla tenemos que seleccionar el controlador de base de datos con que trabajará Moodle:

instalacion de moodle en centos 7

Podemos ver que en el desplegable aparecen por un lado las opciones disponibles y por otro las no disponibles en nuestro sistema. En este ejemplo seleccionamos el controlador MariaDB, pero hay opciones para PostgreSQL Server, MySQL, etc.

Llega el momento de suministrar los datos de conexión al sistema de bases de datos:

instalador de moodle para centos 7

Recuperamos los datos de conexión que creamos anteriormente, y los introducimos en el formulario:  el nombre de la base de datos, el usuario que la administra y su correspondiente clave. El resto de valores los dejamos por defecto y continuamos.

Si hemos sido cuidadosos durante la concesión de permisos del servidor web, se creará automáticamente toda la configuración de Moodle y quedará almacenada.

Una nueva pantalla nos informará sobre los términos de la licencia y tendremos que confirmar que hemos leído y comprendido dichos términos:

instalando moodle en centos 7

Continuamos y llegamos a una pantalla de comprobación de requisitos. Si has instalado todo lo necesario y realizado todos los cambios de configuración, obtendrás una pantalla parecida a esta:

configurar centos 7 para moodle

En este caso, el único aviso es el relativo al protocolo HTTPS, que no estamos usando por simplicidad de la guía. En un entorno real de trabajo debes configurar el servidor web por seguridad con cifrado SSL.

Continuamos y ahora es cuando comienza la verdadera instalación. Una nueva pantalla irá informando sobre el resultado de la instalación de todos los módulos y componentes de Moodle:

Todo debería marchar sin problemas, y en la parte inferior de la página podemos encontrar el botón para continuar.

En la siguiente pantalla es el turno de configurar el usuario administrador del sistema:

Introduciremos en el formulario toda la información obligatoria y aquella adicional que consideremos oportuna y actualizaremos los cambios.

El siguiente formulario recoge información general sobre nuestro nuevo sitio Moodle:

moodle para centos 7

Aunque no se indica expresamente, la dirección de correo-e para el contacto de soporte es obligatoria, así que no olvides incluirla. Esta dirección se mostrará a todos los usuarios de tu plataforma.

Actualizada dicha información llegaremos al área personal y de administración de nuestro nuevo sitio Moodle en CentOS 7, con la sesión del administrador iniciada automáticamente:

moodle en centos 7

Con esto ya tenemos Moodle instalado en CentOS 7 y comienza la ardua tarea de creación de cursos, gestión de usuarios, etc.

Configuración de Cron

Debemos crear una tarea para el mantenimiento en segundo plano de la plataforma:

~$ sudo nano /etc/cron.d/moodle

Con la siguiente línea como contenido:

*/1 * * * * apache /usr/bin/php /var/www/html/moodle/admin/cli/cron.php

Una vez guardado este archivo, la tarea se ejecutará cada minuto. Puede parecer un intervalo muy corto, pero es lo que especifica Moodle.

Moodle y GhostScript en CentOS 7

Si quieres trabajar con algunas extensiones como «Anotación PDF» es necesario instalar GhostScript en CentOS 7, para ello instalaremos el paquete GhostScript:

~$ sudo yum install -y ghostscript

Una vez instalada esta herramienta, podemos comprobar su integración en Moodle visitando la sección «Área personal / Administración del sitio / Extensiones / Módulos de actividad / Tarea / Extensiones de retroalimentación / Anotar PDF» y seguiremos el enlace «Prueba del PATH de ghostscript«:

La prueba debería ser exitosa.

Conclusión

Ahora que ya sabes cómo instalar Moodle en CentOS 7 tienes a tu servicio una de las plataformas de eLearning más reconocidas del panorama.

Todo lo relativo a administración y uso de Moodle queda fuera del alcance de este tutorial. Esta es una materia densa y extensa para la que hay muchos recursos, independientes del sistema operativo sobre el que se aloje Moodle.

En caso de dudas, sugerencias, notificación de errores, etc. sobre esta guía, déjame un comentario.

¡Apoya este sitio!

El proceso de instalar y configurar Moodle en CentOS 7 puede llegar a ser una auténtica locura, pero si has llegado hasta aquí te habrás ahorrado unos cuantos dolores de cabeza. Si quieres agradecérnoslo, cualquier mínima contribución es bienvenida.

Puedes ayudarnos dejando una propina de tan sólo 1 $ con PayPal:

O, si te sientes especialmente agradecido, puedes invitarnos a un café:

¡Gracias!

Valora esta entrada

5/5 - (5 votos)

34 comentarios en «Cómo instalar Moodle en CentOS 7»

  1. Tengo este error para instalar:

    Deprecated: Return type of moodle_recordset::rewind() should either be compatible with Iterator::rewind(): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /var/www/html/moodle/lib/dml/moodle_recordset.php on line 61

    Fatal error: Method lang_string::__set_state() must take exactly 1 argument in /var/www/html/moodle/lib/moodlelib.php on line 10706

    Responder
  2. Saludos para todas y todos.

    Soy nuevo en este mundo de Moodle.

    Pero me parece que este tutorial está de lujo. Muy bien explicado y va llevando a uno paso a paso.
    En ese sentido, he cumplido a pie de puntillas lo descrito, pero al momento de ejecutar el instalador web de Moodle me aparece el siguiente error:

    Deprecated: Return type of moodle_recordset::rewind() should either be compatible with Iterator::rewind(): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /var/www/html/moodle/lib/dml/moodle_recordset.php on line 61

    Fatal error: Type of xml_format_exception::$line must be int (as in class Exception) in /var/www/html/moodle/lib/xmlize.php on line 0

    ¿Pudieran darme sus aportes a la resolución de este problema?

    Héctor Delgado

    Responder
    • Hola, Héctor. La versión actual de Moodle funciona con la versión 8.0 como máximo de PHP. Imagino que estás probando con la 8.1 ó superior, que aún no son compatibles.

      Responder
  3. Hola. Tengo este problema, estoy con MariaDB y ya hice con la guía todo bien, pero al momento de llegar en ajuste de base de datos me sale el siguiente error y no sé qué hacer:

    Error:La conexión con la base de datos falló

    Es posible que la base de datos esté sobrecargada o no funcione correctamente.

    El administrador del sitio debe comprobar que los detalles de la base de datos han sido correctamente especificados en config.php
    {$a}

    Warning: mysqli::__construct(): (HY000/2002): Permission denied in /var/www/html/moodle/lib/dml/mysqli_native_moodle_database.php on line 83

    Responder
    • Hola, Edgar. A ver si es algo de esto:

      • ¿Has mirado el registro de errores del servicio web? Suele mostrar información adicional que puede dar alguna pista.
      • ¿Has elegido el tipo de bases de datos MariaDB? Elegir MySQL si se tiene MariaDB o viceversa puede provocar problemas.
      • ¿Has comprobado que utilizas el mismo usuario y contraseña que los que creaste? Intenta conectar con el cliente de consola mysql usando dicho usuario y contraseña.
      • Utiliza 127.0.0.1 en lugar de localhost en la dirección del servicio de bases de datos.
      Responder
  4. Es efectivamente la guía más completa y que funciona este 2021. Mucha suerte y gracias, ya estaba a punto de pagarle a alguien para que me enseñe a levantar este servidor.

    Responder
  5. Hola, gracias por el tutorial.

    Quisiera saber cómo hago para crear varios sitios en el mismo Moodle. Me explico, tenemos una fundación con varios directorios (Recursos Humanos, Ambiental, Cultural), donde tenemos diferentes formaciones según su categoría. Quiero crear un sitio distinto para cada uno de ellos donde cada uno tenga su dirección (enlace propio), ¿cómo podria hacer esto?

    De antemano muchas gracias.

    Responder
    • Hola, Andrés David. Hasta donde sé Moodle no incorpora esa funcionalidad directamente y quienes se enfrentan a realizar personalizaciones de ese tipo deben tener amplios conocimientos de programación, ya que implica realizar modificaciones en el código. Lo más sencillo sería usar una única implementación y usar las características incluidas en forma de distintos curos, etc.

      En el caso de necesitar sí o sí distintos sitios Moodle lo más sencillo es realizar distintas instalaciones, cada una en su propio directorio, con su propia carpeta de datos y su propia base de datos (o la misma base de datos usando distintos prefijos para la base de datos), de modo que se obtendrán distinas direcciones o URL.

      Responder
  6. Excelente guía, amigo mío, ¡muchas gracias por el aporte!
    Saludos desde Colombia

    Algo último estoy trabajando en un proyecto grande dictando cursos desde Moodle en mi organización pero el acceso a este sólo se puede realizar desde la red de la organización. ¿Cómo podría hacer para hacerlo visible y accesible desde cualquier parte del mundo y desde redes de Internet externas a la de la organización?

    En pocas palabras que mis estudiantes puedan acceder a su Moodle desde la comodidad de sus casas sin necesidad de tener que estar conectados a la red de la organización para acceder.

    Responder
    • Tendrías que redirigir los puertos 80 y 443 en el router de vuestra red a los puertos equivalentes del servidor CentOS 7 en el que corre Moodle. El procedimiento variará dependiendo del modelo y sistema del router, hay bastante información en la Red.

      Responder
  7. Buen día, una duda, logré instalar Moodle, logré crear un curso y todo excelente, pero me encuentro en la necesidad de instalar un certificado de certbot. He intentado de mil maneras y me trabo en el host virtual, hice el cambio del archivo config.php sin éxito. ¿Alguien tiene una guía de cómo generar dicho certificado? Les agradecería.

    Responder
  8. ¡Hola! Tengo una duda, ¿cómo puedo saber en qué URL puedo comprobar que el servicio está funcionando? En el tutorial especifica que es en centos7.local.lan/moodle, pero no sé de dónde salió eso o dónde comprobar el mío. Un saludo.

    Responder
    • Hola, Juanma. En el tutorial especifico que ese dominio es el utilizado en la máquina CentOS 7 de ejemplo sobre la que se ha desarrollado el tutorial. En tu caso será el nombre DNS, dominio, dirección IP, etc. de tu máquina CentOS 7. Eso sí, si la instancia de Moodle que estás instalando va a ser accesible desde otras máquinas interesa que la dirección desde la que instalas sea la misma que la que usarán los visitantes posteriormente.

      Responder
    • ¡Hola, Byron! ¿Debo entender que ya has instalado Moodle usando MySQL, y que una vez instalado tienes que remplazar MySQL por MariaDB y quieres que Moodle siga funcionando, esta vez sobre MariaDB?

      Responder
  9. Listo ya lo logré arreglar, el problema estaba en el archivo /var/lib/pgsql/9.3/data/pg_hba.conf, cambié:

    # IPv4 local connections:
    host all all 127.0.0.1/32 ident
    # IPv6 local connections:
    host all all ::1/128 ident

    Por:

    # IPv4 local connections:
    host all all 127.0.0.1/32 md5
    # IPv6 local connections:
    host all all ::1/128 md5

    Y funcionó.

    Responder
  10. Muchas gracias por tu respuesta, efectivamente el problema era que no tenía instalado el PHP, pero ya lo instalé, ahora el error me aparece en la configuración con la base de datos, estoy trabajando con PostgreSQL, primero aparecía que no tenía instalado php-pgsql, lo instalé y ahora el error dice que no se puede conectar con la base de datos, comprobé que existiera el usuario y que estuviera conectado a la base de datos, pero la verdad no sé cuál es el problema, este es el error que aparece:

    Error:La conexión con la base de datos falló

    Es posible que la base de datos esté sobrecargada o no funcione correctamente.

    El administrador del sitio debe comprobar que los detalles de la base de datos han sido correctamente especificados en config.php
    {$a}

    Warning: pg_connect(): Unable to connect to PostgreSQL server: FATAL: la autentificación Ident falló para el usuario «moodle» in /var/www/html/moodle/lib/dml/pgsql_native_moodle_database.php on line 188

    Muchas gracias por tu ayuda.

    Responder
  11. Entro a la url y me muestra los archivos que están en la carpeta Moodle, ya revisé si el servicio Apache está funcionando, si ejecuta otros archivos php

    Responder
    • ¡Hola, Ernesto! Parece que algo no está bien con tu configuración de PHP para Apache. Dices que el navegador te muestra los archivos de la carpeta de Moodle, por tanto entre estos archivos debería figurar uno llamado index.php. ¿Qué ocurre si abres este archivo? Si se muestra el código PHP o el navegador lo abre para descarga, PHP no está bien configurado. Si se muestra el instalador de Moodle entonces no tienes conofigurados los archivos index.php, como archivos índice en Apache. Ya nos contarás qué sucedió.

      Responder
    • ¿Qué servicio web usas?

      ¿Has descomprimido el archivo de Moodle en la carpeta /var/www/html/? Comprueba cuál es su contenido, para ver si existe la carpeta /var/www/html/moodle/.

      Responder
  12. Excelente tutorial, me funcionó, gracias por la ayuda.
    Tengo una consulta, qué configuración adicional a este tutorial debo realizar realizar en el servidor Moodle que lo tengo en forma local, para que pueda ser accesible desde Internet.
    ¿O es cuestión de configurar el port forwarding en mi router?

    Responder
    • Efectivamente, necesitarías IP fija o IP variable con sistema de DNS dinámico, dominio, etc. y además lo que mencionas del router (abrir puertos y redirigir al servidor CentOS 7 con Moodle).

      Responder

Deja un comentario

Ads Blocker Image Powered by Code Help Pro

¡Detectado un bloqueador de publicidad!

Hemos detectado que está usando extensiones para bloquear anuncios prublicitarios. Por favor, ayúdenos desactivando dicho bloqueador para este sitio web. ¡Gracias!