Welcome, Guest
You have to register before you can post on our site.

Username
  

Password
  





Search Forums



(Advanced Search)

Forum Statistics
» Members: 7.334
» Latest member: DavidM
» Forum threads: 3.485
» Forum posts: 19.933

Full Statistics

Online Users
There are currently 308 online users.
» 0 Member(s) | 306 Guest(s)
Bing, Google

Latest Threads
Carpetas inmutables en QT...
Forum: Tutoriales
Last Post: German_Ardila
09-10-2025, 12:46 AM
» Replies: 8
» Views: 2.183
Error disco inactivo
Forum: Cuestiones técnicas
Last Post: JoseRic
08-10-2025, 04:02 PM
» Replies: 5
» Views: 657
Error en TL-D800S RAID Gr...
Forum: Cuestiones técnicas
Last Post: Ganekogorta
05-10-2025, 05:28 PM
» Replies: 8
» Views: 1.660
Canal en Telegram QnapClu...
Forum: Anuncios, noticias y enlaces
Last Post: Ganekogorta
05-10-2025, 04:46 PM
» Replies: 122
» Views: 99.933
Problema archivos que des...
Forum: Cuestiones técnicas
Last Post: Ganekogorta
02-10-2025, 07:01 AM
» Replies: 1
» Views: 186
Gestor de contraseñas Ali...
Forum: VMs & Docker Containers
Last Post: yeraycito
27-09-2025, 02:32 PM
» Replies: 1
» Views: 256
Multimedia por toda la ca...
Forum: Firmware, Aplicaciones y Tutoriales
Last Post: Duende
24-09-2025, 06:19 PM
» Replies: 8
» Views: 7.505
Problema DNS Wireguard
Forum: Cuestiones técnicas
Last Post: Duende
24-09-2025, 12:31 PM
» Replies: 24
» Views: 6.124
Flashear interfaces de re...
Forum: Tutoriales
Last Post: yeraycito
22-09-2025, 07:32 PM
» Replies: 0
» Views: 273
Arcane gestión dockers
Forum: VMs & Docker Containers
Last Post: yeraycito
14-09-2025, 02:23 PM
» Replies: 0
» Views: 258

 
  Problema archivos que desaparecen y van a la papelera
Posted by: Alekovic - 01-10-2025, 08:08 PM - Forum: Cuestiones técnicas - Replies (1)

Hola,

tengo un problema que no sé si ha pasado mas, el caso es que me di cuenta el otro día que me faltan algunos archivos en carpetas, me dio por mirar en la papelera de reciclaje y estaban allí. Son archivos que lo mismo se crearon hace 3 días que son de hace 1 año. El NAS se utiliza para una pequeña empresa, ¿habría forma de ver quien ha eliminado esos archivos? ¿Puede ser por alguna configuración mal hecha con qsync? hay 6 o 7 personas con qsync sincronizando varias carpetas


  Flashear interfaces de red del nas y otros dispositivos
Posted by: yeraycito - 22-09-2025, 07:32 PM - Forum: Tutoriales - No Replies

A dia de hoy Qnap tiene en su catálogo una buena colección de nas que integran conexiones de red 2.5 G basadas en chips Intel sin olvidar que futuros nas que salgan también las incluirán. Los chips Intel que integran suelen ser el I-225V pero también podría ser el I-226V y estos modelos de chip llevan incorporados lo que llaman NVM que es una memoria no volátil y que se puede flashear. Intel saca de vez en cuando actualizaciones para esa memoria NVM que solucionan problemas de rendimiento, estabilidad, etc. Como acabo de decir estas actualizaciones se flashean, es decir, se " graban " en el propio chip y se mantienen ahí " toda la vida ".

Este tutorial va a explicar como flashear mi Qnap TS-264 que lleva conexiones de red basadas en el chip Intel I-225V pero este procedimiento, con algunos matices en determinados entornos, es universal. Es decir, es iguálmente válido en cualquier equipo que lleve chips Intel I-225V o I-226V

En mi caso he hecho este mismo procedimiento de flasheo o similar en mi router Opnsense ( FreeBSD ) y en mi minipc con Truenas ( Debian ), iguálmente se puede hacer en equipos con windows, etc.

Lo primero que tenemos que hacer es descargarnos a nuestro ordenador un archivo desde aquí:

https://versanetworks.app.box.com/s/l2wk...e8fc939ai9


Una vez descargado lo descomprimimos y nos aparecerá lo siguiente:



   



De los tres archivos sólo vamos a utilizar el archivo eeupdate64e

Para este tutorial he creado una carpeta en mi ordenador de nombre prueba ( puede ser cualquier otro ) y meter dentro ese archivo eeupdate64e junto al firmware para flasear el I-225V de mi TS-264



   



Yo he añadido ya el firmware porque ya sabía de antemano cual es el indicado, lógicamente vosotros en este punto del tutorial no lo sabéis, esto lo explico después.

El siguiente paso es activar la cuenta admin del nas y conectarnos por SSH con esa cuenta con Filezilla o similares, yo lo voy a hacer con Termius.

Una vez accedido paso a meterle esa carpeta de nombre prueba a mi nas.



   



Como he comentado antes dentro de la carpeta prueba tengo el archivo eeupdate64e + el firmware correspondiente.



   



Lo siguiente es dar permisos máximos al archivo eeupdate64e, también podemos hacerlo con el firmware aunque vosotros en este punto no tenéis firmware.



   



Lo siguiente es conectarnos al nas por SSH con la cuenta admin pero en este caso a través de Terminal y acceder a la carpeta prueba que acabamos de meter al nas.



   



Hago un ls para listar los dos archivos que tengo dentro de la carpeta prueba ( esto no es obligatorio, sólo por curiosidad )



   



El archivo eeupdate64e que tenemos dentro de la carpeta prueba en el nas no sólo va a servir para flashear el firmware sino también para darnos información antes de hacerlo. Sabiendo esto vamos a ejecutar el siguiente comando:

./eeupdate64e /ALL /ADAPTERINFO



   



Al ejecutarlo nos da bastante información interesante:



   



Mi Qnap TS-264 tiene dos interfaces de red ( NIC1 - NIC2 ) gestionados por el Intel I-225V

De lo demás nos interesa ver el EtrackID y la versión NVM

En mi caso el EtrackID de mis dos interfaces es el 80000182

La versión NVM que tienen es la 1.57

Estos dos parámetros hay que tenerlos muy en cuenta porque los tenemos que comparar.



   



Tanto para el I-225V como para el I-226V hay firmware de 1MB y de 2MB y para saber cual es el que se corresponde a nuestro equipo nos tenemos que fijar en el múmero EtrackID y en mi caso se corresponde al de 1MB

Antes hemos visto que mi I-225V tiene la versión de firmware NVM 1.57 así que lo siguiente es actualizarlo flasheando la versión 1.89 que es la última disponible actuálmente. En este punto vosotros seguís estando sin firmware así que una vez que hayáis identificado el firmware de vuestro dispositivo os descargais a vuestro ordenador el firmware correspondiente para flashearlo y actualizarlo.

Lo podéis hacer desde aquí:

https://github.com/BillyCurtis/Intel-i22...M-Firmware


Una vez descargado al ordenador el firmware correspondiente lo tendréis que pasar al nas por SSH y ponerlo dentro de la carpeta prueba del ejemplo.

Lo siguiente que vamos a hacer es flashear el firmware pero antes explico otra cosa. Al flashear el firmware este se graba en el chip y la consecuencia es que perdemos la conexión que tenemos con el nas. Mi TS-264 tiene dos interfaces de red y se van a flashear por separado así que es conveniente empezar con el interfaz que no esté en uso para no quedarnos sin conexión, una vez flasheado hacemos lo mismo con el segundo interfaz. En mi exclusivo caso yo no pierdo en ningún momento la conexión ya que tengo configurado un LACP

En mi caso mis dos interfaces de red están catalogados como NIC1 y NIC2 y como acabo de decir los voy a flashear por separado, en el comando de flasheo tenemos que añadir el nombre completo del firmware a flashear. Sabiendo esto voy a flashear mi NIC1 con su correspondiente firmware con el siguiente comando:


./eeupdate64e /NIC=1 /D FXVL_15F3_V_1MB_1.89.bin



   



Después de ejecutar el comando anterior el proceso de flasheo tarda menos de 10 segundos con el siguiente resultado:



   



Como todo ha ido bien procedo a flashear mi segundo interfaz de red NIC2 con el siguiente comando:

./eeupdate64e /NIC=2 /D FXVL_15F3_V_1MB_1.89.bin



   



Todo bien



   



Antes he comentado que en mi caso al tener configurado un LACP en el nas no iba a perder la conexión, aún así se puede ver que al flashear por separado si ha habido error de conexión.



   



Flasheado el nuevo firmware lo siguiente es REINICIAR el nas. Una vez reiniciado el nas si volvemos a acceder por SSH y terminal podémos comprobar que se ha flasheado corréctamente. Antes de explicarlo comento otra cosa, se me había olvidado que al reiniciar QTS se pierden todos los archivos y carpetas que hayamos metido por SSH así que cuando he ido a hacer la comprobación después de reiniciar el nas la carpeta prueba ya no estaba.



   



En fin, cosas que pasan, he vuelto a meter la carpeta prueba otra vez al nas por SSH para poder ejecutar el archivo eeupdate64e para hacer la comprobación.

La hago a través del siguiente comando:


./eeupdate64e /ALL /EEPROMVER



   


Al ejecutarlo aparece lo siguiente:



   



Si repasais el principio de este tutorial podréis ver que tenía la versión 1.57 del NVM y que el objetivo era actualizarla flasheando la versión 1.89 así que objetivo cumplido........ FIN.


También al principio comenté que este método de flasheo es, con algunos matices, universal. En el caso de mi minipc con el chip I-226V en el que tengo instalado Opnsense ( FreeBSD ) no sólo se utilizan otros comandos para flashear sino que también en lugar de utilizar el archivo eeupdate64e de este tutorial se utiliza otro archivo de nombre nvmupdate64e



   



En el caso de mi Truenas ( Debian ) que también tiene el I-226V el procedimiento es exáctamente el mismo que el explicado en este tutorial.



   


  Gestor de contraseñas AliasVault
Posted by: yeraycito - 20-09-2025, 07:14 PM - Forum: VMs & Docker Containers - Replies (1)

AliasVault es un gestor de contraseñas que llevo siguiendo desde hace ya bastante tiempo y si no lo he utilizado hasta ahora ha sido porque su instalación en docker era treméndamente compleja en la que se incluian demasiados elementos que no eran necesarios para todo el mundo, afortunádamente el desarrollador ha reducido esos requerimientos y a dia de hoy se instala muy fácilmente aunque ya explicaré que tiene alguna cosilla que otra.

AliasVault tiene todo lo que se le puede pedir a un buen gestor de contraseñas, funciona en local, admite 2FA, yubikey, generador de contraseñas, extensiones para los navegadores y aplicaciones tanto para IOS como para Android y junto a todo esto una interfaz de lo más cuidada.

Adicionálmente AliasVault tiene dos funciones extra que la competencia no tiene:

 - AliasVault te permite generar alias (identidades) únicos que puedes utilizar para registrarte en diferentes servicios, manteniendo oculta tu identidad real.

 - AliasVault tiene su propio servidor de correo electrónico integrado que le permite crear direcciones de correo electrónico únicas y recibir correos electrónicos directamente en AliasVault. No se requiere ningún servicio de correo electrónico de terceros.


Como una imagen es mejor que mil palabras os dejo un video en el que se ve esto último:   https://www.youtube.com/watch?v=T35VHmS8a-A&t=51s

Una de las cosas fundamentales en un gestor de contraseñas es la seguridad, en el caso de AliasVault su funcionamiento es el siguiente:

https://docs.aliasvault.net/architecture/


Lo siguiente en este tutorial debería de ser poner el compose para su instalación a través de Container Station o Portainer pero antes de hacerlo explico algo. En mi exclusivo caso personal no voy a hacer uso de las funciones extra de AliasVault, es decir, ni generar alias ni utilizar el servidor de correo integrado así que no necesito que vayan integradas en el compose de instalación. El resumen de esto consiste en que voy a poner dos compose, uno con la versión completa y otro con la versión mini.

ATENCION: Tanto si se escoge uno u otro compose para instalar AliasVault recomiendo encarecídamente hacerlo a través de Portainer.


Compose versión completa:


services:
   aliasvault:
      image: ghcr.io/aliasvault/aliasvault:latest
      container_name: aliasvault
      restart: always

      ports:
          - 94:80
          - 8449:443
          - 25:25
          - 587:587

      volumes:
          - /share/DockerData/aliasvault/database:/database
          - /share/DockerData/aliasvault/logs:/logs
          - /share/DockerData/aliasvault/secrets:/secrets

      environment:
          PUBLIC_REGISTRATION_ENABLED: true
          IP_LOGGING_ENABLED: true
          FORCE_HTTPS_REDIRECT: false
          SUPPORT_EMAIL: ""
          PRIVATE_EMAIL_DOMAINS: ""


A tener en cuenta:

 - El puerto 94 es el puerto de acceso http a AliasVault, el puerto 8449 es el puerto de acceso https y los puertos 25 y 587 son los referidos al servidor de correo.

 - Se utiliza la carpeta DockerData común a otros contenedores de este apartado del foro para las carpetas persistentes de AliasVault.

 - Los apartados SUPPORT EMAIL y PRIVATE EMAIL DOMAINS están sin rellenar. Una vez instalado AliasVault entrando en su configuración he visto apartados en los que se pueden configurar diréctamente esos parámetros pero como estamos instalando AliasVault a través de docker desconozco si funcionarán, en cualquier caso os dejo un enlace en el que se explica como configurarlos en el compose de instalación:

https://docs.aliasvault.net/installation...r-compose/



Compose versión mini:


services:
    aliasvault:
       image: ghcr.io/aliasvault/aliasvault:latest
       container_name: aliasvault
       restart: always

       ports:
           - 8449:443

       volumes:
           - /share/DockerData/aliasvault/database:/database
           - /share/DockerData/aliasvault/logs:/logs
           - /share/DockerData/aliasvault/secrets:/secrets

       environment:
           PUBLIC_REGISTRATION_ENABLED: true
           IP_LOGGING_ENABLED: true
           FORCE_HTTPS_REDIRECT: false


Si se compara este compose versión mini con la versión completa anterior se podrá ver que se ha dejado únicamente el puerto 8449 https para acceder a la interfaz de AliasVault y se han eliminado todos los parámetros y puertos relativos al servidor de correo electrónico.

