jueves, 24 de julio de 2025

Nextcloud & Docker



Hola a todos, hoy voy a explicar cómo montar nuestra propia nube en una máquina CentOS10. Para llevar esto a cabo necesitamos instalar las siguientes herramientas: Nextcloud y Docker Compose. Pero primero empecemos por entender que hace cada una. 
  
Nextcloud es un sistema que nos permite tener nuestra propia nube para sincronizar archivos, calendarios, contactos y muchas cosas más. Nos proporciona una interfaz web a través de la cual podemos acceder a todos nuestros contenidos desde cualquier ordenador. También tiene un cliente de escritorio que nos permite sincronizar nuestros archivos y varias aplicaciones móviles para acceder a diferentes servicios de manera más fácil desde el móvil (aunque la interfaz web es compatible con móviles también).🔗

Docker es una de las herramientas facilita la creación de entornos de ejecución aislados y portátiles para las aplicaciones, lo que simplifica la implementación y la gestión, especialmente en arquitecturas de microserviciost. Pero claro, la idea de Docker es que únicamente ejecute un único microservicio por contenedor y no varios a la vez. Para solucionar esto se crea Docker Compose que permite trabajar con varios contenedores de forma simultánea haciendo que estos se conecten y relacionen entre sí. De esta forma, si uno de los contenedores fallase, podrías (depende cómo lo configures) permitir que los otros servicios sigan funcionando.

Bueno, teniendo claro que hace cada herramienta lo siguiente instalar Docker y Docker Compose en la máquina CentOS. Comenzamos por añadir el repositorio de Docker con el siguiente comando.
 
 dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
  

 Ahora veamos las versiones de Docker que me agregó este repositorio en el sistema.
  

Con la siguiente instrucción vamos a decirle al sistema que me instale de los paquetes docker-ce la versión más apropiada para mi máquina y la versión más nueva.
 
 sudo dnf install docker-ce --nobest --allowerasing
 
 
Habilitamos a Docker para que se inicie con el sistema.
 

Verificamos que Docker está corriendo y habilitado para iniciarse con el sistema.
 

Agregamos nuestro usuario al grupo de Docker y consultamos la versión de Docker.
 
 
Ahora, para instalar Docker Compose necesitamos descargarlo con el siguiente comando.
 
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
 

Luego de su descarga verificamos que se encuentre en la ruta que le especificamos y le damos permiso de ejecución a ese fichero.   
 
Hasta aquí tenemos las herramientas Docker y Docker Compose instaladas. Ahora necesitamos ir a Docker Hub para ver las especificaciones que necesita el contenedor de Nextcloud para su instalación. 
 
Si echamos un vistazo en la página, encontraremos al final de ésta, el contenido que necesitamos para crear nuestro fichero .yml, indispensable para que Docker Compose se pueda ejecutar. 
 

Creamos el fichero docker-compose.yml en el directorio donde vamos a ejecutar Nextcloud. Copiamos todo el código en el fichero creado y luego pasamos a modificar lo que necesitemos.
 
services: 
  db:
    image: mariadb:10.6       
    restart: always
    command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
    volumes:
      - db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=1234
      - MYSQL_PASSWORD=1234
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=q3it


  app:
    image: nextcloud
    restart: always
    ports:
      - "8080:80"
    links:
      - db
    volumes:
      - nextcloud/config:/var/www/html/config
     environment:
      - MYSQL_PASSWORD=1234
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=q3it
      - MYSQL_HOST=db

He modificado el password de la base de datos, el nombre de usuario y volumen de configuración. ¿Que hará esto? Creará la base de datos con MariaDB y la imagen de Nexcloud.
 
Ahora, ejecutamos la siguiente instrucción para levantar el contenedor...
 
sudo docker compose up -d 
 

Verificamos que las dos imágenes están creadas y corriendo...
 
 
Para conectarnos con este servicio, vamos al navegador e ingresamos la ip la máquina y el puerto 8080. 
 
 
Como vemos en la imagen está funcionando el servicio. Ahora nos pide que creemos una cuenta de administrador. 
 

Ingresamos...
 
 
A partir de aquí tendríamos a Nextcloud funcionando correctamente. Pero si yo quiero que mi conexión sea al nombre de dominio nextcloud.docker.q3it y no a la ip ¿Cómo lo podríamos hacer? Lo primero es modificar el fichero /etc/hosts del CentOS y asociar ese nombre con la ip.
 

Si intentamos entrar a esa url esto es lo que pasa...
 

Para solucionar esto debemos ir al directorio config/config.php que nos pone en el mensaje y asociar ese nombre de dominio con la ip. Este directorio se creó con la instalación y se encuentra en la ruta de la imagen.
 

Entramos al fichero...
 

