Ir al contenido principal

Instalando Moodle con Docker

En este blog ya hemos hablado en varios artículos sobre la tecnología de contenedores, pero hasta ahora nos habíamos centrado en LXD. En este artículo vamos a explicar cómo podemos instalar Moodle en menos de un minuto (dependiendo de la velocidad de descarga que se tenga, se puede alargar un poco más) usando contenedores.

Acerca de Moodle

No voy a explicar que es Moodle ni como instalarlo desde cero, para eso existe en Internet multitud de tutoriales. Lo que sí quiero comentar es que para instalar Moodle hace falta un servidor web con PHP. Además requiere que PHP tenga instalado una serie de componentes adicionales.

Por otro lado, necesitamos tener instalado en el servidor un sistema de gestión de bases de datos relacional, ya que Moodle almacena la información en él. Normalmente se utiliza MySQL, MariaDB o PostgreSQL. También debemos crear una base de datos específica para Moodle con su respectivo usuario. Durante la instalación Moodle creará las tablas necesarias.

A parte de todo esto, tenemos que tener en cuenta que dependiendo de la versión de Moodle que vayamos a instalar, necesitaremos que tanto PHP como software de la base de datos sean de unas versiones determinadas.

Teniendo en cuenta todo lo anterior, el proceso de instalación de Moodle suele ser algo tediodoso y un usuario que no esté acostumbrado a instalarlo habitualmente, se puede pasar un buen rato realizando este proceso.

LXD vs Docker

Si queremos instalar Moodle en un contenedor LXD, de los que ya hemos hablado en diferentes artículos, tendríamos que instalar todos los paquetes de software comentados en el punto anterior, ya que los contenedores que nos proporciona LXD son equivalentes a tener un sistema operativo recién instalado. Puede que encontremos alguna imagen para LXD con software ya instalado, pero no es lo habitual. Este es el motivo por el que suelo utilizar LXD en mis clases de Servicios en Red. Necesitamos servidores que sólo tengan el sistema operativo y a continuación instalamos el servicio en cuestión y lo configuramos.

Sin embargo, Docker tiene un enfoque diferente. La idea con Docker es el despliegue de aplicaciones en contenedores. Es decir, cuando hace falta distribuir una aplicación, la podemos instalar en un contenedor Docker y posteriormente distribuir dicho contenedor a nuestros usuarios o clientes. Es cierto que Docker también nos puede proporcionar contenedores que sólo contengan el sistema operativo limpio, pero no se suele utilizar con este fin. Cuando uno crea un contenedor Docker desde cero, primero carga una imagen con el sistema operativo limpio y a continuación instala diferentes capas de software sobre él hasta conseguir la imagen con el software final que se desee distribuir.

Teniendo en cuenta esto, Docker es perfecto para la distribución de aplicaciones, entre ellas, las aplicaciones web.

Instalando Docker

Al contrario que LXD, Docker está actualmente soportado por Microsoft y Apple, además de la comunidad Linux y otras muchas empresas. Por ello, podemos utilizar sus contenedores en casi cualquier ordenador que tengamos sin importar el sistema operativo que tenga instalado. En este artículo sólo vamos a describir la instalación en una máquina Linux. Para Windows o macOS la instalación se lleva a cabo utilizando la interfaz gráfica y es bastante sencilla. En el caso de Linux simplemente ejecutamos un comando desde la terminal:

$ sudo snap install docker

Desde hace tiempo prefiero utilizar el sistema de paquetes Snap de Canonical, pero eso lo dejaremos para otro artículo ;-)

Una vez que se haya instalado, tendremos el comando docker y otros relacionados en nuestro sistema. Para ver si está funcionando podemos ejecutar el siguiente comando desde la terminal:

$ docker version

Al igual que sucedía con LXD y su comando lxc, docker es un comando que posee una gran cantidad de subcomandos.

Instalando Moodle

Ahora que ya tenemos Docker instalado, procederemos a instalar un par de contenedores. Uno para que contenga el software de Moodle y otro para su base de datos, en este caso, MariaDB. Para ello vamos a utilizar los contenedores que nos proporciona Bitnami.

Como se ha comentado anteriormente, para crear un contenedor con Docker se parte de un contenedor base, al que se le van añadiendo diferentes capas y se le van ejecutando diferentes comandos. Para automatizar este proceso, Docker cuenta con la posibilidad de utilizar lo que se denominan dockerfile. Un dockerfile es un fichero de texto con la lista de comandos que Docker debe seguir para obtener el contenedor final. Sería equivalente a un script (fichero por lotes) del sistema operativo pero para Docker.

Además Docker cuenta con la herramienta docker-compose, que permite automatizar la creación de diferentes contenedores y diferentes servicios relacionados con ellos, simplemente siguiendo los pasos de un fichero de texto en formato YAML.

Para instalar Moodle vamos a utilizar el comando docker-compose ya que necesitamos un contenedor para el propio Moodle y otro para MariaDB. Bitnami ya cuenta con el fichero docker-compose.yml necesario para ello. Lo podemos descargar desde la línea de comandos de la siguiente manera:

$ wget https://raw.githubusercontent.com/bitnami/bitnami-docker-moodle/master/docker-compose.yml

Si se prefiere utilizar un navegador web, simplemente se accede a la dirección anterior y se guarda el fichero con el nombre docker-compose.yml.

Ahora ejecutamos el comando que creará los contenedores utilizando la descripción que se encuentra en el fichero anterior. El subcomando up creará y ejecutará los contenedores y la opción -d (--detach) liberará la terminal para que podamos seguir trabajando:

$ docker-compose up -d

Para que tenga éxito, habrá que ejecutarlo en el mismo directorio donde hayamos descargado el fichero YAML. Del mismo modo que hemos utilizado el subcomando up, podemos utilizar stop para pararlos y start para volverlos a ejecutar una vez que ya han sido creados.

Ahora ya tendremos Moodle instalado en nuestro sistema. Para acceder a él, utilizando un navegador web, accedemos a la URL http://localhost y, si el proceso anterior ha funcionado correctamente, nos debería aparecer la pantalla de conexión de Moodle solicitando el usuario y la contraseña. Para nuestro caso, que utilizamos los contenedores de Bitnami, el usuario es user y la contraseña bitnami.

@josrrp


Comentarios

  1. Hola. No puedo creer que sea tan fácil... Acabo de instalar Moodle, siguiendo tus instrucciones en Fedora XFCE... Genial

    ResponderEliminar
  2. Pregunta, pregunta... ¿Ahora cómo hago backup del contenedor completo de Moodle? ¿Cómo hago una eventual restauración de backup? Mil gracias.

    ResponderEliminar
    Respuestas
    1. Hola, los contenedores almacenan la información en volúmenes, ya que las imágenes son inmutables y no almacenan los datos. En este caso, como está instalado usando snap, podrá encontrar los ficheros en el directorio /var/snap/docker/common/var-lib-docker/volumes
      Aquí hay dos volúmenes, uno para cada contenedor. En uno de ellos se encuentran los ficheros de moodle y en el otro los de la base de datos MariaDB.
      Para hacer un backup podría copiar estos directorios, pero antes pare los contenedores. De todos modos, no es recomendable hacerlo de esta forma sino por medio de otro contenedor intermedio, pero es un poco más complejo. En Internet podrá encontrar muchos tutoriales para hacer backups de volúmenes de docker.

      Eliminar
  3. No veo carpetas de instalación en mi equipo... Moodle, Bitnami... ¿Dónde están?

    ResponderEliminar
    Respuestas
    1. Hola, tanto Moodle como MariaDB se encuentran dentro de los dos contenedores. Docker almacena normalmente las imágenes de los contenedores en /var/lib/docker

      Eliminar
    2. Si ha seguido los pasos de este tutorial, al haber usado snap el directorio en cuestión es /var/snap/docker/common/var-lib-docker/

      Eliminar
    3. Este comentario ha sido eliminado por el autor.

      Eliminar
    4. Hola. Permiso denegado. ¿Accesible sólo por terminal?

      Eliminar
    5. Desde la terminal puedes usar "sudo -s" y desde la interfaz gráfica, dependerá del escritorio que utilices. Normalmente botón derecho del ratón y la opción "Abrir con permisos administrativos". Si sabes como se llama el administrador de ficheros de tu entorno, por ejemplo en Ubuntu se llama nautilus, puedes escribir el comando "sudo nautilus" en la terminal y se abrirá con permisos de administración.

      Eliminar
  4. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  5. La configuración de su sitio podría no ser segura. Por favor, asegúrese de que su directorio raíz (/bitnami/moodle/moodledata) no es accesible directamente vía web.

    ¿¿¿??? ¡¡¡Auxilioooo!!!

    ResponderEliminar
  6. Hola que tal es el rendimiento en esta instalación con docker vs una instalación de moodle con nginx o apache

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Analizando el protocolo HTTP

El objetivo de este artículo es el de explicar de forma práctica el funcionamiento del protocolo HTTP y entender el intercambio de datos que se realiza entre los servidores y los clientes web. Por otro lado, cubre la necesidad de tener un texto en español que sirva de referencia a mis alumnos de Servicios en Red  a la hora de realizar la práctica de clase  HTTP-1 . La idea es ver de forma práctica el funcionamiento interno del protocolo HTTP . Para ello, vamos a utilizar un par de herramientas de la línea de comandos de Linux ( telnet y netcat ), con las que vamos a simular el comportamiento tanto del navegador como del servidor web. HTTP es un protocolo de la capa de aplicación, y como muchos otros protocolos de esta capa, está basado en texto. De hecho, los comandos que envía el navegador al servidor y sus respuestas se pueden leer perfectamente en inglés. Por defecto, HTTP utiliza el puerto 80 TCP y HTTPS  el puerto 443 TCP. Los ejemplos que vamos a ilustrar serán

ZFS, Primera parte

Cuando el año pasado instalé LXD y lo configuré por primera vez, me encontré que podía utilizar, de hecho se recomienda, el sistema de ficheros ZFS para albergar los contenedores. Posteriormente, cuando instalé Proxmox en el servidor de mi departamento, me encontré de nuevo con  ZFS . Anteriormente no le había prestado mucha atención a  ZF S , normalmente utilizo EXT4 o XFS , pero estaba claro que había una estrecha relación entre  ZFS  y los sistemas de virtualización. ZFS  es un sistema de ficheros desarrollado por Sun Microsystems  (creadores también del lenguaje de programación Java ), posteriormente la empresa fue adquirida por Oracle , actuales propietarios. OpenZFS  es la variante libre y posee una licencia de tipo  CDDL , que aunque es software libre, es incompatible con GPL . Por este motivo, el kernel de Linux no lo incorpora de serie. Sin embargo, los usuarios pueden instalarlo sin problemas ya que se encuentra en los repositorios de la mayoría de las distribucione