Lógicamente si después de haber instalado AliasVault nos arrepentimos del compose escogido lo podemos editar desde Portainer añadiendo o quitando los parámetros necesarios.

Sabiendo todo esto instalamos el compose escogido de AliasVault y al hacerlo si nos vamos al log de AliasVault en Portainer nos encontramos con esto:



   



De todo lo que aparece nos interesa ver que se nos informa que el usuario Admin y sobretodo su contraseña no está configurado por defecto y se nos propone unos comandos para solucionarlo. El siguiente paso consiste en acceder a la consola del contenedor AliasVault desde Portainer y ejecutar el siguiente comando:

aliasvault reset-admin-password



   



Aunque lógicamente lo he tachado se puede ver que se ha generado una contraseña para el usuario admin que deberemos copiar y guardar, a continuación se nos pide que REINICIEMOS el contenedor AliasVault para que los cambios hagan efecto.

Lo siguiente es acceder a la interfaz de AliasVault pero antes de hacerlo explico algo, se podría decir que AliasVault tiene dos interfaces de acceso, el primero consiste en acceder a su configuración y el segundo es donde vamos a crear el baul o baules donde se van a guardar las contraseñas.

Vamos a empezar accediendo a la configuración de AliasVault, en mi caso he escogido la versión mini del compose de instalación así que para acceder a su interfaz lo hago a través de     https://iplocaldelnas:8449/admin



   



Usuario: admin

Contraseña: La que generamos y apuntamos anteriórmente.



   



No me voy a explayar sobre lo que se puede hacer aquí, gestión de usuarios, correo electrónico y configuraciones del servidor.

Como he comentado antes AliasVault tiene dos interfaces, para acceder al segundo que es el que permite el acceso al baul de las contraseñas en mi caso personal lo hago a través de   https://iplocaldelnas:8449



   



Como no tengo ningún baul ( vault ) creado procedo a su creación, lo primero que se me pide es crear un usuario:



   



Lo siguiente es ponerle una contraseña maestra:



   



Y con esto ya tenemos nuestro primer baul de contraseñas.



   



Si entramos en la configuración del baul de contraseñas podemos, si queremos, configurar una llave Yubikey para desbloquear el baúl en lugar de usar la contraseña maestra.



   



Podemos importar las contraseñas administradas por otros gestores de contraseñas que tengamos y también tenemos la posibilidad de exportar posteriórmente las contraseñas que tengamos en AliasVault.



   



También se nos propone instalar extensiones de AliasVault disponibles para todos los navegadores principales, asimismo también podemos instalar AliasVault en dispositivos móviles tanto en IOS como en Android.



   



Almacenar una contraseña en AliasVault es muy sencillo y visuálmente muy conseguido, el 2FA es admitido.



   



En mi modesta opinión todo se muestra muy cláramente y como digo reálmente bonito.



   


  Arcane gestión dockers
Posted by: yeraycito - 14-09-2025, 02:23 PM - Forum: VMs & Docker Containers - No Replies

A la hora de gestionar Dockers el rey indiscutible es Portainer pero eso no significa que no existan alternativas interesantes y una de ellas es la que va a protagonizar este tutorial. Arcane tiene básicamente las mismas funciones que Portainer con añadidos importantes sumando también una interfaz visuálmente muy bonita.

Lo instalaremos a través del siguiente compose:


services:
   arcane:
      image: ghcr.io/ofkm/arcane:latest
      container_name: arcane
      ports:
          - 3552:3552
      volumes:
          - /var/run/docker.sock:/var/run/docker.sock
          - /share/DockerData/arcane/arcane-data:/app/data
          - /share/DockerData/arcane/projects:/app/data/projects
      environment:
          - PUID=1000
          - PGID=100
          - ENCRYPTION_KEY=XXXXXXXXXXXXXXX
          - JWT_SECRET=YYYYYYYYYYYY
      restart: always


A tener en cuenta:

 - Tenemos que comprobar que los valores PUID - PGID se correspondan a nuestro usuario en el nas.

 - A la hora de montar los volúmenes del docker se ha utilizado la carpeta DockerData común en otros dockers de este apartado del foro.

 - JWT SECRET es una clave que tendremos que generar, podemos hacerlo aquí:  https://jwtsecrets.com/

 - ENCRYPTION KEY es otra clave distinta que tendremos que generar desde un terminal en windows - linux con el siguiente comando:

   openssl rand -base64 32



   



Creado el contenedor Arcane accedemos a su interfaz mediante    http://iplocaldelnas:3552



   



Usuario:  arcane

Contraseña:  arcane-admin



Una vez accedido con esas credenciales se nos pide cambiar la contraseña:



   



Si posteriórmente quisiéramos cambiar el nombre de usuario lo podremos hacer desde la interfaz creando un nuevo usuario con el nombre que nos apetezca, le ponemos una contraseña y le damos permisos de Administrador, por último eliminamos el usuario admin existente.

En el siguiente paso se nos pregunta si queremos activar las actualizaciones automáticas de los dockers que tengamos ( por limitaciones de este foro sobre el tamaño de las imágenes a subir procedo a su división).

Parte izquierda de la interfaz:



   



En la parte derecha de la interfaz en que nos encontramos podemos configurar como Arcane purga las imágenes descargadas de los dockers después de actualizarlos:



   



Estos ajustes podemos configurarlos ahora o saltarlos para cuando nos apetezca configurarlos después a través de la interfaz de Arcane.

El siguiente paso tiene que ver con la autentificación a la hora de acceder a Arcane:



   



Continuando con la primera configuración en el siguiente paso nos encontramos con esto:



   



Dejando ese ajuste tal como está al intentar continuar con la configuración inicial me ha dado error impidiéndome continuar, se solventa poniendo la ip local del nas:



   



Con este paso se termina la configuración y accedemos a su interfaz:

Parte izquierda:



   



Parte derecha:



   



Visualización de un contenedor en concreto:



   



Podemos ver más datos aparte de los que se ven en la imagen anterior.


Si tenemos más equipos aparte del nas con dockers instalados los podemos gestionar desde Arcane en el nas configurando en esos equipos lo que se conoce como un Agente, para poder hacerlo tenéis que seguir este tutorial:

https://arcane.ofkm.dev/docs/features/environments


  Problemas de descarga con qfile y windows
Posted by: Josenas2.0 - 04-09-2025, 12:23 PM - Forum: Cuestiones técnicas - Replies (1)

Hola, tengo un qnap ts 251, y mi hermano un qnap ts 451, ambos tenemos el mismo problema, cuando a través de qfile le creo un enlace de descarga para enviar por correo para que pueda descargar una peli que le envío de 20gb, o al contrario,  para él enviármela a mi, resulta que iniciamos la descarga el con w10 y yo w11, y tarda una eternidad, o ni siquiera termina de descargar, me dice descarga completa cuando lleva 8 o 10gb, o sea cuando a windows le parece.
Cuando le envío, o él me envía archivos muy pequeños, un video de 15-a 50mb por ejemplo,  la descarga es casi instantánea. Ambos tenemos fibra simétrica de 1Gb. ¿Puede alguien ayudarme?, gracias.


  Qumagie 2.7.2 accesos directos no funcionan
Posted by: Sinco - 30-08-2025, 01:58 PM - Forum: Firmware, Aplicaciones y Tutoriales - No Replies

Hola. A ver si alguien me puede echar una mano. 

Desde que se actualizó Qumagie 2.7.1 a 2.7.2, los enlaces directos que se ponen en la barra del navegador para acceder a qumagie, sin tener que pasar por el panel de control del NAS, han dejado de funcionar y no consigo restablecer su funcionamiento de ninguna forma. He cerrado y abierto sesión, he creado nuevamente los enlaces y por último he reiniciado el NAS y nada ha funcionado.

Ahora para abrir Qumagie hay que ir antes al panel de control del NAS y pinchar en el icono de la app.

Si alguien sabe como solucionarlo por favor que explique como.

Un saludo


  Servidor Baikal de calendarios y contactos
Posted by: Ganekogorta - 23-08-2025, 12:09 AM - Forum: VMs & Docker Containers - No Replies

Hola

En este post vamos a ver como desplegar un docker de Baikal.
Baikal es una aplicación web que permite a varios usuarios alojar sus citas e calendarios y sus contactos no dependiendo de servidores de terceros.

No es una aplicación pesada ya que en realidad en ella sólo se gestionan los datos que envíen los equipos clientes y hay una pequeña gestión web para crear usuarios.

Se que hay un qpkg para la aplicación en MyQnap.org , pero pide tiene una dependencia de Apache84. Y ese Apache84 es un paquete de pago de 16€. 

En nuestro caso no tenemos esa dependencia y el costo es 0€  Wink

Requisitos:
1-tener instalado Container Station para poder lanzar dockers
2-tener instalada y activa una BBDD MariaDB o MySQL.
3-tener una carpeta compartida o subcarpeta dentro de una compartida para dejar datos de forma persistente
3-tener acceso a la consola de comandos de la NAS.

Requisitos recomendables:
1-tener una dns publica para acceder a la nas desde el exterior.
2-tener un dominio para gestionar nuestros dns. Los hay baratos sobre los 12€ al año (si vas a adquirir revisa las renovaciones)
3-usar un proxy inverso tipo nginx para aportar un certificado http y un extra de seguridad
4-tener Cloudflare web como gestor de nuestros dns, para ocultar nuestra ip pública real

Para el punto 1, es importante no estar bajo CGNAT, ya que no podríamos acceder desde el exterior haca nuestra nas.
Para el punto 2, he preferido usar nginx proxy manager, pero podemos usar traefik o bien el integrado en la nas.

Los datos que generemos van a estar repartidos en dos ubicaciones:
-la base de datos de MariaDB
-la carpeta persistente

Lo indico ya que deberemos hacer copia de seguridad de ambos contenidos.
Siempre debemos tener copias de seguridad de nuestros datos, que luego vienen los sustos  Wink


Indice

1-Creación de la base de datos y un usuario en MariaDB
2-Creación y despliegue del docker
3-Accesos web y creación de usuarios en Baikal
4-Accesos desde el exterior
5-Configuración de clientes en móvil IOs
6-Configuración de clientes en móvil Android
7-Configuración de clientes en Thunderbird




1-Creación de la base de datos y el usuario en MariaDB

Estoy dando por supuesto que ya tenemos instalada y activa la aplicación MariaDB en nuestra nas. Pero podríamos tenerla en otra máquina distinta.

Para este ejemplo usaré MariaDB10

   

En este caso el puerto que se usa es el 3307, pero puede ser otro.

Se puede hacer la gestión de MariaDB enteramente por consola ssh, pero es mas gráfico y comprensible si lo hacemos por entorno gráfico.
Para ello usaremos la aplicación PhpMyAdmin instalabre desde nuestro App Center.

En su momento ya se describió en este otro post de creación de una BBDD en MariaDB usando PhpMyAdmin


Para este caso vamos a crear una base de datos bacía de nombre "baikal_db" y un usuario "baikal" con permisos en esa base de datos desde cualquier host (%). 
La clave será una de nuestra elección. Apuntad estos tres datos ya que posteriormente hemos de usarlos.

Pongo unas capturas del proceso

Nos logueamos en 
   

En la pantalla principal, pulso sobre el botón de agregar una nueva base de datos
   

Le doy nombre y la creo. En este caso "baikal_db"

   

Me aparecerá en la lista de la izquierda

   

Ahora crearemos un usuario para esa base de datos de nombre "baikal" y contraseña "clave_de_baikal"
Para ello selecciono la base de datos de "baikal_db" de la izquierda y después selecciono la lengüeta de privilegios.
En la parte inferior de la pantalla está la opción de "Agregar cuenta de usuario"

   

Asignamos nombre, clave y permisos

   

   

Pulsamos luego sobre continuar y ya tenemos nuestro usuario con los permisos adecuados.

   

Ya podemos cerrar PhpMyAdmin.


2-Creación y despliegue del docker

Aquí usaremos la consola de ssh para lanzar el siguiente comando de creación del docker
Code:
docker run -d --name baikal --restart unless-stopped -p 18080:80 -v /share/DockerData/baikal/data:/var/www/baikal/Specific -v /share/DockerData/baikal/config:/var/www/baikal/config ckulka/baikal:nginx

El comando usa dos carpetas persistentes que están apuntando a un carpeta compartida de nuestra nas. En el ejemplo la carpeta compartida es "DockerData".
En su interior de forma automática se creará la carpeta "baikal" y dentro de ellas las de "data" y "config"

He puesto como puerto de publicación el 18080, pero puede ser cualquiera de nuestra elección que no esté por otros servicios.

En la consola veremos la descarga, descompresión e instalación del docker

   

Tras este proceso veremos una pantalla similar a la siguiente

   

Y con esto hemos acabado de instalar el contenedor.

3-Accesos web y creación de usuarios en Baikal

Si lo hemos hecho bien, abrimos un navegador y si vamos a http://ip_nas:18080 veremos el asistente de la primera configuración:

   

Vamos rellenando los datos y los adaptamos a nuestra instalación.
Pondremos una clave de usuario administrador que debemos apuntar ya que la usaremos para crear mas usuarios de Baikal en un futuro.

   

Ahora pasamos a la base de datos, que por defecto usa sqlite.
La cambiamos a Mysql y rellenamos con los datos que pusimos en MariaDB.

   

El motivo de usar MariaDB frente a sqlite, es que su motor es mas ágil si tenemos volúmenes importantes de datos y permite una mejro gestión de copias de seguridad.

Una vez acabado el asistente, este no vuelve a estar disponible.

   

Una vez salgamos del asistente y nos identifiquemos en la web, veremos siguiente dashboard:

   

En el menú superior elegimos usuarios y recursos para agregar una nuevo

   

Para el ejemplo creo al usuario "usuario" con su clave.

   

   

Por defecto se han creado un calendario pro defecto y una agenda de direcciones por defecto.

Podremos crear nuevas desde los equipos clientes o bien crearlas desde la web

Para crear un calendario de "viajes" lo haríamos de la siguiente forma:

   

   

En el campo tokenID puedo poner cualquier cadena única en minúsculas. 
Para no complicarlo uso el nombre del calendario en minúsculas. Una vez creado NO puede ser modificado

   

He activado el uso de notas en las citas.

Y una vez creado, lo veremos en la lista

   

Podemos operar de forma similar con la agenda de contactos.
Lo normal para todos es tener una única agenda de contactos, pero puede haber usuarios que quieran tener mas de una.
Por ejemplo para tener una personal y una laboral.

Con esto ya hemos acabado con la gestión de usuarios y ya tenemos operativo nuestro servidor caldav y cardav.


4-Accesos desde el exterior

