Servidor Raspberry Pi 4 B - Instalando una nube privada con Nextcloud y Docker

Nextcloud Dark Theme
Nextcloud Dark Theme

Continuamos nuestra aventura convirtiendo una Raspberry Pi 4B en un poderoso servidor, hoy vamos a instalar Nextcloud, para los que no lo han escuchado antes, Nextcloud es un software de tipo cliente - servidor que nos permite almacenar y gestionar archivos. Para conocer un poco más de su historia los invito a leer su página en Wikipedia.

En este articulo vamos a poner en práctica todo lo que hemos revisado en las entradas anteriores, por eso te invito a revisar nuestro camino recorrido hasta este punto:

  1. Convirtiendo una Raspberry Pi 4 Model B en un poderoso servidor casero
  2. Servidor Raspberry Pi 4 B - Agregando almacenamiento externo
  3. Servidor Raspberry Pi 4 B - Instalando Docker

Creando un Volumen  de Almacenamiento para Nextcloud

En mi caso yo cree un volumen llamado nextcloudvol con un tamaño de 1000GB.

lvcreate -L 1000G VGArchberry -n nexcloudvol

Y posteriormente lo monte en la ruta /mnt/nextcloudvol, agregando la siguiente linea en el archivo /etc/fstab:

/dev/mapper/VGArchberry-nexcloudvol /mnt/nextcloudvol ext4 defaults 0 0

Desplegando Nextcloud con docker-compose

Ahora crearemos un directorio llamado nextcloud y en el vamos a crear 2 archivos, uno llamado docker-compose.yml y el segundo llamado .env, a continuación veremos unas plantillas de ejemplo:

En el archivo .env encontraremos las variables de entorno que inyectaremos a nuestros contenedores, de ésta forma podemos configurar parámetros, definir contraseñas, etc.

Por otro lado en el archivo docker-compose.yml vamos a definir los servicios que vamos a ejecutar de forma contenerizada dentro de un mismo contexto (compose), para este caso uno de ellos es la aplicación de Nextcloud y el otro la base de datos que para este ejemplo usaremos PostgreSQL. En este archivo podemos configurar algunos comportamientos adicionales como por ejemplo usar volúmenes, y en este punto se vuelve clave lo que vimos un par de capítulos atrás de como agregar almacenamiento externo a nuestra Raspberry y es que estamos hablando que Nextcloud es una solución de nube privada para almacenamiento de archivos, por ende no es recomendable hacer esto dentro de nuestra micro SD y aquí podemos definir un volumen que use el que creamos en el paso anterior (Si hablamos de 2 tipos de volúmenes el primero es que creamos con LVM como sistema de archivos y el segundo es un volumen para Docker donde persistiremos la data de nuestros contenedores).

- /mnt/nextcloudvol/pg_data:/var/lib/postgresql/data
# Para almacenar de forma persistente la información de nuestra base de datos
- /mnt/nextcloudvol/nc_data:/var/www/html
# Para acceder a los archivos de configuración de Nextcloud.

Para profundizar en el uso de docker-compose les recomiendo visitar su guía de referencia.

Solo quiero hacer una mención resaltando la importancia de usar volúmenes persistentes cuando usamos Docker y es que los contenedores están pensados para ser "sin estado" (Stateless) por lo que si un contenedor se destruye su data y configuración también a menos que la misma esté persistida fuera del ámbito del contenedor, para nuestro ejemplo de hoy esa persistencia se logra de 2 formas muy básicas, pero a su vez suficientes para un servidor local, la primera es el archivo .env que vimos antes, con las variables de entorno que brindan una configuración base y consistente a nuestros contenedores y la segunda son los volúmenes que almacenan la data y configuración, estos volúmenes los vemos definidos en el archivo docker-compose.yml, con estas 2 soluciones implementadas nuestros contenedores pueden fallar, reiniciarse, actualizarse sin que la persistencia de los datos se vea comprometida.

Si has seguido los pasos hasta este punto, ya tenemos todo listo para poner a funcionar nuestra nube privada, solo nos falta subir los servicios y para ello ejecutaremos el siguiente comando dentro de la carpeta que contiene los archivos .env y docker-compose.yml:

#Subir los servicios
docker-compose up -d

Si queremos ver los logs de nuestros contenedores podemos verlos de la siguiente manera:

#Para ver los logs tanto de la aplicación nexcloud como de la base de datos 
docker-compose logs -f
#Para ver logs de un servicio en especifico ejemplo de app
docker-compose logs -f app

Ahora solo debemos abrir nuestro navegador y acceder a la IP de nuestra Raspberry con el puerto que expusimos del contenedor, en nuestro ejemplo sería algo como 192.168.0.10:8080 de acuerdo a la definición hecha en el archivo docker-compose.yml:

ports:
      - 8080:80

Sin embargo si accedemos con una dirección diferente a localhost vamos a obtener el siguiente mensaje:
Untrusted domain warning
Por lo tanto debemos modificar el archivo nc_data/config/config.php de la siguiente forma:

sudo vim nc_data/config/config.php

y agregando en la posición 1 la IP de nuestra Raspberry, que en mi caso es 192.168.10.148 (tambien puede ser un dominio si ya lo tienes configurado):

'trusted_domains' => 
  array (
	  0 => 'localhost',
	  1 => '192.168.10.148',
  ),

Luego de guardar si recargamos la página ahora deberemos observar un formulario de login donde ingresaremos las credenciales definidas para el usuario admin segun nuestro archivo .env:

NEXTCLOUD_ADMIN_PASSWORD=t0Ps3Cr3tadmin
NEXTCLOUD_ADMIN_USER=admin
Página de inicio de sesión

Y ya tendremos nuestra nube privada funcionando ya los siguientes pasos serian personalizar nuestro Nextcloud, agregar usuarios adicionales e instalar clientes para nuestro computador o teléfono móvil.

Muchas gracias por llegar hasta el final, en nuestro próximo articulo vamos a ver algunos concejos para configurar nuestro sistema operativo (Manjaro) y hacer algunas configuraciones de seguridad.