Cómo instalar Moodle en CentOS 8

En esta entrada vamos a ver cómo instalar Moodle en CentOS 8 / CentOS Stream 8 paso a paso, de modo que puedas montar una de las plataformas de eLearning más aclamadas en tu servidor o VPS CentOS.

Antes de instalar Moodle en CentOS 8

Si quieres seguir esta guía de instalación de Moodle en CentOS 8 debes partir necesariamente de los siguientes requisitos básicos:

  • Una máquina CentOS 8 / CentOS Stream 8 actualizada.
  • Una pila tipo LAMP o LEMP (servidor web con PHP hasta la versión 8.0 y servicio de bases de datos).
  • Acceso a consola de comandos como root o un usuario con permisos de sudo.
  • Conexión a Internet.

En caso de que aún no dispongas del entorno necesario, podría interesarte consulta nuestra guía de instalación de la pila LAMP en CentOS 8. Tienes distintas posibilidades para integrar Moodle en el servicio web de CentOS 8, tanto como el sitio por defecto como un servidor virtual independiente, aunque en este tutorial integraremos la aplicación como parte del sitio por defecto. Es muy importante trabajar con HTTPS, aunque para facilitar el tutorial trabajamos excepcionalmente con HTTP.

También necesitaremos algunas utilidades que podemos obtener desde los repositorios de CentOS 8, por lo que actualizamos las listas de paquetes:

~$ sudo yum update

E instalamos dichas herramientas:

~$ sudo yum install -y policycoreutils-python-utils tar wget

Cómo descargar Moodle para CentOS 8

Puesto que no hay paquetes en los repositorios de la distribución, tenemos que descargar Moodle para CentOS 8 desde su página oficial.

como descargar moodle para centos 8 / centos stream 8

Visitando la zona de descargas encontraremos el enlace de acceso a la última versión estable de Moodle:

descargas de moodle para centos 8 / centos stream 8

Encontraremos Moodle en paquetes con distinto formato de compresión, una versión .tgz y otra .zip. No son enlaces directos, sino que nos conducen a una página de descarga automática. Si en el momento de acceder existe una versión finalizada en +, es la más actualizada, puesto que se le habrán aplicado los parches disponibles desde el lanzamiento de la versión actual.

Puedes descargar el paquete desde el navegador, en este ejemplo copiaremos en enlace y descargaremos el paquete desde consola:

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

Cómo instalar Moodle en CentOS 8

Antes de poder instalar Moodle en CentOS 8 hay que realizar una serie de preparativos del sistema para que el instalador no encuentre obstáculos posteriormente.

Preparativos de la base de datos

Como muchas aplicaciones web, Moodle se apoya sobre un servicio de bases de datos. En este tutorial explicamos cómo preparar los más usados en CentOS 8 y Moodle.

MariaDB/MySQL

Accedemos a MariaDB o MySQL con nuestro usuario administrador, root, etc. según como lo tengamos configurado, con el cliente de consola mysql y el usuario administrador que usemos:

~$ mysql -u root -p

Empezamos creando la base de datos:

> create database moodle_db charset utf8mb4 collate utf8mb4_unicode_ci;

Creamos el usuario sólo para acceso local, con su contraseña. En MySQL 5.x y MariaDB lo haríamos así:

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

En MySQL 8.x, sin embargo, es importante especificar además el plugin de autenticación del usuario:

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

Concedemos los permisos al usuario sobre la base de datos:

> grant all privileges on moodle_db.* to moodle_user@localhost;

Refrescamos la tabla de permisos y salimos del cliente:

> exit

PostgreSQL

Creamos un nuevo rol con contraseña:

~$ sudo -iu postgres createuser moodle -P

Y creamos la base de datos asociada sobre la que trabajará Moodle:

~$ sudo -iu postgres createdb moodle -O moodle

Eso es todo lo que necesitamos.

Preparativos de PHP