Ahora mismo nuestro servidor sólo es accesible si estamos en la misma red que la nas.

Si no tenemos un dominio propio podemos acceder a Baikal mediante una VPN (Wireguard u OpenVPN)
Es decir podríamos acceder al servidor Baikal como si estuviésemos en la red de la nas.

Si tenemos un dominio personal y tenemos nuestra gestión de dns. Podemos definir una nueva que apunte a nuestra ip publica.
Y para agregar una capa de seguridad debemos usar un proxy inverso (Nginx, Traefik, el de QTS)  que nos aporta el certificado

En función de que usemos o no los accesos desde el exterior, tendremos las siguientes direcciones para acceder a los calendarios y agendas.

Aquí tenemos las del primer calendario que es el de defecto.
http://ip_nuestra_nas:18080/dav.php/cale...o/default/
https://baikal.mi_dominio.eus/dav.php/ca...o/default/

Las direcciones del calendario de viajes son:
http://ip_nuestra_nas:18080/dav.php/cale...io/viajes/
https://baikal.mi_dominio.eus/dav.php/ca...io/viajes/

Las direcciones de la agenda de defecto son:
http://ip_nuestra_nas:18080/dav.php/addr...o/default/
http://baikal.mi_dominio.eus/dav.php/add...o/default/

y como credenciales usaremos "usuario" y la clave que definimos anteriormente.

Cuando lo configuremos en clientes de correo podemos usar las genéricas:
http://ip_nuestra_nas:18080/dav.php/addressbookst
http://baikal.mi_dominio.eus/dav.php/addressbooks

http://ip_nuestra_nas:18080/dav.php/calendars
https://baikal.mi_dominio.eus/dav.php/calendars

En esto últimos casos, la aplicación cliente nos mostrará y permitirá seleccionar que calendarios o agendas queremos agregar.




5-Configuración de clientes en móvil IOs

Para agregar los calendarios o agendas en iOS iremos a Ajustes y buscaremos "cuentas" o "cuentas de Mail" en función de la versión de iOS.

Pulsamos añadir cuentas y seleccionamos de la lista la inferior "otras".

De ahí seleccionamos "Añadir cuenta CardDav"

   

Rellenamos los datos del usuario y su clave. En la dirección del servidor pondremos
"ip_nas:18080/dav.php" donde ip_nas es la ip privada de la nas

   

Como estamos sin https, nos dará un aviso de ssl ya que internamente no está activado.

   

la cuenta será verificada

   

Y luego ya estará agregada

   

Para hacer una comprobación rápida compruebo desde el gestor web que el "usuario" NO tiene contactos

   

Ahora desde el móvil agregamos uno

   

Y si vamos de nuevo al entorno web veremos que ha aumentado el número de contactos del usuario "usuario".

   

Para los calendarios es muy simular ya que hemos de ir al mismo menú de cuentas pero hay que agregar "Añadir cuenta CalDAV"

   

Introducimos los datos de dirección ("ip_nas:18080/dav.php" donde ip_nas es la ip privada de la nas) , usuario y clave

   

Nos da el aviso para que lo intente sin ssl.

   

Se hace la comprobación

   

Nos ha activado citas y recordatorios

   

Ahora ya vemos que ha sido agregada y podemos agregar citas desde iOS
   

6-Configuración de clientes en móvil Android

Sorprendentemente Android NO integra de forma nativa los calendarios CalDAV y la libretas de direcciones CardDAV.

Pero hay programas que si lo hacen como DAVx5 (gracias pepebetis por recomendarlo Wink )  que permite sincronizar con cuentas de Google, Apple y otros CalDAV como Baikal.

Tras instalarlo comienza su asistente, donde introduciremos la dirección, el nombre de usuario, la clave.

Tendremos que dar permisos a la aplicación para que pueda acceder a calendarios y contactos.
Un resumen de capturas se ve en la siguiente secuencia de imágenes

     

(No he podido ponerlas por separado ya que el post tiene un límite de 50 imágenes)

En la captura 12 se ve que nos aparece en la aplicación de contactos el de "pruebas" que es el que teníamos previamente en Baikal

7-Configuración de clientes en Thunderbird

Thunderbird es un programa cliente de correo gratuito y en mi opinión uno de los mejores.
Soporta muchos tipos de servidores de correo, calendarios y contactos. 
Además hay una infinidad de complementos que lo potencian.
En las últimas versiones ya se incorpora de forma nativa la gestión de los estándares CalDAV y CardDAV.

7.1-Agregando calendarios
La pantalla principal donde podemos ver los calendarios es la siguiente:
En el ejemplo vemos uno local llamado Casa

   

Para agregar uno nuevo pulsamos en la parte inferior izquierda en "Nuevo calendario"

Se nos abre un asistente donde primero elegimos un calendario "En la red"

   

Después rellenamos con los datos del nombre del usuario y la dirección de calendario ( en este caso interna de nuestra red)

   

Después nos pedirá la contraseña de las anteriores credenciales

   

Tras aceptar nos presentará todos los calendarios del usuario "usuario".
Lo normal es incorporar todos, pero podemos elegir los que nos interesen.

   

Después ya podemos ver que en la lista de calendarios ya tenemos disponibles los que hemos agregados

   

7.2 Agregando la agenda de contactos

El proceso es similar al de los calendarios.
La pantalla de gestión de contactos y agendas es la siguiente:

   

Pulsamos en el botón de agregar agenda y se no presenta un desplegable de tipo. 
Elegimos "Añadir libreta de direcciones CardDAV"

   

Después empieza el asistente con la siguiente ventana, donde escribimos el nombre del usuario de la cuenta y la dirección de servidor Baikal
En este caso al ser local es http://ip_nas:18080/dav.php

   

Luego nos pide la clave del usuario "usuario"

   

A continuación se nos presenta una ventana para que seleccionemos las libretas disponibles en esa cuenta.
En nuestro caso sólo hay una.

   

Tras pulsar el botón de continuar ya veremos que hay una nueva libreta de direcciones llamada "Default Address Book".
Evidentemente podemos darle otro nombre, haciendo clic con el botón secundario, propiedades y escribir el nuevo nombre.

Tras la adicción ya vemos la nueva agenda y el único contacto de pruebas que creamos anteriormente.

   


En este post he detallado algo mas lo de los programa clientes de iOS, Android y Thunderbird.

Thunderbird al ser un programa de los mas estándar, nos permite hacer de conversor/intermediario de otros calendarios ya que con un copia pega podemos hacerlo entre calendarios/contactos.

Mi recomendación si tenéis un historial importante en otros servidores es que:
-exportéis en formato ICS desde el servidor origen
-importéis en un nuevo calendario local temporal de Thunderbird
-copiéis de ese calendario local al calendario de red (Baikal CalDAV en nuestro caso)


  Duplicación de redes bridge personalizadas tras reinicio del NAS en Container Station
Posted by: nebur - 21-08-2025, 10:16 AM - Forum: Cuestiones técnicas - Replies (1)

Contexto:
- NAS con Container Station, contenedores gestionados con archivos YML.
- Un contenedor sin red específica (bridge por defecto) funciona correctamente tras reinicio.
- Otro con red creada con docker network create (driver qnet) tampoco presenta problemas.
- Varios contenedores usan redes bridge personalizadas creadas manualmente con docker network create (driver bridge) para comunicación interna, declaradas como external: true en el YML.

