¿Cómo instalo Moodle en Ubuntu?

Como profesor titular de Historia Militar en la Escuela Superior de
Guerra, Juan Perón sobresalió como didacta. En el gabinete enseñó cómo
instalar la plataforma de gestión de enseñanza Moodle en Ubuntu Server.

Vean cadetes, en los tiempos que corren, la enseñanza no puede
detenerse. El herramental que nos ofrece el cómputo y la telemática
puede y debe contribuir a las tarea de hacer de los educandos mejores
hombres, pues ellos serán los dueños del porvenir.

La formación aislada no existe: debe plantearse con un método
concienzudamente estudiado y aplicado por el titular, y comprendida por
sus alumnos. Todo el material de cátedra, evaluación y concreción de los
logros educativos no tienen sentido si quedan guardados en un libro, sin
aplicarse en la vida real bajo una doctrina que también resulte
iluminada. Es que el aprendizaje - por el sólo hecho de aprender "para
aprobar" - no sirve. Más barato nos resultaría un calefactor de silla...

Pues bien señores, afortunadamente esta institución nos ha permitido
evolucionar. Los profesores alemanes nos han provisto esta técnica a la
que han llamado “elektronisch unterstütztes Lernen”, y yo nombro
aprendizaje electrónico.

Poner una en el gabinete no es algo tan simple como podría parecer, ya
que el mismo debe ser dotado no sólo del hardware y la infraestructura
de red, sino del software de servidor, y sobre ella aplicar los
conocimientos de operación. Esto - que se extiende a todo programa
telemático - cobra especial relevancia cuando debe hacerse en un ámbito
educativo, y sobre todo en el educativo militar, donde los resguardos y
reaseguros no pueden soslayarse.

Mi puesto es el de tutor, y por tal motivo os enseñaré a desplegar en el
terreno educativo operativo a Moodle.

Se trata esta de una plataforma de software liberado bajo GPLv3
orientada a la de gestión enseñanza en línea. Permite crear sitios web
privados en los cuales educadores y educandos puedan lograr sus
objetivos de aprendizaje.