Moodle requiere que tengamos instaladas ciertas extensiones de PHP en CentOS 8, como pueden ser curl, gd, intl, json, mbstring, opcache, soap, xml, xmlrpc y zip.

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

Adicionalmente editaremos el archivo php.ini para realizar algún ajuste:

~$ sudo nano /etc/php.ini

Buscamos la directiva max_input_vars:

...
;max_input_vars = 1000
...

Activamos esta directiva borrando el carácter ; al inicio de línea y le damos el valor requerido:

...
max_input_vars = 5000
...

Guardamos los cambios y recargamos el servicio PHP para aplicar la nueva configuración:

~$ sudo systemctl reload php-fpm

Preparativos de los archivos

Ya podemos descomprimir el paquete de Moodle que descargamos anteriormente en su ubicación definitiva:

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

Además crearemos un directorio para datos de Moodle en la ruta por defecto que se usa en la instalación:

~$ sudo mkdir /var/www/moodledata

Para que Moodle pueda escribir en este directorio (a través del servidor web), cambiaremos el propietario al usuario con el que corre el servicio (apache en el caso de Apache):

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

Además, el instalador de Moodle debe poder guardar la configuración en el directorio de la aplicación, así que seguiremos una aproximación similar, cambiando la propiedad del directorio al usuario y grupo que usa el servidor web:

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

Preparativos de SELinux

Si tenemos SELinux activado en CentOS 8, como ocurre por defecto, debemos realizar una serie de ajustes.

Además de haberle dado permisos de escritura, el directorio de Moodle debe tener contexto de lectura/escritura para el servidor web, así que definiremos este tipo de contexto:

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

Y lo mismo ocurre con el directorio de datos de Moodle:

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

Definidos los nuevos contextos, aplicamos el del directorio de Moodle:

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

Y el que le corresponde al directorio de datos:

~$ sudo restorecon /var/www/moodledata/

Por otro lado, el servicio web y PHP deben poder conectar a Internet para descargar módulos y paquetes extra de Moodle, como los paquetes de idioma:

~$ sudo setsebool -P httpd_can_network_connect on

Apache

En el caso de que instales Moodle en una máquina no muy veloz, para pruebas, etc. es posible que durante la instalación se superen los tiempos de espera entre el servidor web y el servicio PHP, lo que dejaría la instalación a medias. Para evitarlo se puede configurar el tiempo máximo de espera mediante una configuración adicional de Apache, que crearemos en un archivo independiente:

~$ sudo nano /etc/httpd/conf.d/moodle.conf

Con el siguiente contenido:

<IfModule proxy_fcgi_module>
        Timeout 180
        ProxyTimeout 180
</IfModule>

Guardados los cambios y cerrado el archivo, habrá que recargar la configuración del servicio web:

~$ sudo systemctl reload httpd

Puedes alargar o acortar los tiempos de espera según tus propias necesidades, pero si la instalación falla, además de reconfigurar estos tiempos, habrá que borrar los directorios de Moodle, la base de datos e iniciar de nuevo el proceso.

Instalación web

Accedemos a la URL del sitio según la hayamos configurado y aparecerá el instalador web de Moodle.

Por ejemplo, la máquina en la que realizamos este tutorial es accesible en el dominio centos8.local.lan, así que teniendo en cuenta que hemos instalado Moodle en la ruta moodle/ de la raíz de documentos del sitio web por defecto, usaremos http://centos8.local.lan/moodle como URL.

Empezaremos eligiendo el idioma de la instalación y del sitio Moodle:

como instalar moodle en centos 8 / centos stream 8

Seleccionamos el idioma que nos interese y continuamos.

Tendremos que confirmar las rutas de los directorios de Moodle, aunque sólo podemos modificar, si es necesario, el directorio de datos:

instalar moodle en centos 8 / centos stream 8

El instalador muestra los controladores de bases de datos disponibles, si hay varios en la lista desplegable elegiremos el apropiado para nuestro sistema:

instalacion de moodle en centos 8 / centos stream 8