Incidencia:
Tras reiniciar el NAS, las redes bridge personalizadas se duplican:
- Aparecen las redes originales (creadas manualmente) junto a redes nuevas con las mismas configuraciones de IP pero nombres autogenerados (ej: br-xxxx).
- Esta duplicación causa conflictos de routing y pérdida de comunicación entre contenedores.

Consecuencia:
Requiero eliminar manualmente contenedores, eliminar ambas redes (las originales y las autogeneradas), recrear las redes manuales y luego reinstanciar los contenedores. Esto rompe la automatización y es inviable ante reinicios no planificados.

Consulta:
¿Por qué Container Station/Docker recrea automáticamente estas redes bridge personalizadas tras el reinicio, duplicándolas y causando conflictos? ¿Es un comportamiento esperado o existe una configuración para evitarlo?


  Plantillas Tautulli
Posted by: Oroimenak - 19-08-2025, 05:35 PM - Forum: Tutoriales - Replies (1)

Hola a todos, después de que el compañero Ganekogorta hiciese un tutoría sobre Docker Tautulli, he decidido añadir un extra mas para que se nos notifique mediante Telegram tanto a nosostros como a la gente con la que compartimos nuestra videoteca de Plex unas pequeñas plantillas.
PD: No se porque los emojis cuando lo edito aparecen pero luego una vez guardado aparecen solo interrogaciones, os dejo aquí de donde he cogido todos esos emojis, simplemente seleccionar el que queremos y ponerlo en plantilla delante del nombre de la sección donde sale la "?"
https://emojicopy.com

tendría que salir de la siguiente forma:

   

Es necesario crear un bot y un grupo y añadir a la gente que queramos que sean notificados, cosa que no explicare ya que se ha explicado varias veces.

Lo que necesitaremos sera:

- Un servidor Plex
- Servidor Tautulli
- 1 Bot o 2, según cada uno, yo tengo 2 uno para que avise a la gente de los nuevos añadidos, caidas del servidor etc... y otro que me avisa de los visitados para ver si el servidor esta sufriendo o no.


Empezamos como lo tengo yo, con 2 bots

Notificaciones de nuevos añadidos y Servidor Up/Down
 
Primeros Pasos:

  1. Nos logearemos en Tautulli e iremos a configuración/Notification Agents y le daremos a: add a new Notification agent y seleccionamos Telegram

   

    2. Ahora rellenamos con nuestros datos los apartados de: Telegram Bot Token y Telegram Chat ID

   

    3.  Nos dirigidos la pestaña de Triggers y seleccionamos los que queramos, en nuestro caso:
       

   4. Una vez que tengamos todo esta seleccionados llega el momento de rellenar con estos datos las plantillas que queremos que se nos muestren en telegram, nos dirigimos entonces a Text y seleccionamos los triggger que hemos seleccionado previamente para rellenar los datos con estas plantillas, en nuestro caso han sido: Recently added, Plex server Down, Plex server back up, debemos rellenar los campos: Subject Line y Message Body.


         

Plantillas
  • Nuevo Añadido
Quote:Subject Line

Nuevo Añadido ({server_name})

Message Body

<movie>{added_date} {timestamp}
?❗ <b>NUEVA PELÍCULA</b>❗ <b>{title}</b> ({year}).
<b>? Biblioteca:</b> <i>{library_name}.</i>
<b>? Colecciones:</b> <i>{collections}.</i>
<b>? Estreno:</b> <i>{release_date}.</i>
<b>? Género:</b> <i>{genres}.</i>
<b>⏳ Duración:</b> <i>{duration} minutos.</i>
<b>? Director:</b> <i>{directors}.</i>
<b>? Actores:</b> <i>{actors:[:5]}.</i>
<b>? Productora:</b> <i>{studio}.</i>
<b>? Valoración:</b> <i>{rating}/10.</i>
<b>? Clasificación por edad:</b> <i>{content_rating}.</i>
<b>? Resolución:</b> <i>{video_resolution}p.</I>
<b>? Tamaño:</b> <i>{file_size}.</i>
<b>? Framerate:</b> <i>{video_framerate}.</i>
<b>? Bitrate:</b> <i>{bitrate} kbps.</i>
<b>? Contenedor:</b> <i>.{container}</i>
<b>? Codec de video:</b> <i>{video_codec}.</i>
<b>? Codec de audio:</b> <i>{audio_codec!u} {audio_channel_layout}.</i>
<b>? Codec de subtítulos:</b> <i>{subtitle_codec!u}.</I>
<b>? Sinopsis:</b> <i>{summary}</i>
<b>? Enlace a "The Movie Database":</b> {themoviedb_url} </movie>
<episode>{added_date} {timestamp}
?❗ <b>NUEVO EPISODIO</b>❗
<b>"Episodio {episode_num} - {episode_name}"</b> de la <i>temporada
{season_num}</i> de <b>{show_name}.</b>
<b>? Biblioteca:</b> <i>{library_name}.</i>
<b>? Emisión:</b> <i>{air_date}.</i>
<b>? Género:</b> <i>{genres}.</i>
<b>⏳ Duración:</b> <i>{duration} minutos.</i>
<b>? Director:</b> <i>{directors}.</i>
<b>? Actores:</b> <i>{actors:[:5]}.</i>
<b>? Productora:</b> <i>{studio}.</i>
<b>? Valoración:</b> <i>{rating}/10.</i>
<b>? Clasificación por edad:</b> <i>{content_rating}.</i>
<b>? Resolución:</b> <i>{video_resolution}p.</i>
<b>? Tamaño:</b> <i>{file_size}.</i>
<b>? Framerate:</b> <i>{video_framerate}.</i>
<b>? Bitrate:</b> <i>{bitrate} kbps.</i>
<b>? Contenedor:</b> <i>.{container}</i>
<b>? Codec de video:</b> <i>{video_codec}.</i>
<b>? Codec de audio:</b> <i>{audio_codec!u} {audio_channel_layout}.</i>
<b>? Codec de subtítulos:</b> <i>{subtitle_codec!u}.</I>
<b>? Sinopsis:</b> <i>{summary}</I>
<b>? Enlace a "The TV Database":</b> {thetvdb_url} </episode>
<season>{added_date} {timestamp}
?❗ <b>NUEVA TEMPORADA</b>
<b>Temporada {season_num}</b> de <b>”{show_name}”.</b>
<b>? Biblioteca:</b> <i>{library_name}.</i>
<b>? Número de episodios disponibles:</b> <i>{episode_count}</i>
<b>? Género:</b> <i>{genres}.</i>
<b>⏳ Duración por episodio:</b> <i>{duration} minutos.</i>
<b>? Actores:</b> <i>{actors:[:5]}.</i>
<b>? Productora:</b> <i>{studio}.</i>
<b>? Clasificación por edad:</b> <i>{content_rating}.</i>
<b>? Sinopsis:</b> <i>{summary}</i>
<b>? Enlace a "The TV Database":</b> {thetvdb_url} </season>
<show>{added_date} {timestamp}
?❗ <b>NUEVA SERIE</b>❗ <big><b>{show_name}</b> ({year}).</big>
<b>? Biblioteca:</b> <i>{library_name}.</i>
<b>? Primera emisión:</b> <i>{air_date}.</i>
<b>? Número de temporadas disponibles:</b> <i>{season_count}</i>
<b>? Género:</b> <i>{genres}.</i>
<b>⏳ Duración por episodio:</b> <i>{duration} minutos.</i>
<b>? Actores:</b> <i>{actors:[:5]}.</i>
<b>? Productora:</b> <i>{studio}.</i>
<b>? Valoración:</b> <i>{rating}/10.</i>
<b>? Clasificación por edad:</b> <i>{content_rating}.</i>
<b>? Sinopsis:</b> <i>{summary}</i>
<b>? Enlace a "The TV Database":</b> {thetvdb_url} </show>

  • Servidor Caído