Modificamos la última línea, donde asocia la 192.168.1.123 con el dominio nextcloud.docker.q3it. También podemos eliminar el puerto 8080 para que se comunique por defecto por el 80 y así omitir el puerto en la conexión.
 
 
Probemos la conexión....
 

👏👏 Resuelve a esa dirección. Sólo quedaría loguearnos y listo 👍.
 
Ampliación 
Cuando utilizamos una nube personal, una de las cosas que nos gustaría hacer es poder acceder a ella a través de una red WAN, esto se puede hacer de varias maneras:
 
1- Acceder por un puerto abierto en nuestro Router. El concepto de esta practica lo expliqué en el post de ssh
 
 
Una vez abiertos los puertos, debemos configurar el fichero config.php y añadir nuestra ip pública para que la reconozca como una ip de confianza.
 
2- Acceder a la máquina local por medio de una VPN. En el post de OpenVPN explico cómo acceder desde el exterior a una ip local. La metodología a seguir es muy fácil, sólo es configurar hacia donde queremos dirigir esa comunicación.
 
3- Acceso con un dominio registrado en la web. Cuando se accede por medio de un dominio público, lo normal es que la empresa que presta este servicio te de las facilidades para configurar tu conexión: Contratar un certificado SSL, resolver las peticiones por medio de sus servidores DNS, etc. Pero si sólo tenemos el nombre de dominio, el resto lo tenemos que hacer de forma local, instalando Bin9 para que resuelva a ese nombre de dominio, configurar un certificado SSL autofirmado, abrir puertos seguros, etc.
 
4- Acceso a una instancia. Lo primero es entender que una instancia informática es una máquina virtual (VM), que se ejecuta en un hardware físico independiente. Teniendo esto claro, lo que necesitamos es migrar nuestra máquina a una organización que preste este servicio, cómo: Amazon EC2, Microsoft Azure, Google Platform, etc. Para el proceso de migración hay que tener en cuenta, la arquitectura, la conectividad, los sistemas operativos que soporta, el tipo de cuenta, etc. Ahora solo queda ser muy meticulosos y leer muy bien la guía ofrecida por el proveedor del servicio para terminar con éxito este proceso. 

sábado, 21 de junio de 2025

Backup - Copias de seguridad


 
¿Qué es un backup? Un backup, copia de seguridad o respaldo (del inglés back up) es una copia de reserva que se hace de la información valiosa contenida en un sistema informático. Se realiza para evitar la pérdida de los datos originales debido a cualquier tipo de error o accidente, dado que un backup permite recuperarlos con facilidad. >
 
Los backups tradicionales son: Backup full, backups diferenciales y backups incrementales. Aunque existen variaciones de estos, vamos a profundizar un poco. 
 
Backup full 
Realiza una copia completa de todos los datos que queremos proteger. Al copiar todos los datos cada vez que se realiza, supone la existencia de una redundancia y un gran volumen de información. Es un proceso que suele llevar mucho tiempo y requiere mucho espacio de almacenamiento, por lo que suele usarse en la primera copia y cada cierto tiempo. Esta suele combinarse con copias incrementales o diferenciales.
 
Backup diferencial
Aquí se copian únicamente los datos que han cambiado en relación con el último backup existente. El volumen de información dependerá del tiempo transcurrido entre una copia de seguridad y otra. Es un proceso que lleva menos tiempo y requiere menos espacio que el backup completo, pudiéndose realizar distintos backup independientes. Para restaurar los datos, se necesitaría el último backup completo junto con el backup diferencial.
 
Backup incremental
Y esta última realiza una copia de los datos que han cambiado desde el último backup completo o diferencial. Se trata de copias de seguridad dependientes unas de otras, siendo necesarias todas junto con el último backup completo para hacer una restauración de datos. Es un proceso muy rápido que requiere poco espacio de almacenamiento, por lo que es muy eficiente y, por lo tanto, muy utilizado.
 
Ahora vamos a ponernos manos a la obra y aplicar esta teoría. Primero voy a hacer Backups en sistemas de escritorio.
 
Linux
En sistemas GNU-Linux existen diferente opciones como:
  • Rsync
  • Timeshift
  • Duplicity
  • Bacula
  • Rsnapshot
  • Deja Dup
  • Amanda
Unas más robustas que otras, pero la que voy a utilizar es Deja Dup que es la más conocida y cómoda para manejar.

El sistema operativo que voy a utilizar es Kali Linux, y una pequeña aclaración es que la herramienta Deja Dup cuando se instala aparece como Backups.
 
 
Otra cuestión muy importante a tener en cuenta es ¿Dónde voy a volcar toda esa información? para eso nos tenemos que decidir si hacerlo en un espacio interno de nuestra máquina, en un medio externo o almacenarla en la nube. 
 