A continuación debemos introducir los datos de conexión, tal como los preparamos anteriormente:

instalador de moodle en centos 8 / centos stream 8

El instalador guardará su configuración y creará la infraestructura de bases de datos necesaria.

Antes de continuar, tenemos que confirmar que estamos de acuerdo con las condiciones de la licencia de Moodle:

instalando moodle en centos 8 / centos stream 8

Una página de comprobación de requisitos nos mostrará si nuestro sistema CentOS 8 cumple con todos los requerimientos necesarios para el funcionamiento de Moodle:

configuracion de centos 8 para instalar moodle

Si no cumples alguno, puedes intentar satisfacerlo y volver a recargar la página de requisitos.

Comenzará la instalación y se irá generando una larga lista de tareas y el resultado de las mismas:

Al terminar la instalación en sí, continuaremos completando el perfil del administrador del sitio:

Y también los datos del propio sitio Moodle:

moodle para centos 8 / centos stream 8

La dirección de correo electrónico para el contacto de soporte es obligatoria, aunque no aparezca marcada como tal.

Cuando por fin termina la instalación, entramos directamente en el área personal con la sesión de administrador automáticamente iniciada:

moodle en centos 8 / centos stream 8

¡Nuestro nuevo sitio Moodle ya está listo para empezar a trabajar con él!

Servicio Cron

Para que la plataforma pueda realizar sus tareas de mantenimiento en segundo plano, crearemos una tarea del servicio Cron dedicada a ello:

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

El contenido será la siguiente línea:

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

Guardamos el archivo y la tarea será ejecutada en el intervalo configurado, es decir, cada minuto, según la configuración recomendada por Moodle.

Ghostscript para Moodle en CentOS 8

Para poder trabajar con edición de documentos PDF en nuestro nuevo sitio Moodle sobre CentOS 8 debemos instalar el paquete ghostscript:

~$ sudo yum install -y ghostscript

Tras la descarga e instalación podremos comprobar desde el panel de control que ha quedado correctamente instalado, visitando la solapa «Extensiones» de la sección «Administración del sitio«, buscando el apartado «Módulos de actividad» y dentro de este «Anotar PDF«. En esta última página encontraremos un enlace «Prueba del PATH de ghostscript«, que al visitarlo mostrará el resultado de la prueba:

ghostscript para moodle en centos 8 / centos stream 8

Unoconv para Moodle en CentOS 8

Un complemento que se suele utilizar para la conversión de diversos formatos de documentos ofimáticos es Unoconv, que instalaremos desde los repositorios de CentOS 8:

~$ sudo yum install -y unoconv

Unoconv es una herramienta de línea de comandos, pero la mejor forma de integrarlo en Moodle es convertirlo en un servicio, para lo que crearemos su correspondiente archivo de configuración de Systemd:

~$ sudo nano /etc/systemd/system/unoconv.service

El contenido será algo como esto:

[Unit]
Description=Unoconv listener para CentOS 8
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=fork
Environment="UNO_PATH=/usr/lib64/libreoffice/program"
ExecStart=/usr/bin/unoconv --listener

[Install]
WantedBy=multi-user.target

Guardamos el archivo y ya tendremos disponible el servicio unoconv o unoconv.service en CentOS 8.

Para que el servicio esté disponible en cada arranque de CentOS 8, lo habilitamos:

~$ sudo systemctl enable unoconv

Y para arrancar el servicio por primera vez, lo haremos de forma manual:

~$ sudo systemctl start unoconv

Podemos comprobar en cualquier momento el estado del servicio con el comando systemctl status unoconv:

En caso de que SELinux esté activado, habrá que permitir al servicio web el lanzamiento de los comandos necesarios para trabajar con Unoconv:

~$ sudo setsebool -P httpd_execmem on

Ya desde Moodle, en el área personal del usuario administrador accedemos a «Administración del sitio«, solapa «Extensiones«, y buscaremos el apartado «Convertidores de documentos«, donde seguiremos el enlace «Gestionar convertidores de documentos«.

Activamos Unoconv con el icono en forma de ojo:

configurar unoconv en moodle para centos 8 / centos 8 stream

Seguidamente abrimos el correspondiente enlace «Configuración«, que nos mostrará el resultado de la comprobación de la ruta de Unoconv en el sistema, y nos ofrecerá una prueba del complemento que realizaremos siguiendo el enlace «Probar la ruta de unoconv«.

unoconv en moodle sobre centos 8 / centos stream 8

Al realizar la prueba se convertirá un documento de ejemplo, que podremos descargar en formato PDF con el enlace «Download the coverted pdf file«:

unoconv para moodle en centos 8 / centos stream 8

Y todo funciona como era esperable.

Conclusión

Ahora ya sabes cómo preparar tu sistema CentOS 8 para instalar Moodle, de modo que puedes dejar lista esta plataforma de eLearning para empezar a trabajar con ella, sobre tu servidor o VPS.

¡Apoya comoinstalar.me!

Y si esta guía de instalación de Moodle en CentOS 8 te ha resultado útil, quizás quieras realizar una mínima aportación para el mantenimiento de este sitio y la creación de más guías de CentOS 8 y Moodle.

Puedes ayudarnos dejando 1 $ de propina en PayPal:

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

¡Gracias!

¿Dudas, preguntas, sugerencias?

Si tienes dudas, preguntas, sugerencias, etc. siempre puedes dejar un comentario. Los comentarios se moderan para intentar luchar contra el SPAM, pero se revisan prácticamente a diario.

Valora esta entrada

5/5 - (3 votos)