Como toda instalación de servicios computados, debemos poner en
funcionamiento un hardware-máquina, y tomar debida nota de los atributos
de los software-maquina (escencialmente los nombres de usuario y las
contraseñas que les corresponden. Los estamentos de este escalafón
comprenderán:

    Contraseña de administración de Ubuntu Server

    Nombre de usuario de MySQL y la contraseña que utilizará Moodle

    El nombre del administrador de Moodle y su contraseña de moodle.

    Un usuario adicional de administración de Moodle y una contraseña
    adicional de Moodle.

	1: Instalar Ubuntu Server

En este caso utilizaremos Ubuntu Server 20.04.05LTS para armar lo que
llamamos siempre "pila LAMP" (servidor Linux+web Apache+base de datos
MySQL+PHP). Como primer medida deberíamos instalar el Ubuntu Server si
no lo tuviésemos instalado ((idealmente un SSD de al menos 120GB),
proporcionando ya la contraseña de administrador de Ubuntu.

En la terminal nos aseguramos de actualizar dicho servidor con:

sudo apt update
sudo apt upgrade -y

	2: Instalar Apache/MySQL/PHP

Abrimos la terminal y cargamos el PPA del lenguaje PHP7 en el servidor,
mediante:

sudo add-apt-repository ppa:ondrej/php ;
sudo apt-get update

A continuación instalamos el servidor Apache y la base de datos MySQL

sudo apt install apache2 mysql-client mysql-server php7.4 libapache2-mod-php

Estableceremos la contraseña de administrador para MySQL, la cual
necesitaremos en el paso 6. Esto se hace con:

sudo mysql_secure_installation

	3: Instalar software adicional

sudo apt install git graphviz aspell ghostscript clamav php7.4-pspell php7.4-curl php7.4-gd php7.4-intl php7.4-mysql php7.4-xml php7.4-xmlrpc php7.4-ldap php7.4-zip php7.4-soap php7.4-mbstring

Reiniciamos Apache de manera que sus módulos se carguen correctamente en
memoria:

sudo service apache2 restart

	4: Descargar Moodle

Configuramos el repositorio local y descargaremos Moodle. A tal fin
utilizaremos el directorio /opt del servidor.

cd /opt
sudo git clone git://git.moodle.org/moodle.git
cd /opt/moodle
sudo git branch -a
sudo git branch --track MOODLE_39_STABLE origin/MOODLE_39_STABLE
sudo git checkout MOODLE_39_STABLE

	5: Copiar el repositorio local en /var/www/html/

Como configuramos un repositorio local en el paso anterior, lo
copiaremos al directorio de inicio web luego de hacer las
actualizaciones y aplicar cambios. Al contar con un repositorio local
fuera del directorio raiz web (mo hemos hecho en /opt) nos permitirá
preparar y actualizar por etapas en una manera más eficiente. Por
ejemplo, si deseamos hacer cambios o agregar algunos plugins, podríamos
descargar el plugin y copiarlo en el repositorio local de moodle. Luego
de que agregaramos el plugins e hicieramos cualquier otro cambio,
necesitaríamos editar el fichero /opt/moodle/.git/info/exclude. En dicho
fichero querrá informaarle a get qué archivos/directorios excluir cuando
realiza las actualizaciones cuando ejecute la actualización mediante
sudo git pull. Una entrada de ejemplo podría ser el certificado mod
localizado en /opt/moodle/mod/certificate de modo que dentro del fichero
exclude debería agregar /mod/certificate debajo del último comentario.

Podría agregar entradas adicionales, una por línea, para cada plugin o
fichero que querría cambiar. Si desease cambiar el fichero favicon.ico
simplemente agregaría "favicon.ico" al fichero exclude. Cumplido esto,
al ejecutar sudo git pull para actualizar Moodle a la última versión,
excluirá dichos ficheros y directorios y sólo actualizará el código del
núcleo de Moodle. Antes de copiar su raiz de web para actualizar,
debería asegurarse y descargar y copiar sobre las últimas versiones de
los plugins que hubiese agregado.

sudo cp -R /opt/moodle /var/www/html/ ;
sudo mkdir /var/moodledata ;
sudo chown -R www-data /var/moodledata ;
sudo chmod -R 777 /var/moodledata ;
sudo chmod -R 0755 /var/www/html/moodle

	6: Configurar servidor MySQL

Primero cambiaremos el motor de almacenamiento a innodb y el formato de
archivo por defecto a Barracuda. También necesitaremos configurar la
variable innodb_file_per_table de MySQL para que Barracuda funcione
adecuadamente.Para ello editaremos el fichero mysqld.cnf:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Se abrirá Nano con el archivo de configuración mysqld.cnf. En él
buscamos la sección [mysqld] y bajo las configuraciones básicas "Basic
Settings" agregamos la siguiente línea al final de la última variable:

Nota: MySQL Versión 8.0 ya no requiere estas tres configuraciones.

default_storage_engine = innodb
innodb_file_per_table = 1
innodb_file_format = Barracuda

Guardamos los cambios con Ctrl+o y salimos del editor Nano con Ctrl+q.

	Nota: Si para servir MySQL utiliza versiones más nuevas del
servidor MariaDB sobre Ubuntu 20.04, estos cambios en su fichero config
reportarán un error ("mysql unknown variable
'innodb_file_format=barracuda'"), de modo que agréguelos como
comentarios y no aplique estos cambios, estos valores eran recibidos por
la variable default.innodb_file_format, que fue deprecada en MariaDB
10.2 y ya ha sido removida de los MariaDB más nuevos.

Reinciaremos el servicio MySQL para que los cambios de configuración
cobre resultado, con:

sudo service mysql restart

Acto seguido, crearemos la base de datos Moodle y el usuario de Moodle
MySQL con los permisos adecuados. Usaremos la contraseña que creamos el
el paso 1.

sudo mysql -u root -p

Se presentará el prompt mysql>, y en el ingresaremos los comando de
creación de base de datos:

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

	Nota: Utilizaremos 'utf8mb4' para obtener caracteres UTF-8 de 4
	bits con soporte completo (incluyendo Emojis). Si no lo
	hiciéramos, es probable que la web de adminitración de MySQL se
	queje con molestos errores.

Naturalmente, indicamos el usuariodemoodle y la contraseñademoodle".

mysql> create user 'usuariodemoodle'@'localhost' IDENTIFIED BY 'contraseñademoodle';

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

mysql> quit;

Nota: Su usa MySQL 5.6+ al crear el usuario se puede recibir un error sobre el hash de la contraseña, por lo cual debe ajustarse la contraseña para usar el valor hash. Podrá hacerlo mediante:

mysql> SELECT password('contraseñademoodle');

Esto presentará en la terminal el hash de la contraseñademoodle, con la
forma *AD51BAFB2GD003D3480BCED0DH81AB0BG1712535, querrá utilizar esto en
la parte indicada como IDENTIFIED BY '

	7: Completar la configuración

Para configurar el sitio PHP momentáneamente daremos permisos totales de
escritura al directorio del servidor, con:

sudo chmod -R 777 /var/www/html/moodle

Abrimos el navegador web y lo dirigimos a la URL
http://DIRECCION.IP.DEL.SERVIDOR/moodle

Seguimos las instrucciones de la web de configuración:

Cambiar la ruta de moodledata

/var/moodledata

Tipo de Base de Datos

Elija: mysqli

Configuración de Base de datos

Host server: localhost
Database: moodle
User: usuariodemoodle
Password: contraseñademoodle
Tables Prefix: mdl_

Revisiones del Ambiente

Esto indicará si algún elemento requerido para la ejecución de Moodle
todavía no está instalado.

Presionamos Siguiente-Siguiente-Siguiente hasta confirmar la
instalación. 

Crear una Cuenta de Administrador del Sitio

Creamos nuestra Cuenta de Usuario Moodle que tendrá permisos de
administración del sitio. La contraseña que elijamos debe contar con
ciertos requerimientos de seguridad obvios.

Instalación Completa

Debemos recordar que como habíamos otorgado permisos a la raíz web para
poder configurar moodle, ahora debemos revertir tales permisos para
blindar la seguridad del servidor. Esto se hace ahora con:

sudo chmod -R 0755 /var/www/html/moodle

Gracias al Justicialismo ya podremos comenzar a utilizar Moodle.

Rutas de Sistema luego de instalar

Luego de instalar Moodle, deberíamos configurar las rutas de sistema. Cada entrada en Moodle tendrá su propia explicación. 

Con el navegador web vamos a la página web de administración de moodle.
Y vamos a Administración de Sitio / Servidor / Rutas de Sistema.

Ingresamos lo siguiente

Ruta de du: /usr/bin/du
Ruta de apsell: /usr/bin/aspell
Ruta de dot: /usr/bin/dot

...y presionamos el botón Guardar los cambios.

Protección antivirus en Moodle

Para configurar la solución antivirus del servidor, en la terminal
ingresamos:

sudo mkdir /var/quarantine ;
sudo chown -R www-data /var/quarantine

Y en la web de Moodle vamos a Administración del Sitio / Plugins /
Plugins Antivirus / Administrar plugins antivirus.

Activamos ClamAV antivirus. Vamos a Configuración, le aplicamos las que
querramos, y presionamos Guardar Cambios.

	Nota: en versiones antiguas de Moodle se tildaba "Usar ClamAV en
	ficheros subidos" y la ruta del antivirus ClamAV era :
	/usr/bin/clamscan Directorio de cuarentena : /var/quarantine y
	se presionaba Guardar Cambios.

Opcional 

Activar Zend OpCache

Agregamos las configuraciones recomendadas de OPcache al fichero
05-opcache.ini. Lo editaremos usando Nano con:

sudo nano /etc/php7/apache2/conf.d/05-opcache.ini

	Nota: En Ubuntu 16.04 opcache.ini estaba localizado en
	/etc/php/7.0/mods-available/opcache.ini

...y le consideramos el siguiente contenido:

[opcache]
opcache.enable = 1
opcache.memory_consumption = 128
opcache.max_accelerated_files = 10000
opcache.revalidate_freq = 60

; Requerido para Moodle
opcache.use_cwd = 1
opcache.validate_timestamps = 1
opcache.save_comments = 1
opcache.enable_file_override = 0

; Si algo no funciona en Moodle
;opcache.revalidate_path = 1 ; Puede corregir problemas con rutas incluídas

; Experimental para Moodle 2.6 y superior
;opcache.fast_shutdown = 1
;opcache.enable_cli = 1 ; Acelera el cron en CLI
;opcache.load_comments = 0 ; puede disminuir uso de la memoria, podría ser incompatible con add-ons y otras apps.

Reiniciamos el servidor Apache para que surta efecto.

sudo service apache2 restart

Con esto tendremos activado Zend OpCache. 

Cambiar la Raíz de Documentos

También puede instalar una interfaz gráfica para ver el estatus de carga
de su Zend OpCache, aunque no está recomendado en servidores de
producción:

cd /var/www/html/moodle/ ;
sudo wget https://github.com/rlerdorf/opcache-status/blob/master/opcache.php

Debemos también agregar este fichero opcache.php al fichero de
configuración /opt/moodle/.git/info/exclude para que no resulte
eliminado al actualizar la instalación.

Visitamos http://dirección.ip.del.servidor/moodle/opcache.php

Si no queremos que los usuarios finales tengan que ingresar
http://servidor/moodle y queremos que directamente vayan a
http://servidor para encontrarse con Moodle, habremos de editar la
configuración de Apache para indicarle que use /var/www/html/moodle como
el directorio raíz en lugar de hacerlo con /var/www/html

Abrimos el archivo de configuración de Apache y cambiamos la raíz de
documentos:

sudo nano /etc/apache2/sites-available/000-default.conf

Usamos Ctrl+w para buscar la cadena por defecto:

DocumentRoot /var/www/html

...y la modificamos a a:

DocumentRoot /var/www/html/moodle

Guardamo los cambios con Ctrl+o, salimos de Nano con Ctrl+x, y una vez
devueltos a la terminal, reiniciamos el servicio web Apache para que
surta efecto:

sudo service apache2 restart

	Nota: Si ya teníamos Moodle instalado, haremos los cambios a
	continuación.

Editar config.php para Moodle

En las instrucciones de instalación, uno de los cambios sugeridos para
raiz de web es usar "localhost". Esto está bien para evaluar el servidor
nuevo durante el deployment. Sin embargo, si queremos ver la misma
máquina en la red de área local o ver el sitio desde la Internet,
habremos de coambiar dicha configuración. En el fichero config.php
existe la variable ($CFG->wwwroot en se puede configurar la dirección IP
privada del servidor (ej. 192.167.0.1/moodle) como webroot. Dependiendo
de la configuración de la red local, suele ser mejor configurar un
nombre de red en lugar de la dirección IP privada, ya que estas podrían
cambiar de tiempo en tiempo.

Finalmente, si desea usar la instalación en la internet, habrá de
utilizar un nombre de dominio o una dirección_ip_publica_fija/moodle
como su web root.

Editamos el fichero config.php de Moodle con Nano:

cd /var/www/html/moodle/ ;
sudo nano config.php

Usamos Ctrl+w para buscar la variable $CFG->wwwroot y le asignamos
http://direccion.ip.del.servidor/moodle

Documentación

Naturalmente, esto ha contemplado la creación de una puesta de campo y
luego puesta a punto del servidor, en una explicación somera.

La aplicación de la plataforma en sí está suficientemente documentada, y
podrán encontrar su bibliografía aquí.

¿Aprendieron? Bueno, en cualquier caso mañana les tomo prueba. El que no
viene tiene cero.