Vamos a probar en una partición interna. Lanzamos el comando fdisk -l para listar las particiones montadas en el sistema.
 
 
Vemos que hay una partición en /dev/sda1 de 20G, ahí es donde vamos a almacenar nuestra copia.
 
En la aplicación Backup seleccionamos el destino, al que le llamaré BackupFull y solo copiaré el directorio /home.
 

Ejecutamos crear copia de seguridad... Luego nos vamos a la partición para ver si creó la copia de seguridad.
 
 
Con todo esto ya tendríamos la copia de seguridad completa. Ahora las siguientes copias que hagamos las hará como copias Incrementales, solo se copiarán los ficheros que se hayan cambiado.
 
Si queremos restaurar los archivos a cierto punto lo haremos de la siguiente manera... Vamos a la aplicación y, si nos fijamos nos habilita una casilla que pone Restore "Clickcamos".  
 

Nos lleva a un pantallazo donde están todos los directorios y ficheros que copiamos, la herramienta nos da la opción de restaurar los archivos que queramos.
 

Seleccionamos lo necesario, y ya está restaurado el sistema a ese punto.

Hasta ahora he seleccionado hacer copia en partición interna, pero si lo quisiéramos en un medio extraíble, solo basta con enchufar una memoria y le cambiamos la ruta en la herramienta.
 
 
Para aplicar este concepto a la nube es exactamente lo mismo, lo único que tenemos que tener es una cuenta Google Drive o OneDrive.


iMAC 
Para hacer una copia de seguridad en Mac de manera sencilla utilizamos una herramienta que trae predeterminada la computadora y se llama Time Machine. Pues lo único que necesitamos es un disco duro externo porque Time Machine formatea el disco y utiliza un formato en concreto de archivos. 
 
Enchufamos la unidad externa y el nos irá preguntando la configuración deseada.
 
 
La copia se ha hecho de manera exitosa. Ahora veamos el menú que nos ofrece la computadora para la recuperación.
 
 
Si clickcamos en Explorar copias de seguridad de Time Machine, la herramienta nos llevará a un scroll de ventanas para restaurar lo que deseemos.
 
 
Los Backup de Time Machine son inteligentes y guardan un historial, por lo que si mañana vuelves a hacer una copia, solamente se añadirán los cambios no se volverá a duplicar todo. Si quieres recuperar una parte de la copia de seguridad tan solo tendrás que entrar en la aplicación Time Machine y navegar por las flechas hasta volver a donde quieras.
 
Windows
Ahora vamos a ver como podemos hacer una copia de seguridad del sistema operativo Windows 11 en una unidad externa. Seguimos los siguientes pasos...
 
Control panel --> System and Security
 
 
 Backup and Restore -->
 
Create a system image --> 
 

Confirmamos las unidades a las que le queremos hacer copia.
 
 
Ahora si queremos restaurar el backup desde un punto, lo haremos de la siguiente manera.
Vamos a System and Security --> Backup and Restore y nos lleva a la última copia realizada.
 

 Seleccionamos Restore my files y clickcamos en Choose a different date.
 

Elegimos la fecha desde donde queremos restaurar la copia.
 

Le damos en Next --> Y nos pide indicar la localización. Elijo la localización original.
 

 Y empieza a restaurar la copia de seguridad. 
 
Fedora Server 
Imaginemos que nos toca administrar un servidor en remoto y nos piden que hagamos una copia de seguridad y que las probemos para ver si funcionan correctamente. Esto último parecerá obvio pero no lo es, ya que en el momento del desastre vamos a recuperar la información y no funciona. Entonces ¡Hay que hacer pruebas!. El otro problema que tenemos es que no hay interfaz gráfica, o sea, hay que tirar de comandos. Ahí es donde entra lo bueno que seamos en la terminal.
 
Vamos a conectarnos...
 

Echamos un vistazo a las particiones que tiene el servidor.
 
 
Lo primero que necesitamos es crear un directorio que contenga la copia y una vez creada exportarla. 
 
El comando que utilizaré es dd pero existen otros comandos que cumplen con creces este propósito. El comando dd es versátil para copiar, convertir y manipular datos de bajo nivel, como discos, particiones o archivos.
 
La sintaxis es la siguiente:  dd if=archivo_entrada of=archivo_salida
 
Ahora vamos a ejecutar la siguiente instrucción...
 
sudo dd if=/dev/nvme0n1 of=/home/q3it/Backup-Full.img bs=4M status=progress
  •  if=/dev/nvme0n1: Copiar el disco nvme0n1 en su totalidad.
  • of=/home/q3it/Backup-Full.img: Destino donde se va almacenar la copia. 
  • bs=4M: Especifica el tamaño del bloque de escritura. Usar un tamaño de bloque más grande puede mejorar la velocidad de escritura. 
  • status=progress: Muestra el progreso de la escritura. 