21 comentarios en «Cómo instalar Moodle en CentOS 8»

  1. Lo sentimos, config table no contiene la versión. No puede continuar.

    Más información sobre este error

    Generalmente no es posible recuperarse de los errores encontrados durante la instalación; es posible que tenga que crear una nueva base de datos o usar un prefijo de base de datos diferente si desea volver a intentar hacer la instalación.

    Responder
    • Madre mía, Álvaro…

      ¿CentOS 8 ó CentOS 8 Stream? ¿Versión?

      ¿MariaDB? ¿MySQL? ¿PostgreSQL? ¿De la distribución o del repositorio oficial? ¿Versión?

      ¿Versión de PHP?

      ¿Momento de la instalación en que se produce el error?

      Como siempre, reviso (y aprovecho para actualizar el tutorial) y funciona todo a la primera.

      Responder
        • Comprobado con CentOS 8 / CentOS Stream 8, MariaDB 10.3 de la distribución y PHP 7.4 del repositorio alternativo. Funciona perfectamente. Supongo que en algún momento de la instalación algo ha fallado (falta de recursos, respuesta lenta, etc.) y ya no puede proseguir. Te sugiero que sigas los pasos que el propio mensaje de error indica, eliminar todos los directorios de Moodle, destruir la base de datos y empezar de nuevo, teniendo especial cuidado de aplicar permisos, etc. tal como indica el tutorial (obviamente hay pasos que se pueden saltar, como instalar dependencias, etc.).

          Responder
  2. Muchas gracias, para los que estamos aprendiendo en gestión de servidores lo que compartes es genial.
    Con gusto va mi aporte a este sitio, gracias por compartir de lo que sabes y de tu experiencia, guardando en mis marcadores.

    Responder
  3. Buenos días, luego de realizar las configuraciones de mi servidor CentOS 8 cuando intento comenzar la instalación vía web de Moodle 3.9 me da el siguiente error:

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

    Responder
    • ¡Hola, Mailen! ¿Usas la versión 8 PHP? Si es así creo que Moodle en CentOS 8 aún no lo soporta. Personalmente la versión más actualizada que he probado es la 7.4.12.

      Responder
    • ¡Hola, AliasBank! Si te fijas en la sección de requerimientos de instalación de Moodle en CentOS 8, se menciona un entorno tipo LAMP o LEMP, lo que implica que para conectar PHP y MariaDB/MySQL en ese tipo de pila debe incluirse la extensión correspondiente (la que tú mencionas). De hecho, en nuestras guías de instalación de las pilas LAMP y LEMP se incluye la instalación de dicha extensión.

      Responder
    • Hola, entiendo que el error no se produce en Moodle, sino en la sesión con el cliente mysql. ¿El usuario con el que has iniciado sesión tiene suficientes privilegios como para crear usuarios? ¿Qué tipo y versión de base de datos estás usando?

      Responder
      • Creo que ya sé lo que ocurre. Parece ser que usas MySQL y has introducido las dos sentencias de creación de usuario que aparecen en el tutorial pero, como se explica en el texto, una es para un tipo de bases datos y otra para otro. Por favor, lee detenidamente las instrucciones.

        Responder
  4. Hola. Sigo los pasos de este tutorial. Logro instalar el sitio Moodle en local, pero NO logro que se conecte desde otro equipo en la misma red… Gracias

    Responder
    • ¡Hola, Martha! ¿Responde el servidor al ping con el dominio o dirección IP que intentas usar en el navegador? ¿Has configurado el firewall de CentOS 8 para permitir conexiones entrantes vía http y https? Seguro que va por ahí el problema. Ya nos dirás…

      Responder
      • Hola. Seguí las instrucciones de https://comoinstalar.me/como-instalar-lamp-en-centos-8/ y de este tutorial, incluido el apartado sobre firewall (~$ sudo firewall-cmd –permanent –add-service={http,https} y ~$ sudo firewall-cmd –reload, con su positiva respuesta al abrir el navegador con: http://matematicas/info.php.

        La plataforma abre y se comporta a la perfección, en el equipo en el que está instalado Moodle (Centos 8 con GUI), pero NO es posible que se conecte desde otro dispositivo en la misma red, como lo he hecho en años anteriores con Debian, Ubuntu y LinuxMint…

        Responder
        • Entiendo que la máquina CentOS 8 se llama ‘matematicas‘ y que desde cualquier máquina de la red funcionan los comandos ‘ping 10.56.54.169‘ y ‘ping matematicas‘.

          Asimismo entiendo que desde cualquier máquina de la red, usando un navegador se puede visitar la página por defecto usando como URL http://10.56.54.169 y http://matematicas. También se puede visitar la página de prueba de PHP, tanto en http://10.56.54.169/info.php y http://matematicas/info.php.

          Si todo lo anterior es correcto, puede que lo que ocurra es que la instalación de Moodle se haya realizado en local sobre la propia máquina CentOS 8 usando como URL del instalador web alguna dirección o nombre de máquina que no se pueda resolver desde la red, como http://localhost/moodle/, http://127.0.0.1/moodle/, etc. Si es así, editando (con sudo) el archivo config.php de la carpeta de Moodle encontraríamos una línea con la variable $CFG->wwwroot presentando la URL desde la que Moodle espera ser accedido.

          Si su valor es ‘http://matematicas/moodle‘ y se puede acceder a http://matematicas desde la red, no sé qué ocurre, habría que revisar los registros de Moodle, Apache y PHP al intentar acceder.

          ¿Qué valor tiene esa variable?

          Responder
          • Hola. Solucionado. Tenías razón: Busqué el archivo config.php y edité la línea $CFG->wwwroot, quedando así: $CFG->wwwroot = ‘http://’.$_SERVER[‘HTTP_HOST’].’/moodle’; Además fue necesario deshabilitar SELinux.
            Muchísimas gracias por la paciencia y el apoyo…

          • ¡Me alegra saberlo! Por si te sirve, en comoinstalar.me solemos trabajar en red usando consola remota a través de SSH y el navegador, sin trabajar localmente en los sistemas que configuramos. De esa forma nos aseguramos de que las aplicaciones funcionan a la primera.

            ¡Un saludo!

Deja un comentario