xxxxxx Aqui devemos sustituir una dirección a una imagen que queramos ver, en mi caso he subido una a imgur.
Quote:Subject Line

❗ <b>INFORMACION</b>❗

Message Body

{datestamp} {timestamp}
<a href="xxxxxxxxxx>.</a>
El <b>Servidor Plex esta Caído</b>, sentimos las molestias.
<b>Intentaremos solucionarlo lo antes posible. </b>
Mientras tanto salga de casa y tomese una caña, <b>le avisaremos en cuanto este solucionado.</b>
Gracias

  • Servidor en Funcionamiento
Quote:Subject Line

❗ <b>INFORMACION</b>❗

Message Body

{datestamp} {timestamp}

<a href="https://i.imgur.com/vI8P5pB.jpg">.</a>.
El <b>Servidor Plex esta Operativo, sentimos las molestias.</b>
Como puede observar <b>somos muy eficientes con nuestro trabajo </b>para que usted pueda disfrutar de una agradable velada del mejor cine.

<b>Gracias</b>


Nos quedarían las notificaciones por telegram de esta forma:

               


Notificaciones de Reproduccion

        1. En este ejemplo usaremos para que notifique los visitados al Administrador del servidor Plex de tal forma que pueda ver si esta el servidor sufriendo o no y ver que se esta reproduciendo, esto es meramente informativo se puede hacer o no. 
       2. Aqui necesitaremos crear otro agente y añadir datos de otro bot y otro grupo diferente al de nuevos añadidos ya que solo seremos nosotros los Admin los que veremos dicha información. 
       3. Los pasos a seguir son los mismo que antes a diferencia de la pantillas que pondrá acontinuacion.
       
       4. En mi caso he seleccionado solamente estos trigger: 
     

Plantillas
Reproduccion
Quote:
Subject Line

❗ <b>NUEVA REPRODUCCIÓN</b>❗

Message Body

<movie>{datestamp} {timestamp}

<b>{user}</b> ha iniciado la reproducción de <b>”{title}”.</b>

<b>? Dispositivo:</b> <i>{player}.</i>
<b>? Sistema operativo:</b> <i>{platform}.</i>
<b>? Reproductor:</b> <i>{product}.</i>
<b>? Tipo de transcodificación:</b> <i>{transcode_decision}.</i>
<b>? Resolución de la reproducción:</b> <i>{stream_video_resolution}.</i>
<b>? Calidad de la reproducción:</b> <i>{quality_profile}.</i>
<b>? Bitrate:</b> <i>{bitrate} kbps.</i>
<b>⏳ Tiempo restante de reproducción:</b> <i>{remaining_duration} minutos.</i>
</movie>

<episode>{datestamp} {timestamp}

<b>{user}</b> ha iniciado la reproducción del <b>”Episodio {episode_num} -
{episode_name}”</b> de la <i>temporada {season_num}</i> de <b>{show_name}.</b>

<b>? Dispositivo:</b> <i>{player}.</i>
<b>? Sistema operativo:</b> <i>{platform}.</i>
<b>? Reproductor:</b> <i>{product}.</i>
<b>? Tipo de transcodificación:</b> <i>{transcode_decision}.</i>
<b>? Resolución de la reproducción:</b> <i>{stream_video_resolution}.</i>
<b>? Calidad de la reproducción:</b> <i>{quality_profile}.</i>
<b>? Bitrate:</b> <i>{bitrate} kbps.</i>
<b>⏳ Tiempo restante de reproducción:</b> <i>{remaining_duration} minutos.</i>
</episode>

Reproduccion detenida
Quote:Subject Line
❗ <b>REPRODUCCIÓN FINALIZADA</b>❗

Message Body
<movie>{datestamp} {timestamp}


<b>{user}</b> ha finalizado la reproducción de <b>"{title}".</b>

<b>⏳ Tiempo restante de reproducción:</b> <i>{remaining_duration} minutos.</i>
</movie>

<episode>{datestamp} {timestamp}

<b>{user}</b> ha finalizado la reproducción del <b>"Episodio {episode_num} - {episode_name}"</b> de la <i>temporada {season_num}</i> de <b>{show_name}.</ b>

<b>⏳ Tiempo restante de reproducción:</b> <i>{remaining_duration} minutos.</i>
</episode>

Reproduccion pausada
Quote:Subject Line
❗ <b>REPRODUCCIÓN PAUSADA</b>❗

Message Body

<movie>{datestamp} {timestamp}

<b>{user}</b> ha parado la reproducción de <b>"{title}".</b>

<b>⏳ Tiempo restante de reproducción:</b> <i>{remaining_duration} minutos.</i>
</movie>

<episode>{datestamp} {timestamp}

<b>{user}</b> ha parado la reproducción del <b>"Episodio {episode_num} - {episode_name}"</b> de la <i>temporada {season_num}</i> de <b>{show_name}.</b>

<b>⏳ Tiempo restante de reproducción:</b> <i>{remaining_duration} minutos.</i>
</episode>

Inicia de nuevo de la reproducción
Quote:Subject Line
❗ <b>RESUMEN DE REPRODUCCIÓN</b>❗

Message Body
<movie>{datestamp} {timestamp}

<b>{user}</b> continúa la reproducción de <b>”{title}”.</b>

<b>? Dispositivo:</b> <i>{player}.</i>
<b>? Sistema operativo:</b> <i>{platform}.</i>
<b>? Reproductor:</b> <i>{product}.</i>
<b>? Tipo de transcodificación:</b> <i>{transcode_decision}.</i>
<b>? Resolución de la reproducción:</b> <i>{stream_video_resolution}.</i>
<b>? Calidad de la reproducción:</b> <i>{quality_profile}.</i>
<b>? Bitrate:</b> <i>{bitrate} kbps.</i>
<b>⏳ Tiempo restante de reproducción:</b> <i>{remaining_duration} minutos.</i>
</movie>

<episode>{datestamp} {timestamp}



Attached Files Thumbnail(s)
                       
                   


  Backrest copia seguridad dockers
Posted by: yeraycito - 10-08-2025, 10:06 PM - Forum: VMs & Docker Containers - No Replies

Desde hace ya bastante tiempo está de moda instalar aplicaciones a través de Docker con todas las ventajas que eso implica y que no son necesarias explicarlas. En todos los programas y los dockers no son una excepción, es muy recomendable hacer copias de seguridad de sus configuraciones para que en caso de que exista algún problema al restaurarlas todo vuelva a la normalidad. Aunque muchos dockers funcionan sin necesidad de hacerlo en este apartado del foro relativo a dockers siempre se explica que es muy recomendable crear carpetas persistentes Dockerdata para que esas configuraciones de los dockers sean accesibles y se pueda hacer copia de seguridad de ellas.

A la hora de hacer copias de seguridad de las carpetas persistentes de los dockers no hay mucho donde escoger y de lo poco que hay puede que no convenga del todo según los casos...... algunos sistemas automatizados necesitan mapear por partes los dockers y otros, por el contrario, lo hacen al completo sin ninguna discriminación lo cual es un problema gordo si, por ejemplo, se tiene mapeado un volumen de Plex con 2 TB de películas sin olvidar que mayórmente los sistemas actuales de copia de seguridad de dockers funcionan a través de scripts o consola.

En este post voy a tratar de explicar como instalar y configurar un docker llamado Backrest que tiene interfaz gráfica, permite copias de seguridad de los dockers de forma programada a voluntad, restauración de esas copias si fuera necesario, notificaciones a través de distintos servicios, etc, etc.

El compose para su instalación a través de Container Station o Portainer es el siguiente:


services:
    backrest:
        image: garethgeorge/backrest:latest
        container_name: backrest
        volumes:
           - /path/to/backrest/data:/data
           - /path/to/backrest/config:/config
           - /path/to/backrest/cache:/cache
           - /path/to/backrest/tmp:/tmp
           - /path/to/backup/data:/userdata
           - /path/to/local/repos:/repos
           - /var/run/docker.sock:/var/run/docker.sock:ro
       environment:
           - BACKREST_DATA=/data
           - BACKREST_CONFIG=/config/config.json
           - XDG_CACHE_HOME=/cache
           - TMPDIR=/tmp
           - TZ=Europe/Madrid
       ports:
           - 9898:9898
       restart: always


A tener en cuenta:

 - Los directorios /path/to/backrest hacen referencia a los directorios de la configuración de Backrest que hay que adecuarlos a las carpetas compartidas del nas.

 - El directorio /path/to/backup hace referencia a la carpeta compartida del nas Dockerdata en la que se guardan las configuraciones de los dockers que tengamos. Si 
   esas configuraciones están por separado en otros directorios podemos mapear la carpeta compartida superior.

 - El directorio /path/to/local/repos hace referencia a la carpeta compartida principal del nas en la que queramos guardar las copias de seguridad de Backrest. Esa 
   carpeta puede ser del propio nas o de otro dispositivo de la red local que tengamos mapeado.

Adicionálmente a través de la interfaz de Backrest podemos configurar distintos servicios en la nube como destinos de esas copias de seguridad:

 - Backblaze B2: b2:bucket or b2:bucket/prefix

- AWS S3: s3:bucket or s3:bucket/prefix

- Google Cloud: gs:bucket:/ or gs:bucket:/prefix

- SFTP: sftp:user@host:/path/to/repo

- Rclone: rclone:remote:path (requires rclone installation)


Instalado el compose de Backrest en el nas accedemos a su interfaz mediante el navegador a través de    http://iplocaldelnas:9898

Por defecto Backrest no requiere de usuario - contraseña para acceder a su interfaz así que al hacerlo nos propone su creación voluntaria:



   



El funcionamiento principal de Backrest se basa en dos premisas:

 - Creación de lo que denominan Repos que consisten en las carpetas donde se guardarán las copias de seguridad de los dockers de Backrest

 - Creación de Planes de copia de seguridad.

Estas dos configuraciones las podemos hacer por separado para cada docker que nos interese hacer copia de seguridad. Para este tutorial paso a explicar a continuación como realizar esos procesos con un único docker.

Lo primero que tenemos que hacer a través de la interfaz de Backrest es añadir un nuevo Repo



   



 - Le ponemos el nombre que nos apetezca

 - En el compose de instalación asignamos la ruta del nas para guardar los repos /path/to/local/repos:/repos así que se la indicamos también ( esa carpeta repos nos       aparece en un desplegable clickando en el apartado correspondiente ) añadiendo la carpeta en la que queramos se guarde la copia de seguridad de ese docker en     concreto, en este caso queda así:    /repos/Homarr

 - Las copias de seguridad que se generen están encriptadas de ahí que se nos pida una contraseña.

 - Los apartados con flechas verdes Prune Policy - Check Policy se pueden dejar tal cual sabiendo que han referencia a esto:

          Política de limpieza: Programación para la limpieza de datos sin referencias

          Política de comprobación: Programación para la verificación de la integridad de las copias de seguridad

A tener en cuenta: En el apartado Repository URL podemos configurar si queremos los servicios en la nube como destino de las copias de seguridad anteriórmente citados.

Configurado todo guardamos los cambios.


Puesto en funcionamiento nuestro primer Repo pasamos a la segunda parte consistente en añadir un Plan asociado a ese Repo creado:



   



 - Le ponemos el nombre que nos apetezca.

 - Seleccionamos el Repo creado anteriórmente.

 - Similar al caso anterior, en el compose pusimos la ruta donde tenemos guardadas las configuraciones de los dockers que tengamos con el parámetro
    /path/to/backup/data:/userdata así que clickando en el apartado Patch de la interfaz nos aparecerá entre otras la carpeta userdata y dentro de ella, en 
    este caso, la carpeta de configuración de Homarr.

 - En los apartados marcados con flechas verdes podemos configurar a nuestro gusto cuando se hacen las copias de seguridad y el tiempo de retención.


 El apartado marcado con flecha azul ( Hooks ) merece una atención especial:



   



Como se puede ver tenemos varias opciones para elegir, de todas ellas escogemos Command



   



 - CONDITION_SNAPSHOT_START nos aparece si clickamos en un desplegable y hace referencia al inicio de la copia de seguridad

 - docker stop homarr lo escribimos a mano y da la orden de detener el contenedor Homarr ANTES de hacer la copia de seguridad

 - ON_ERROR_FATAL también aparece en un desplegable y obliga a detener la copia si ocurre un error grave.


En el sitio donde estamos añadimos un segundo Hook junto al anterior:



   



 - CONDITION_SNAPSHOT_END hacer referencia a la finalización de la copia de seguridad por parte de Backrest de ese contenedor Homarr

 - docker start homarr arranca el contenedor después de finalizada la copia

 - ON_ERROR_FATAL impide lo anterior si hay un error grave


Con esto configurado ya tendríamos lista la copia de seguridad automatizada del contenedor, en este caso, Homarr, si opcionálmente quisiéramos que Backrest nos notificara el inicio - finalización de la copia de seguridad, por ejemplo, a través de un bot de Telegram añadimos un tercer Hook junto a los anteriores.



   



 - Las dos condiciones que se ven son las mismas de antes y hacen referencia al inicio - finalización de la copia de seguridad

 - Las notificaciones anteriores mediante un bot de Telegram a través de Shoutrrr tienen que estar configuradas en el siguiente formato:

telegram://XXXXX@telegram?chats=YYYYYYYYYY

Las XXXX se corresponden al token del bot

Las YYYYYYY se corresponden al Chat ID



Configurado todo guardamos los cambios. De esta forma ya tenemos configurada en Backrest las copias de seguridad de un docker en concreto, lo siguiente sería repetir los mismos procesos anteriores adecuándolos a los demás dockers de los que queramos hacer copia de seguridad automatizada.

En este punto primigenio la interfaz de Backrest queda así:



   



Os pongo una imagen que no es mia para que veais como queda un sistema completo ya configurado:



   



Backrest no sólo permite hacer copias de seguridad de los dockers sino que también permite su fácil restauración ( las siguientes imágenes tampoco son mias ):



   



Proceso de restauración:



   



Hasta aquí lo principal, sin embargo Backrest permite múltiples configuraciones a través de condiciones, variables, etc que por su extensión no voy a explicar. En su lugar os dejo un enlace a la documentación del programa:


https://garethgeorge.github.io/backrest/...ng-started