En la imagen anterior podemos ver que se creó el fichero de imagen Backup-Full.img. Hay que tener claro que el comando dd hace una copia idéntica del disco. Esto nos sirve como respaldo total del sistema, pero si queremos hacer copias incrementales o diferenciales tendríamos que utilizar otros comandos como tar o Rsync
 
Continuando, podemos empaquetar y comprimir el fichero para enviarlo a la máquina local.
 

Como vemos el archivo paso de tener 13G a 1,5M con el comando tar. Probemos a enviarlo a la máquina local.
 

Ahí tenemos el envío exitoso. Y con esto tendríamos una copia de seguridad almacenada en un dispositivo externo.
 
Para restaurar la unidad desde la imagen creada ejecutamos lo siguiente...
 
sudo dd if=/home/q3it/Backup-Full.img of=/dev/nvme0n1 bs=4M status=progress
 
NOTA: En el momento de ejecutar esta instrucción todo lo que contenga la copia sobrescribirá los datos de la unidad de destino, por lo que debes de estar seguro de seleccionar correctamente la unidad de destino antes de ejecutar el comando.
 
Backup Diferencial
En este tipo de backups sólo se copian los ficheros que se hayan modificado desde una fecha indicada. Se utiliza la opción -N seguido de la fecha. 
 
Imaginemos que queremos hacer un Backup-Full del directorio home/ con fecha Miércoles 18 de junio del 2025. Ejecutamos la siguiente instrucción...
  
tar -cpvzf "Backup-Full_`date +%Y%m%d`.tar.gz" /home/q3it/
 
 
En la imagen vemos varias aspectos interesantes:
  1. Eliminando la '/' inicial de los nombres --> Esto se da porque estamos utilizando rutas relativas, si especificáramos en la opción del comando tar la opción -P cambiaríamos a rutas absolutas. ¿ Qué consecuencias tiene esto? Que si restauro un backup con rutas absolutas sobrescribe todos los fichero y esto es muy peligroso, de lo contrario sólo crea un nuevo directorio.  
  2. El fichero cambió mientras se estaba leyendo --> Significa que el directorio está vivo, cambia en tiempo real.
  3. El peso del directorio es sólo de 17M. Tendremos presente este valor.
Días después queremos hacer un Backup-Diferencial con fecha de Viernes 20 de junio, haremos lo siguiente:
 
tar -cpzf "Backup-Dif_`date +%Y%m%d`.tar.gz" /home/q3it/ -N 2025-06-20


En la imagen se puede ver que el archivo Backup-Dif_20250620.tar.gz pesa 979M y el Backup-Full_20250618.tar.gz 17M. Una de las diferencias la aporta el fichero .iso, pero además el sistema ha generado más registros que no se pueden ver. 
  
Backup Incremental
El comando tar tiene la opción --listed-incremental, abreviada como -g. Cuando se agrupan archivos con esta opción se crea un archivo con datos sobre los archivos copiados para más adelante detectar los archivos nuevos o modificados y poder hacer copias incrementales.
 
Pongamos esto en práctica. Veamos como se van incrementando los registros de Logs de mi sistema. Como inicio necesitamos crear una copia total del directorio var/log/ y después vamos creando copias incrementales para que estas vayan consultando esta copia total como si fuese una tabla de registro. Para eso ejecutamos algo así: 
 
tar -czf Backup-Inc.tar.gz /var/log/ -g CopiaTotal.log
  • -c permite crear el archivo.
  • -v es el modo «verbose» o explicativo.
  • -z para comprimir con gzip el backup.
  • -f para indicar que el archivo será empaquetado.
  • -p preserva los permisos. 

El archivo de CopiaTotal.log almacenará metadatos que ayudará a la herramienta tar a determinar qué archivos han cambiado desde el último incremental, cuáles se han agregado, o cuales se han eliminado, de modo que tar podrá generar el siguiente backup incremental solamente de los cambios del anteriores. 

 
Analicemos la imagen, tenemos creados los ficheros Backup-Inc 13M y CopiaTotal.log 5,3K y necesitamos crear más backups incrementales para ver como varía el tamaño las nuevas copias.
 
tar -czf Backup-Inc-2.tar.gz /var/log/ -g CopiaTotal.log

  
Ahora si podemos ver como ha variado el tamaño del fichero Backup-Inc-2.tar.gz y la apreciación es clara, solo copió los nuevos Logs que se fueron añadiendo al fichero CopiaTotal.log. Dos días después hago otra Backup-Inc y veamos como ha crecido.
 
 
Si nos fijamos en el fichero Backup-Dif-3.tar.gz ha crecido aproximadamente un 80% con respecto al anterior.  Y así sucesivamente se irán incrementando los registros de Logs cada vez que hagamos una copia diferencial.