Instalación de moodle en una raspberry pi con docker

Creamos una red para conectar los containers:

docker network create moodlenet
Creamos los volúmenes para almacenar la información importante:

docker volume create mysql
docker volume create mysql_conf
docker volume create moodle

He preparado una imagen basada en XX con el fichero /etc/mysql/my.cnf modificado para introducir estos cambios, necesarios para moodle:

https://docs.moodle.org/32/en/MySQL_full_unicode_support

Creamos el contenedor para la base de datos
docker run --name DB --hostname DB -e MYSQL_DATABASE=moodle -e MYSQL_ROOT_PASSWORD=moodle -e MYSQL_USER=moodle -e MYSQL_PASSWORD=moodle --network="moodlenet" -v mysql:/var/lib/mysql -v mysql_conf:/etc/mysql -d joseihf/rpi-mysql-moodle:latest

Creamos el contenedor para el moodle:
docker run -d -v moodle:/var/www --name MOODLE --hostname MOODLE --network="moodlenet" -p 80:80 -e MOODOLE_DB_URL=DB -e MOODOLE_DB_NAME=moodle -e MOODOLE_DB_USER=moodle -e MOODOLE_DB_PASS=moodle -e MOODOLE_DB_PORT=3306 treehouses/moodle:rpi-latest

Instalar Docker Compose en la raspberry pi:

sudo curl -L https://github.com/docker/compose/releases/download/1.19.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

Dar permisos:
sudo chmod +x /usr/local/bin/docker-compose

Para comprobar:
docker-compose --version

Creamos un archivo docker-compose.yml con el siguiente contenido:

version: ‘3’
services:
mysql:
image: ‘joseihf/rpi-mysql-moodle:latest’
environment:
– MYSQL_ROOT_PASSWORD=root
– MYSQL_DATABASE=moodle
– MYSQL_USER=moodle
– MYSQL_PASSWORD=moodle
volumes:
– ‘mysql:/var/lib/mysql’
– ‘mysql_conf:/etc/mysql’
moodle:
image: ‘treehouses/moodle:rpi-latest’
ports:
– ’80:80′
environment:
– MOODOLE_DB_URL=mysql
– MOODOLE_DB_NAME=moodle
– MOODOLE_DB_USER=moodle
– MOODOLE_DB_PASS=moodle
– MOODOLE_DB_PORT=3306
volumes:
– ‘moodle:/var/www/’
depends_on:
– mysql
volumes:
mysql:
driver: local
mysql_conf:
driver: local
moodle:
driver: local

Servidor de mensajería XMPP con Openfire

#Entorno lamp
Atp install apache2 php mysql-server

#instalamos java
apt install default-jre

#Traemos el openfire
wget http://www.igniterealtime.org/downloadServlet?filename=openfire/openfire_4.2.1_all.deb

#instalamos
dpkg -i openfire_4.2.1_all.deb

#Accedemos vía web para configurarlo por primera vez
http://192.168.128.74:9090

Alta disponibilidad con Corosync y Pacemaker

En ambos nodos:
apt install corosync pacemaker

En un nodo creamos la clave:
corosync-keygen

Pasamos la clave al segundo nodo:
scp /etc/corosync/authkey IpNodo2:/etc/corosync/authkey

Restringimos acceso a clave en Nodo2:
chmod 400 /etc/corosync/authkey

Configuramos el latido en ambos nodos, editando el fichero /etc/corosync/corosync.conf:
bindnetaddr: 10.0.0.0

Reiniciamos corosync en ambos nodos:
service corosync restart

Configuramos corosync para que se inicie al arrancar el sistema, en /etc/default/corosync ponemos el START a yes:
START=yes

Comprobamos que los dos nodos se han configurado correctamente:
crm_mon

Desactivamos el STONITH en ambos nodos:
crm configure property stonith-enabled=false

Desactivamos el QUORUM:
crm configure property no-quorum-policy=ignore

Configuración de un recurso IP

Configuramos un recurso IP para el cluster. Solo hay que hacerlo en uno de los nodos, dado que todo lo que configuremos con el crm se replicará en el resto de nodos:

crm configure primitive ClusterIP ocf:heartbeat:IPaddr2 params ip=192.168.128.220 cidr_netmask=32 op monitor interval=30s

Comprobación

 

 

Configuración de un recurso Apache

Instalamos Apache2 en ambos nodos:
apt install apache2

Modificamos los index.html de cada nodo para saber cuál es el que contesta.

echo Nodo1 > /var/www/html/index.html

Configuramos el recurso en uno de los dos nodos:

crm configure primitive ClusterApache ocf:heartbeat:apache params configfile="/etc/apache2/apache2.conf" statusurl="http://localhost/server-status" op monitor interval="40s"

Establecemos que el recurso ClusterIP se localice en el mismo nodo que el recurso ClusterApache:

crm configure colocation ClusterIP-ClusterApache inf: ClusterIP ClusterApache

Configurar notificaciones en Nagios

En esta entrada vamos a ver cómo tenemos que configurar nuestro servicio de monitorización con Nagios para que nos notifique las incidencias a través de correos electrónicos.

Pero antes de configurar los ficheros de Nagios para permitir el envío de notificaciones, debemos configurar nuestro ubuntu server 16.04 para que pueda mandar correos.

Para ello, vamos a instalar un servidor postfix y lo vamos a configurar para que reenvíe los correos a través de una cuenta de gmail que tengamos.

Pasos:

1. Instalamos un servidor de correo y otras utilidades:
apt-get install postfix mailutils libsasl2-2 ca-certificates libsasl2-modules

2. Editamos la configuración del servidor de correo Postfix

nano /etc/postfix/main.cf

Y agregamos las siguientes líneas:

relayhost =[smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_CAfile = /etc/postfix/cacert.pem
smtp_use_tls = yes

CUIDADO: debes borrar o comentar la línea anterior que contiene la directiva “relayhost=”, ya que si no estaría duplicada.

3. Creamos el fichero sasl_passwd

nano /etc/postfix/sasl_passwd

Introducimos esto:

[smtp.gmail.com]:587 correogmail@gmail.com:Micontraseña

4. Damos permisos para que nadie pueda abrir dicho fichero y creamos un fichero con el mapeo del usuario:

chmod 600 /etc/postfix/sasl_passwd
postmap /etc/postfix/sasl_passwd
chmod 600 /etc/postfix/sasl_passwd.db

5. Necesitamos un certificado de CA en nuestro directorio postfix. Lo creamos así:

cat /etc/ssl/certs/TWCA_Global_Root_CA.pem | tee -a /etc/postfix/cacert.pem

6. Configuramos nuestra cuenta de gmail que estamos usando de relay para que acepte y reenvíe los correos:

https://myaccount.google.com/u/2/security?utm_source=OGB&utm_medium=act#signin

7. Reiniciamos postfix y comprobamos que funciona:

service postfix reload

echo “Probando probando” | mail -s “Funciona” tucorreo@gmail.com

Una vez configurado el servidor de correo, pasemos a la configuración de Nagios.

Para ello, modificamos el fichero de contactos:

nano /etc/nagios3/conf.d/contacts_nagios2.cfg

Reiniciamos Nagios y ¡listo! ya tienes configuradas las notificaciones de tu servicio de monitorización.
service nagios3 restart

Configurar NRPE para chequeos remotos

El plugin NRPE nos permite lanzar chequeos como el control de usuario, carga del procesador, etc, en máquinas remotas.

Para configurarlo hay que seguir los siguientes pasos:

1. Instalar el servicio NRPE en la máquina remota.

2. Configuramos el servidor NRPE que acabamos de instalar para que permita conexiones desde nagios.

nano /etc/nagios/nrpe.cfg

Estos son los check que podemos utilizar en la máquina remota. Si se quiere modificar los parámetros hay que hacerlo en el archivo /etc/nagios/nrpe.cfg

3. Reiniciamos el servicio NRPE

4. Comprobamos que NRPE está a la escucha

4. Instalamos el plugin nrpe en la máquina nagios.

5. Comprobamos que funciona la conexión al plugin de Nagios

6. En Nagios configuramos el servicio.

7. Reiniciamos nagios y listo.

Y eso es todo. Si vemos la web obtenemos esto: