Sign in

Runesoft

@river.blog.runesoft.net.ap.brid.gy
3 followers 0 following 23 posts

Bienvenidos a mi blog, donde se habla de tecnología y homelabbing. ⚡ 🌉 bridged from ⁂ blog.runesoft.net, follow @ap.brid.gy to interact

PostsRepliesMedia
Runesoft @river.blog.runesoft.net.ap.brid.gy · 01/10/2026
Sincroniza tus notas de obsidian, ficheros, fotos... Lo que necesites, ¡Syncthing es tu herramienta!
blog.runesoft.net
Sincroniza tus notas de Obsidian con Syncthing
Se trata de un servicio de código abierto y gratuito, que nos permite mantener sincronizadas varias carpetas como si fueran una sola. Esto conseguiría que, por ejemplo, una carpeta de nuestro NAS, esté disponible en nuestro móvil. Un ejemplo claro es el de Obsidian, cuyo principal problema es poder acceder a las notas desde nuestro dispositivo móvil. Aquí es donde Syncthing nos va a ayudar. # Requisitos Para proceder con esta guía, necesitarás lo siguiente: * Un entorno Docker configurado, con la posibilidad de ejecutar `docker compose`. Si no dispones de uno, puedes seguir esta guía: Install Docker and Portainer CE * Dos dispositivos (móvil o PC) para sincronizarse. * Un café a mano (opcional). # Instalar Syncthing Server Ejemplo Para esta guía, haré uso de la carpeta "shared" como ejemplo para la sincronización. Recuerda ajustarla a tus necesidades, y que siguiendo el mismo patrón puedes agregar tantas como quieras. Como casi todo servicio hoy día, haremos uso de Docker. La manera más cómoda es con Docker Compose. Para esto, lo primero será crear una ruta de configuración: mkdir -p ~/syncthing/{config,shared} cd syncthing Ahora, dentro de esta misma ruta, crearemos el fichero `docker-compose.yaml`: nano docker-compose.yaml Y su contenido será este: services: syncthing: image: syncthing/syncthing:latest container_name: syncthing hostname: your.hostname.local restart: unless-stopped ports: - "8384:8384" - "22000:22000/tcp" - "22000:22000/udp" - "21027:21027/udp" volumes: - /home/user/syncthing/config:/var/syncthing/config - /ruta/a/sincronizar:/var/syncthing/ruta environment: - PUID=1000 - PGID=1000 - SYNTHING_NOUPGRADE=true Como puedes apreciar, es bastante simple. Ahora tan solo deberás ejecutarlo con el siguiente comando: docker comopose up -d ## Configuración Para comenzar, necesitaremos acceder a la interfaz web de nuestro servicio, que la encontraremos en la IP del servidor que hayas utilizado, en el puerto `8384`. Verás que accede directamente, mostrándonos lo siguiente: Por mi parte rechazaría el envío anónimo de información, pero esto al final es tú decisión el cómo hacerlo. Luego nos mostrará otros dos mensajes, ambos hablan de lo mismo: Establecer un usuario y contraseña para **Syncting**. No es necesario, y siempre y cuando esté sólo en tu red local, no debería ser problema. Hay otros métodos para securizarlo, ya que el uso de usuario y contraseña en Syncthing me ha dado problemas. Te cuento qué he hecho en mi caso: 1. He marcado que el contenedor sólo sea accesible desde una IP, la de mi proxy inverso de NPM. 2. En Nginx Proxy Manager he creado la regla de proxy para poder visualizarlo. 3. Finalmente he creado un ACL con usuario y contraseña ya en NPM, de forma que necesitas introducirla antes siquiera de acceder. Es algo más "rudimentario", pero que puedes aplicar sobre cualquier aplicación web, pudiendo centralizar este proceso de autenticación. ## Agregar un dispositivo El siguiente paso, es poder agregar un dispositivo. Este proceso requiere de otra instalación de **Syncthing** , ya sea en otro servidor o PC, como en un móvil. **En mi caso** , como lo tengo en el móvil, es el que utilizaré, ya que además me parece la situación más práctica. Le daremos a _Añadir dispositivo remoto_ en la parte inferior derecha de la pantalla. En este punto nos pedirá los ID, al estar en la misma red, veremos que nos muestran todos los dispositivos disponibles. Seleccionamos el adecuado y rellenamos la información necesaria. Una vez lo tengamos, le damos a _Guardar_. Esto hará que este dispositivo esté disponible en esta instancia de **Syncthing**. ## Compartir una carpeta Llegamos al punto interesante: Crear una carpeta para compartir entre ambos dispositivos. Si recuerdas, en el paso de creación del contenedor, creamos una ruta `~/syncthing/shared`, será la que utilizaremos. El formulario sería tal que así. Nos vamos al apartado de _Compartir_ y seleccionaremos el dispositivo que hemos agregado en el paso anterior de Agregar un dispositivo. Y ahora sí, le damos a _Guardar_ , que nos mostrará de nuevo el panel principal con nuestra carpeta creada y en _Actualizado_. Si repetimos este proceso en nuestro otro dispositivo, veremos que nos aparece este mensaje, si quisiéramos hacerlo a la inversa. Tan solo le tendríamos que dar a aceptar y esto agregaría de forma automática la carpeta. Ahora tenemos una carpeta en ambos dispositivos, que Syncthing se va a encargar de mantener alineada constantemente. # Aplicación Móvil Syncthing Fork Si deseas tenerlo disponible en el móvil, la aplicación se llama **Syncthing-Fork** , al menos en la _store de Android_. ## Configuración Cuando la descargues y la abras, te guiará por los permisos necesarios. El de almacenamiento es esencial. Puedes limitarlo a una carpeta concreta si lo deseas, pero si posteriormente quieres sincronizar otras fuera de esa ruta, tendrás que modificarlo. La ubicación permite que pueda rastrear automáticamente otros dispositivos con _Syncthing_. Y las notificaciones son para avisarte de los estados de sincronización, o si encuentra algún error. Generará un par de claves, para cifrar el contenido sincronizado a través de la red, para evitar que puedan ser visibles. ¡Y ya estaríamos en el panel principal de **Syncthing** en el móvil! Aquí es donde gestionaremos tanto los dispositivos como las carpetas que queremos mantener sincronizadas. ## Agregar un dispositivo Tendríamos que ir al apartado de _Dispositivos_ para agregar le que hemos creado en el paso de Configuración en nuestro contenedor. Si le has concedido los permisos de ubicación, verás que te sale ya de forma automática, y si no, siempre puedes poner el ID a mano, o utilizar la cámara para hacerlo mediante el código QR. Tras darle a _Crear_ en la parte superior derecha, veremos que nuestro dispositivo ya aparece en el listado. Ahora podremos utilizarlo para que, cuando creemos una carpeta, incluirlo en los destinos de la copia que se haga en la sincronización. ## Compartir una carpeta Ahora, crearemos la carpeta, y la compartiremos con el dispositivo que acabamos de agregar. Rellena los datos como consideres. Y al darle a _Crear_ en la parte superior derecha, deberá aparecerte en el listado, lista para sincronizar. Ahora tenemos tanto el dispositivo, como la carpeta creados en la aplicación móvil, listos para usarse. # Probando la sincronización Si creásemos un fichero de prueba, como el que he hecho desde la terminal de mi servidor: Podremos ver que ahora aparece en la carpeta que hemos asignado. Y que al abrirlo nos muestra su contenido sin problemas. Si creásemos otro para hacer una segunda comprobación: Sucedería exactamente lo mismo, nos aparecería en el directorio del dispositivo móvil. Con el mismo contenido que hemos introducido en el servidor. También he aprovechado para copiar una imagen, la cual podemos ver que aparece en el listado desde la terminal. Con esto tendríamos la sincronización bidireccional testeada y funcional. # Sincronización Obsidian Si el paso anterior lo aplicamos sobre un _vault_ de **Obsidian** , podremos tener sincronizado sin problemas todas nuestras notas. Si la usamos a menudo, podríamos modificar el tiempo de sincronización para que se haga cada minuto, por ejemplo. O incluso qué hacer en caso de conflicto de modificaciones, para tener un versionado en tal caso. Aquí mi recomendación es esta: Activar el versionado simple. Te permitirá elegir dónde deja las notas eliminadas por Syncthing al encontrar conflictos de eliminación, o las versiones que no haya podido resolver. Además, incluye cuántas de cada archivo guarda como máximo, y el tiempo antes de eliminarlas. Es raro que esto sucediese si sólo lo utilizas tú, mientras no estés simultáneamente en la misma nota o archivo en ambos dispositivos sincronizados. # Conclusión Ahora podemos mantener una carpeta sincronizada entre varios dispositivos, no necesariamente sólo dos. Esto permite aplicarse sobre imágenes, archivos, documentos... Tiene multitud de utilidades. Es simple e intuitivo, y con la aplicación móvil tenemos muchas posibilidades, incluso utilizarla como _cloud_ para nuestra galería de fotos. Syncthing NO ES UN NAS Recuerda que esto **no es un NAS** , no es una carpeta única que se accede por red; si no una aplicación de sincronización de carpetas. Lo que sucede en un extremo, se replica en el otro. Aunque sí que podrías Instalar Syncthing Sever sobre tu NAS, de forma que uno de los destinos de copia sea ese. Hay muchas más configuraciones para Syncthing: * Tiempos de sincronización. * Métodos de versionado para conflictos. * Opciones de sincronización única (que tu móvil suba al server, pero no al revés) al estilo Backup automático. # Referencias Para la realización de este post, se han tomado las siguientes referencias: * Página oficial: https://syncthing.net/ * Repositorio oficial: https://github.com/syncthing/syncthing/tree/main * Repositorio DockerHub: https://hub.docker.com/r/syncthing/syncthing * Guía de instalación con Docker: https://github.com/syncthing/syncthing/blob/main/README-Docker.md # Vídeo 0:00 /2:00 1×
000
Runesoft @river.blog.runesoft.net.ap.brid.gy · 14/09/2026
Si queremos un NAS compacto y de bajo consumo, que haga las veces de Homeserver, ZimaBoard con ZimaOS es uno de los ideales.
blog.runesoft.net
ZimaBoard 2 NAS Review y Montaje
Si queremos un NAS compacto y de bajo consumo, que haga las veces de Homeserver, tendemos a buscar un MiniPC, con arquitecturas como la N150 de Intel, que nos dan esto, dentro de un precio razonable. También contamos con otros MiniPCs ARM, pero estos están más limitados en términos de conectividad por ahora, haciendo algo más complicado el poder disponer de discos externos, montar RAIDs, etc. Es en este punto donde productos como la **ZimaBoard 2** brillan, ya que son de tamaño reducido, tienen puertos suficientes para algo sencillo, y, teniendo en cuenta el incremento de precios, siguen estando en un punto aceptable. Además cuenta con un kit de NAS, con el que podremos montar todo lo que necesitemos. # Producto Hay dos modelos de **ZimaBoard 2** , que sólo varían en su memoria RAM y almacenamiento interno. #### ZimaBoard 2 Tu Homelab y NAS en miniatura. __Utiliza el código__ ****mrruriver_15**** __para obtener 15€ de descuento.__ Comprar (15€ descuento) Aquí tienes la tabla de características sobre ambos modelos, para que puedas ver sus diferencias. Característica | ZimaBoard 2 832 | ZimaBoard 2 1664 ---|---|--- CPU | Intel® N150 4 núcleos 6M caché hasta 3.60 GHz | Intel® N150 4 núcleos 6M caché hasta 3.60 GHz RAM | 8GB LPDDR5 4800MHz | 16GB LPDDR5 4800MHz Almacenamiento | 32 EEMC | 64GB eMMC Ethernet | 2.5GbE (x2) | 2.5GGbE (x2) Puertos SATA | 3.0 6Gb/s (x2) | 3.0 6Gb/s (x2) USB | USB 3.1 (x2) | USB 3.1 (x2) PCIe | 3.0 x4 | 3.0 x4 Display | Mini-DisplayPort 1.4 4K@60Hz | Mini-DisplayPort 1.4 4K@60Hz Ventilación | Pasiva (Con opción activa de 40mm) | Pasiva (Con opción activa de 40mm) TDP | 10W | 10W Dimensiones | 140 mm x 83 mm x 31 mm | 140 mm x 83 mm x 31 mm Peso | 407g | 407g # Montando la ZimaBoard NAS Uno de los kits que podemos comprar, incluye una bahía NAS, junto con los cables y accesorios necesarios para montarlo, permitiendo atornillar la propia Zima a la carcasa, haciendo que sea un único módulo. Kit NAS de ZimaBoard 2 con Discos Duros. En esta, podremos incluir dos discos, tanto HDD de 3.5, como de 2.5 o SSDs. Esto nos permitirá configurar un RAID 0/1, o utilizar los discos de manera independiente si así l0 deseamos. El kit, además de los tornillos, accesorios y destornilladores, incluye una tarjeta PCIe adaptadora para dos dispositivos NVMe, que podríamos configurar como caché si así lo deseamos. En este caso no dispongo de ella como para enseñártelo, pero es como viene siendo habitual en la mayoría de productos NAS: Caché NVMe + Bulk Storage HDD. El montaje es bastante simple, y como resultado tenemos nuestro NAS compacto listo para funcionar. ZimaBoard 2 con kit de NAS montado. Ahora, tan solo tendremos que conectarlo a nuestra red, utilizando el cable ethernet, y encenderla teniendo enchufada su fuente de alimentación. Una vez la **ZimaBoard** haya encendido, tanto si usamos la pantalla como si usamos la interfaz de nuestro router; buscaremos su IP. Con esto abriremos una ventana de nuestro navegador de preferencia, y accederemos a la interfaz web que nos va a permitir gestionarlo todo. # Instalando ZimaOS Se trata del _sistema operativo_ con el que viene por defecto el dispositivo. Ya te aviso que este se puede instalar en donde desees, tiene tanto una versión gratuita, que ya de por si nos da todo lo que necesitamos; como una versión de pago, que por unos módicos 30€ nos dan una licencia de por vida. Como viene con ello preinstalado, tan solo tenemos que seguir el proceso que nos va guiando, empezando por elegir el idioma. Posteriormente crearemos la cuenta local de administrador, con los datos que veamos oportunos. Y con esto ya estaría, ahora tan solo le daremos a _Panel de control_ para que nos lleve directamente a la página principal. Este panel de control nos da de un vistazo todo lo necesario: Aplicaciones instaladas, datos del sistema, novedades y consumo de red y espacio en disco. Las aplicaciones que vayamos instalando posteriormente, irán apareciendo aquí, a modo de escritorio. Ahora sólo queda poner en marcha nuestros discos del NAS, creando un nuevo volumen. ## Crear nuevo volumen Tenemos varias opciones de configurar el nuevo almacenamiento: * **Discos individuales** : Manejar cada disco de manera independiente, creando tantos volúmenes como dispositivos. * **RAID 1** : Montar ambos discos en modo espejo, de forma que tengamos redundancia ante fallo de uno de ellos, perdiendo la mitad de la capacidad. * **RAID 0** : Montar ambos discos para trabajar de manera simultánea, duplicando la velocidad pero también el riesgo de pérdida de datos. En mi caso, elegiré RAID 1 para evitarme problemas en caso de fallo de disco, ya que la información que almacenaré será de cierta relevancia. Para esto, lo que haremos será ir a la configuración, y dentro de esta, a la sección de _Almacenamiento_. Será ahí donde nos salga la opción resaltada de _Crear almacenamiento_. Le daremos a Iniciar. Veremos que nos muestra la opción de combinar o habilitar los discos. Para este caso de creación de un RAID 1, la opción adecuada será la de _Combinar_. Es en este momento donde nos brinda las diferentes opciones, ya más específicas, de configurar el RAID. Como sólo tenemos dos discos disponibles, las únicas habilitadas serán las de RAID 1 o RAID 0. Por defecto viene seleccionada la primera, así que le podremos dar a _Siguiente._ Momento de seleccionar los discos que queremos incluir a la réplica en espejo, y una vez hecho, hacer clic en _Siguiente_. Asignamos un nombre al almacenamiento que se creará, y marcamos que _Somos conscientes y confirmamos la operación_ abajo para poder darle a _Crear_. Se pondrá a crear el RAID 1 seleccionado, tardará unos segundos. Y al finalizar nos dará la información del RAID resultante, con la opción de ir a la aplicación de _Archivos_ para poder visualizar este volumen nuevo e interactuar con él. Desde esta aplicación integrada incluida con ZimaOS, podremos subir ficheros, crear carpetas y utilizar desde la web a modo de nube personal, como proveedores externos ya conocidos. También nos da múltiples opciones, como montar unidades NAS remotas, USBs o discos duros externos para copias de seguridad, etc. # Configurando el Homelab Como podrás intuir, a parte de venir con ciertas aplicaciones básicas, podemos desplegar las que veamos oportunas, ya sea desde su _store_ oficial, o utilizando _Docker_. Empezaré por listar las que vienen ya incluidas, junto con sus funcionalidades, y luego daré algunos ejemplos de aplicaciones de terceros que he podido desplegar con mucha facilidad. ## Copia de seguridad Sencilla aplicación que nos va a permitir realizar copias de seguridad bidireccionales, ya sea de archivos de nuestra Zima hacia otro servidor, como al revés. También permite incluir discos externos o USBs para un mismo trabajo. Empezaremos por crear una de ejemplo, en la que subiré mi carpeta de Zima a mi otro servidor NAS. Lo primero será abrir la aplicación, en la que nos explicará en qué consiste la política de copis 3-2-1. Le damos a crear. Nos pedirá que elijamos una fuente, en mi caso, elegiré el almacenamiento que hemos creado anteriormente en la Zima. Ahora en el destino, elegiré un almacenamiento LAN. Solicitará los datos de conexión al servidor de Samba. Una vez rellenados, sólo hay que darle a _Conectar_. Ahí ya nos permitirá elegir en qué volumen y carpeta de nuestro destino queremos almacenar la copia de seguridad. Lo elegimos y le damos a _Confirmar_. Nos avisará que para cumplir con la 3-2-1 idealmente deberíamos agregar otro destino de la copia. Entre ellos podría estar un USB externo o un proveedor cloud. En mi caso haré solo un destino, dándole a _Iniciar_. Nos aparecerá el proceso de copia de seguridad en el listado, comenzando a crearse. Si le damos, podremos ver los detalles. En estos detalles se puede verificar las rutas de origen y destino, los archivos y el tamaño total de la copia, que en este caso es de 0 bytes ya que el volumen está recién creado. Podemos crear tantos procesos de copia de seguridad como deseemos, con diferentes orígenes y/o destinos. ## Files Se trata de la aplicación que hemos visto antes, que actúa como de interfaz web para nuestros archivos en la nueva nube personal que hemos creado. Como casi todos los proveedores, nos da una interfaz que nos resulta familiar. Cuenta con las clásicas funcionalidades de arrastrar ficheros desde nuestro dispositivo para subirlos, de descargarlos , o de seleccionarlos de manera manual, pudiendo crear y subir carpetas completas. No me centraré en esas funcionalidades ya que son comunes en todos estos sistemas, pero sí te mostraré una que es realmente cómoda: Importar ### Importar Similar a la copia de seguridad, pero de un único uso. Permite realizar una copia completa de una fuente concreta hasta nuestro ZimaBoard NAS. Estos orígienes, de nuevo, pueden ser proveedores cloud, almacenamientos NAS locales o un disco externo o USB. Probaré a realizar una copia de la carpeta de mi otro NAS donde tengo las fotografías de la ZimaBoard. Una vez lo tengo seleccionado, le doy a _Iniciar_. Me avisa de que el proceso se ha finalizado correctamente, con la carpeta completa creada y con un link en el mensaje para ver el informe de verificación. En este informe se nos da todos los detalles, como los elementos copiados, el tamaño resultante, origen y destino... Y si lo cerramos y accedemos a la carpeta, se podrán ver todos los archivos del origen que hemos seleccionado, ahora en nuestro NAS. Esto es muy práctico para, por ejemplo, volcar toda una sesión de fotografía desde un USB externo a nuestro NAS de golpe y desde la interfaz web. ## PeerDrop Herramienta increíblemente práctica, que como otros _Drop_ que conocemos, permite compartir ficheros entre varios dispositivos, como si estuviesen conectados entre sí. En el ejemplo que os pongo, me he conectado también con mi móvil, para pasar una fotografía. Desde mi móvil, he elegido el destino y el fichero a compartir, y le he dado a aceptar. Al terminar la subida, en el PC me ha aparecido este mensaje. Le he dado a _Save_ y me ha salido el explorador de ficheros para elegir dónde guardarlo. Y con esto he podido pasar un fichero desde mi móvil al PC utilizando esta herramienta de _PeerDrop_. ## ZVM No podía faltar, un gestor de máquinas virtuales. Es una de las ventajas de la arquitectura del N150, que podemos virtualizar cómodamente. Voy a crear como ejemplo una máquina virtual de Linux Mint, así que le daré a descargar. Comenzará a descargarnos la ISO del sistema. Y al finalizar nos saldrá un pequeño formulario para la creación en sí. Lo rellenamos, y podemos verificar las opciones avanzadas de virtualización, donde se nos permitiría modificar la memoria RAM asignada o los núcleos que puede utilizar. Cuando lo tengamos, le damos a _Crear_. Y nos cargará la interfaz visual de la máquina virtual, en su proceso de arranque. Ahora el selector GRUB, donde podemos elegir el tipo de inicio. Y finalmente nuestro Linux Mint en su escritorio listo para utilizarse. Estas herramientas son otro clásico en estos sistemas, así que en esto ZimaOS no se queda tampoco atrás. ## Tienda de Aplicaciones Y ahora viene lo realmente cómodo de este sistema operativo: Su catálogo de aplicaciones preconfiguradas. Desde aquí podremos buscar el servicio que queramos desplegar para tener de manera local. Hay una enorme cantidad de ellos. Voy a desplegar Excalidraw, así que lo busco y selecciono. Nos dará la información de la aplicación, como casi cualquier store hoy día. Le daremos a _Instalar._ Comenzará el proceso, y nos irá dando el progreso. Si regresamos al panel de control, veremos que nos ha aparecido el icono de la nueva aplicación de Excalidraw, que sigue terminando su instalación. Cuando acabe, le daremos para abrirla. Y veremos que nos lleva directamente a ella, de forma que podemos utilizarla sin problemas Este mismo proceso lo podemos seguir con cualquiera de las aplicaciones que tienen, ya que vienen preparadas para que se hagan con apenas unos clics o ligeros formularios. ### Aplicación Personalizada Si el contenedor o _stack_ que quieres desplegar no estuviese disponible, puedes darle a la opción de _Instalar aplicación Personalizada_. Esto hará que nos salga un formulario para crear un contenedor Docker. Incluso podríamos configurarlo directamente desde un clásico `docker-compose` si vamos a la sección de _YAML_. Como puedes ver, no es por falta de opciones, podemos realmente utilizarlo a modo de Homelab completo, incluyendo funcionalidades de NAS, con la sencillez de ZimaOS. # Acceso remoto y aplicaciones Pero esto no es todo. Para hacernos todo aún más sencillo, los de Zima nos proveen de aplicaciones tanto para escritorio, como para móvil, donde podremos utilizar parte de las herramientas que he ido comentando en este post, además de realizar copias automáticas, montajes de unidades de red e incluso sincronizado de nuestra galería del móvil. Podremos encontrar la que corresponda en su web: https://www.zimaspace.com/zimaos/download ## Aplicación de Escritorio Nos la descargamos y la instalamos. Si estamos en la misma red local que nuestra Zima, nos la detectará de forma automática. Le daremos a _Connect_. Ahora nos está solicitando únicamente el usuario y contraseña con los que acceder. Los rellenamos y le daremos a siguiente. Elegimos la carpeta de la que queremos un acceso rápido, en mi caso, la del RAID 1 que hemos creado anteriormente. Y con esto el proceso habrá terminado. Ya tendremos nuestra unidad de red mapeada en nuestro sistema. En nuestra barra de tareas veremos que tenemos la aplicación funcionando. Si la desplegamos tiene este aspecto. Nos saldrá la opción de _Backup_. Le damos. Y ahora podremos establecer una sincronización desde una ruta de nuestro equipo hasta la carpeta de nuestro NAS de la ZimaBoard. Le daremos a _Start_ una vez definido, y el proceso comenzará. Podremos ver el progreso, origen, destino, ficheros y tamaño. Y cuando finalice lo veremos en estado _Completed_. Pudiendo ver la carpeta seleccionada desde la aplicación de Files. O incluso desde la unidad que nos ha montado el proceso de instalación. Una aplicación sencilla y muy útil para complementar la ZimaBoard y sacarle el máximo partido. ## Aplicación Móvil Al igual que la de escritorio, es un add-on genial para nuestro día a día. La podemos encontrar en la store de nuestro dispositivo móvil como _Zima Client_. Una vez la instalemos, nos encontrará nuestro dispositivo y podremos iniciar sesión en él, incluso permitirá que guardemos los datos de acceso bajo la biometría para hacerlo más comodo. Se nos abrirá un panel de control con los datos necesarios, bastante estético y cómodo. En el menú podremos acceder a las aplicaciones principales para el móvil, como puede ser la de _Archivos_ , o _Files_ , donde podremos interactuar cómodamente con nuestro NAS. También tenemos el acceso al resto de aplicaciones desde _Apps_ , incluyendo _Excalidraw_ , que lo instalamos anteriormente. Si le damos. Veremos que nos mostrará directamente la aplicación, pudiendo crear nuestros diagramas desde el móvil, algo que me resulta realmente cómodo. Si volvemos, y vamos al apartado de _Fotos_ , podremos empezar a crear nuestra copia automática de la galería a nuestro NAS. Lo primero que haremos será seleccionar los álbumes que deseamos sincronizar, y le daremos a _Confirmar_. Ahora damos a _Iniciar copa de seguridad_. Y nos saldrá nuestra galería, con las imágenes que _Zima Client_ va a sincronizar por nosotros al NAS. Le damos a _Iniciar_ y todo comenzará. Lo mejor de todo es que estas mismas capturas de pantalla las he podido pegar cómodamente en mi post ya que se han sincronizado automáticamente a medida que he ido haciéndolas, y desde la aplicación de _Files_ de ZimaOS he podido copiarlas para ello. # Otros proyectos La ventaja de la **ZimaBoard** es su versatilidad, a parte de esta opción de _Homelab NAS_ , podríamos utilizarlo para otras muchas otras cosas: * Reproducción de contenido multimedia. * PC de oficina, ya que le podrías instalar distribuciones linux gráficas o Windows incluso. * Router casero, ya que cuenta con dos puertos de red y potencia suficiente, además de ser silencioso. * Otros muchos más... # Conclusión Aquí tenemos que evaluar dos partes: El hardware y el software. Empezando por el hardware, la **ZimaBoard 2** es muy capaz, resuelta, compacta, silenciosa y sin apenas consumo energético. Me parece una de las mejores opciones. Si bien puede resultar algo "premium" en comparación con otros miniPC de bajo consumo con N150, el precio no excede mucho de lo habitual en ese mundillo, haciendo que, desde mi punto de vista, sea una de las mejores opciones dentro de esta categoría. Respecto a **ZimaOS** , honestamente, es un software muy simple y bastante trabajado, que reúne todo lo necesario para un _Homelab_ "_plug and play"_. Sin complejidad, mensajes claros y funcionalidades bastante obvias y sencillas de seguir. La configuración no es para nada compleja, y contamos con aplicaciones para escritorio y móvil que nos hacen la vida muy fácil. No hay que tener apenas conocimientos para poder configurar lo que vamos a hacer: Un NAS y Home server. Con este kit, podemos tener nuestro _Homelab_ con NAS, en apenas unos pocos pasos, sin complicaciones. Teniendo mucha versatilidad y por un precio más que razonable para los que movemos hoy día. No negaré que no quiera que baje su precio a algo más asequible para todos los bolsillos, pero como todos los productos informáticos a día de hoy. # Galería de Imágenes Aquí tenéis las fotografías que he realizado de la **ZimaBoard** para más detalles. Algunas ya han sido utilizadas anteriormente en este mismo post, aquí solo las recopilo. # Vídeos A continuación, dos vídeos relacionados con la **ZimaBoard** , si buscas más detalles. ## Presentación de ZimaBoard 2 0:00 /1:12 1× ## Montaje de NAS con ZimaBoard 2 0:00 /2:26 1×
001
Runesoft @river.blog.runesoft.net.ap.brid.gy · 09/09/2026
Muchas veces necesitamos un lugar en el que crear documentación y trabajarla de manera compartida. Docmost viene a resolvernos esto.
blog.runesoft.net
Gestiona tu documentación con Docmost
Muchas veces necesitamos un lugar en el que crear documentación y trabajarla de manera compartida. **Docmost** viene a resolvernos esto. Se trata de un software con una versión para la comunidad gratuita y de código abierto, que nos permite tener notas sincronizadas para poder trabajar con varios usuarios simultáneamente. Es una interfaz web bastante sencilla de utilizar, que nos da la posibilidad de tener diferentes organizaciones y miembros registrados, con diferentes permisos según deseemos. Así que en esta guía vamos a cubrir cómo instalar este servicio y ver sus capacidades. # Requisitos Para poder continuar con este post, necesitarás lo siguiente: * Un entorno Docker en el que desplegarlo. * Conocimientos básicos de Docker. * Un café a mano y ganas de documentar (siempre faltan). Si no has trabajado anteriormente con Docker, te recomiendo que antes eches un vistazo a mi guía introductoria de Docker 101. # Instalación Para su instalación, en la guía oficial contamos con soporte principalmente de Docker, así que será el método que cubramos en este caso. Utilizaremos un _compose_ para facilitar su gestión. ## Docker compose Lo primero que deberemos hacer es crearnos una carpeta de trabajo para la aplicación de **Docmost** , para esto ejecutaremos el siguiente comando: mkdir -p ~/dockmost/{storage,db_data,redis_data} cd docmost De esta forma tenemos generado el directorio donde estará todo lo relacionado con la aplicación, incluyendo las carpetas necesarias para los posteriores volúmenes _bind_. Ahora crearemos el archivo `docker-compose.yaml` ejecutando lo siguiente: nano docker-compose.yaml Y su contenido será este: services: docmost: image: docmost/docmost:latest depends_on: - db - redis environment: APP_URL: "http://localhost:3000" APP_SECRET: "TU_CLAVE_SECRETA(32)" DATABASE_URL: "postgresql://docmost:STRONG_DB_PASSWORD@db:5432/docmost" REDIS_URL: "redis://redis:6379" ports: - "3000:3000" restart: unless-stopped volumes: - ./storage:/app/data/storage db: image: postgres:18 environment: POSTGRES_DB: docmost POSTGRES_USER: docmost POSTGRES_PASSWORD: STRONG_DB_PASSWORD restart: unless-stopped volumes: - ./db_data:/var/lib/postgresql redis: image: redis:8 command: ["redis-server", "--appendonly", "yes", "--maxmemory-policy", "noeviction"] restart: unless-stopped volumes: - ./redis_data:/data Claves Secretas y Rutas Recuerda modificar las claves secretas y contraseñas del archivo de configuración El _stack_ que levantaremos con el archivo creado, contendrá estos servicios: * `docmost`: Aplicación en si de **Docmost** , con su interfaz web. * `db` : Instancia de base de datos de Postgres necesaria para el funcionamiento de **Docmost**. * `redis`: Sistema de base de datos en memoria o caché para el funcionamiento de **Docmost**. Para ejecutarlo todo, tan solo tendremos que lanzar lo siguiente en la terminal: docker comopose up -d Y veremos que si accedemos a la IP de nuestro servidor Docker, en el puerto `3000` (si no lo has modificado en el `docker-compose.yaml`), nos aparecerá la página de registro. Rellenamos los datos y cuando le demos a _Create workspace_ nos llevará a la página principal, con nuestro primer grupo de trabajo creado y nuestro usuario logueado. # Utilizando Docmost Ahora vamos a ver qué nos permite hacer Docmost para poder gestionar nuestra documentación. Contamos principalmente con tres niveles organizativos, de más a menos: * _Workspaces_ : Entornos de trabajo, un equivalente a una empresa. * _Spaces_ : Grupos de trabajo, un equivalente a un equipo. * _Pages_ : Páginas en sí de documentación, que pueden tener sub-páginas, a modo de _wiki_. Veamos cómo crear cada uno de estos, y alguna de las opciones que nos brindan.: ## Workspaces Es el nivel organizativo más alto. Al instalar **Docmost** hemos creado ya un _Workspace_ por defecto, en mi caso uno llamado _Runesoft_ , recuerda que el tuyo puede ser diferente. Licencia _Community_ Con la licencia para la comunidad opensource, sólo se puede disponer de un único _Workspace_ por instalación. Lo podemos ver y configurar desde la parte superior derecha de la pantalla principal: Ahora clicamos en _Workspace settings_ , y se nos abrirá la página de configuración general de nuestro _site_ : Es aquí donde podremos cambiarle el nombre o la imagen a nuestro _Workspace_ , si en el momento de la creación inicial no hemos elegido el nombre adecuado. Hay algunas opciones que no están disponibles ya que se tratan de elementos y herramientas de la versión premium. ### Miembros Uno de los apartados más importantes a la hora de configurar nuestro _Workspace_. Aquí es donde podemos ver los miembros actuales, gestionarlos o incluso invitar a nuevos. Para esto último, le daremos a _Invite members_ , que nos mostrará el siguiente formulario: Aquí podremos introducir las direcciones de correo de aquellos que deseemos invitar a participar en nuestro _Workspace_ , el rol que van a tener, y los grupos a los que asignarles. ### Grupos En esta sección podremos crear nuestros grupos para gestionar más cómodamente los usuarios y los diferentes permisos sobre los elementos de **Docmost**. Podremos crear nuestro primer grupo, dándole a _Create group_ en la parte superior derecha del propio listado. En el formulario, rellenaremos los datos, y elegiremos los usuarios que queremos que pertenezcan al grupo. Podremos agregar más usuarios posteriormente si lo necesitamos, editando el grupo. Una vez creado, veremos que se nos redirige a la administración del grupo en si, donde podremos agregar más miembros si queremos. Si regresamos al listado general de grupos, veremos que sale el genérico acompañado de nuestro grupo personalizado, en mi caso el de _Homelab_ : Con esto ya cubrimos todo lo necesario respecto a los grupos de usuarios de un _Workspace_ de **Docmost**. ## Espacios Los espacios son como un equivalente a un "equipo de trabajo". Podremos tener tantos como deseemos con la licencia _community_ de **Docmost**. ### Crear un espacio Para crearlo, lo podemos hacer desde la página principal, en el apartado de _Spaces_ del menú izquierdo: Le daremos a _Create space_ , y el modal con los campos para crear el espacio aparecerá. Una vez rellenado como deseemos, le daremos a _Create_ y tendremos nuestro espacio creado. **Docmost** nos habrá redirigido directamente al nuevo espacio para trabajar sobre ello. Si volvemos al listado de espacios nuevamente, veremos que tenemos el de _General_ y el nuevo espacio que hayamos creado, en mi caso el de _Homelabing_ : ### Eliminar un espacio Para eliminarlo, tendremos que acceder a su configuración. Esto lo podemos hacer tanto desde el listado de espacios anterior, como desde el propio _space_ , en el menú izquierdo, en su _Space settings_. Páginas del espacio La eliminación de un espacio conlleva su consecuente borrado de páginas, asegúrate que no pierdes nada relevante antes de eliminarlo. Lo primero que nos saldrá será un modal con el listado de miembros del espacio. Tendremos que ir a la sección de _Settings_ , y abajo del todo nos aparecerá la opción de eliminarlo: Nos pedirá confirmación, tan solo introducimos el nombre del espacio para ello, y le damos a _Confirm_. Con esto habremos eliminado un espacio. ## Páginas Son el elemento que más utilizaremos, ya que será el lugar donde realmente generemos la documentación. Las páginas las podremos crear dentro de los Espacios, para ello tan solo tendremos que ir al menú izquierdo, en el apartado de páginas, y crear una nueva con el botón de `+`. Al hacerlo, nos aparecerá esto: Le podemos poner un título, que será el que aparezca en la parte izquierda, en el menú. ### Edición Como casi cualquier editor de notas, soporta leguaje _Markdown_ , así que te será bastante intuitivo. Si no, siempre tienes la opción de escribir `/` para ver el listado de comandos disponibles: Podremos insertar encabezados, listas, imágenes, enlaces, y hasta diagramas de Mermaid o Excalidraw, tienes todos estos elementos aquí. Es muy completo, hasta el punto de que todo este post lo he estado escribiendo sobre mi instancia de **Docmost** : ### Sub-páginas Como has podido apreciar en la imagen anterior, podemos anidar unas páginas en otras, a modo de carpeta. Esto nos permite tener todo mucho más organizado. Para hacerlo tan solo tenemos que darle al `+` de una página o sub-página. ### Enlaces Podemos vincular unas páginas con otras dentro del mismo espacio, para hacerlo, tenemos que copiarnos el enlace de la página, y pegarlo en la que lo vayamos a usar. Este enlace lo podemos obtener dándole a los tres puntos de una página, y en _Copu link_ : Si nos creamos otra página, tan solo tendremos que pegar el link en el editor, y nos aparecerá la vinculación: ### Otras opciones Las páginas tienen múltiples opciones, aquí te resumo algunas de ellas: * **Histórico** : Nos permite visualizar los últimos cambios y recuperar una versión anterior. * **Exportado** : Genera una exportación de la página en los formatos soportados. * **PDF** : Genera un PDF con el contenido de la página, ideal para compartirlo. * **Compartir** : Genera un vínculo de acceso a esta página para cualquiera aunque no tenga usuario. * **Favoritos** : Crea un acceso rápido a esta página en nuestro panel principal del usuario. Y muchas más opciones, ¡es muy completo! # Otras funcionalidades **Docmost** cuenta con muchas más funcionalidades que no da para cubrir en este post, y que podrás ir descubriendo. Tanto relacionadas con las páginas y _sites_ , como de la gestión en si de tu perfil, seguridad, etc. Adicionalmente, hay otras como sus bases de datos o paneles _Kanban_ que sólo están disponibles para su versión de pago. # Conclusión Ahora con **Docmost** tienes tu lugar de documentación o wiki centralizada, que te permite colaborar de manera activa con compañeros si fuera necesario. Todo queda en casa, en tu entorno local, y si adicionalmente tienes forma de acceder remotamente, puedes tener tus notas en tu propio Cloud, reemplazando servicios como Notion, aunque con menos funcionalidades si usas la versión gratuita. # Referencias Para el desarrollo de este post, se han tomado las siguientes referencias y documentaciones: * Guía de instalación oficial: https://docmost.com/docs/installation * Documentación oficial: https://docmost.com/docs/ * Repositorio oficial: https://github.com/docmost/docmost # Vídeo 0:00 /1:57 1×
000
Runesoft @river.blog.runesoft.net.ap.brid.gy · 24/08/2026
Esta vez toca un recopilatorio de los diferentes servicios que tengo actualmente en el Homelab en 2026.
blog.runesoft.net
Homelab Tour 2026 Servicios
Esta vez toca un recopilatorio de los diferentes servicios que tengo actualmente en el _Homelab_. Espero que te sea útil y puedas encontrar algún servicio que te venga bien desplegar en tu servidor, y recuerda que todos los mencionados son gratuitos, ¡y muchos de ellos incluso de código abierto! # Servicios Voy a hacer un resumen de la funcionalidad objetivo de cada uno, adjuntando el link a la guía correspondiente por si te interesa instalarlo. ## Homepage Es un servicio que nos proporciona una web que actúa como dashboard inicial, donde tener los vínculos de nuestros servicios, con widgets de estado y otras características interesantes. Es ligero, customizable y lo mantienen muy actualizado. Instalando Homepage DashboardHomepage es un dashboard que nos permitirá tener organizados los servicios de nuestro homelab.RunesoftRubén Morchón ## Beszel Ideal para una monitorización de nuestros servidores. Es muy sencillo de instalar y configurar, pudiendo desplegar el agente extractor de información en casi cualquier plataforma. Cuenta con un sistema de alertas en función de los parámetros que le indiquemos, como temperatura, uso de CPU, espacio en Disco, etc. Monitoriza los recursos de tus servidores instalando BeszelBeszel es una ligera herramienta que nos permite monitorear nuestros servidores y tener de un vistazo su estado y consumo de recursos.RunesoftRubén Morchón ## Uptime Kuma Un clásico en el mundo de la monitorización, ya que nos ayuda mucho con las aplicaciones y servicios web. Permite crear páginas de estado, configurar cómo debe ser la respuesta, si ignorar o no los SSL, e incluso alertas si el certificado ha caducado. Installing Uptime Kuma (Docker or Kubernetes)Uptime Kuma is a neat little self-hosted monitor that does HTTP(s), TCP, ping, and certificate expiration checks.RunesoftRubén Morchón ## Nutify Ideal si quieres información de estado y consumo de tu SAI o UPS, es capaz de conectarse a él y darnos estadísticas e informes directamente a nuestro correo. Además del consumo y coste eléctrico, también permite automatizaciones para poder lanzar apagados programados en cadena o encendidos por Wake on Lan. Monitoriza tu SAI o UPS con NutifyNutify es un servicio que nos va a permitir obtener estadísticas de uso y consumo de nuestro SAI o UPS, generando informes y con sistema de alertas.RunesoftRubén Morchón ## Proxmox El _core_ de casi todo _homelab_ , ya que es un _hypervisor_ , un sistema operativo dedicado a la virtualización y contenerización, con muchas más herramientas adjuntas. Proporciona una interfaz web desde la que puedes gestionarlo todo, incluyendo copias de seguridad automáticas, snapshots, volúmenes NFS, sistemas RAID, redes, etc. Servidor de Virtualización con ProxmoxProxmox es el hipervisor más extendido en el mundo del homelabing, y nos permite desplegar prácticamente todo lo que necesitemos. Hoy cubrimos los pasos para instalarlo.RunesoftRubén Morchón ## Portainer Servicio web para gestionar una instalación de Docker. Otorga una interfaz muy cómoda para todo lo que tenga que ver con contenerización, como creación de stacks, volúmenes docker, o incluso despliegues con Kubernetes. Hay muchas otras opciones a parte de Portainer, pero es una de las clásicas y más extendidas. Install Docker and Portainer CESome times you want to run a simple database, API or other piece of sofware ond your local enviroment, but VMs use to be a bit of a pain. Docker solve all of this, and in combination with Portainer, you obtain a pretty useful web admin GUI, so let’s get started!RunesoftRubén Morchón ## Crafty Uno de los gestores de servidores de Minecraft más extendidos, permite crear múltiples instancias y organizarlas como desees. Desde servidores Java _vanilla_ como con mods o _Bedrock_ , consola, plugins, gestor de ficheros... Todo esto desde la interfaz web. También cuenta con permisos y posibilidad de múltiples usuarios, con MFA incluído. Tu servidor de Minecraft en Windows, Linux o DockerMontar tu propio gestor de servidores de Minecraft con Crafty, ya tengas Windows, Linux o uses Docker.RunesoftRubén Morchón ## Immich De los primeros softwares que recomiendo desplegar en un homelab, ya que reemplaza uno de los servicios cloud más demandados: El almacenamiento en la nube de tus fotos. Tiene app para todos los móviles, que se encarga de sincronizar tus fotos y galería. Además cuenta con detección de rostros que se ejecuta totalmente en local para poder buscar a la gente de manera directa; y un mapa con las ubicaciones de las fotos que hagas. Sincroniza tus imágenes com ImmichTen tu propio Google Photos en tu homelab, pudiendo sincronizar tu galería del móvil en tu NAS.RunesoftRubén Morchón ## Adguard Home Otro servicio muy habitual de encontrar en homelabs, ya que ayuda a eliminar la publicidad invasiva de muchos de los sitios webs, aunque flaquea en apps como YouTube y similares. Pero otra característica muy importante es que es un servidor DNS, y por tanto nos da la posibilidad de gestionar y crear nuestros propios nombres de dominios locales. Filtra y bloquea anuncios con AdGuard HomeEn esta guía verás los pasos necesarios para instalar AdGuard Home y asñi bloquear anuncios y customizar tus entradas DNS locales.RunesoftRubén Morchón ## Nginx Proxy Tener un proxy inverso es casi que un básico también, su funcionalidad es canalizar todas las conexiones web a través de él, e incluso alcanza a la capa 4 de red. Encima con gestión de certificados SSL gratuitos, listas de control de acceso, páginas de error y redirecciones por defecto, ¡es una gozada! SSL y Proxy Inverso con Nginx Proxy ManagerNginx Proxy Manager es un servicio que nos facilita la gestión de nuestros SSL, permite crear Hosts Proxy y centralizar las conexiones de nuestros host y aplicaciones web.RunesoftRubén Morchón ## Linkstack Linktree, pero auto-hosteado y gratuito. Soporta múltiples usuarios, cada uno con su página principal de links. Estos se pueden crear y gestionar muy cómodamente. Cada usuario cuenta con su panel de administración donde puede ver sus estadísticas de clicks sobre sus diferentes vínculos. ⚠️ La guía está en progreso, ¡actualizaré cuando la tenga! ## Forgejo Muchas veces tienes proyectos que quieres gestionar de forma local, o tienes una pequeña empresa consultora; pues Forgejo es un reemplazo a GitHub o GitLab. Es totalmente gratuito y de código abierto. Se trata de un fork de Gitea, muy liviano, con pocos recursos lo puedes tener funcionando. Lo recomiendo si quieres practicar el mundo de CI/CD. ⚠️ La guía está en progreso, ¡actualizaré cuando la tenga! ## IT Tools La uso cada día, ya que aporta multitud de herramientas generales para desarrolladores o gente del mundo de la informática. Cosas como generar _UUIDs_ , transformar una fecha a diferentes formatos o zonas horarias, convertir de _JSON_ a _YAML_ , pasar un texto a _Base64_ o utilizar _MD5_. Deploying IT Tools (Docker or Kubernetes)IT Tools is a free, open-source, self-hosted web service that provides handy utilities for developers and IT folks.RunesoftRubén Morchón ## Chart DB Ideal para administradores de bases de datos o aquellos que trabajéis _full-stack_ o _back-end_. Permite crear de manera visual los modelos de bases de datos, con sus tablas y relaciones. Además, tiene herramientas de importado y exportado, pudiendo generar los scripts DDL para el motor de base de datos que desees, siempre y cuando sea relacional, como _MariaDB_ o _PostgreSQL_. Diseña bases de datos con ChartDBChartDB es una herramienta pensada para diseño y edición visual de bases de datos, que nos permite exportarlas a DDL o incluso como imágenes para documentación.RunesoftRubén Morchón # Conclusión Esta lista es bastante completa. Aún faltan otros servicios que tengo, pero son ligados a productos de hardware concretos, como Unifi Network, Protect, etc. Con este enumerado de aplicaciones podemos cubrir gran cantidad de necesidades, y depender menos de servicios en la nube. ¡Espero que os haya servido! # Vídeo 0:00 /2:16 1×
000
Runesoft @river.blog.runesoft.net.ap.brid.gy · 17/08/2026
Aprende a gestionar y crear contraseñas seguras, y a entender el MFA y su importancia.
blog.runesoft.net
Contraseñas Seguras y MFA
Hoy día los requisitos para las contraseñas son cada vez más estrictos, esto hace que sean más difíciles de memorizar. Es verdad que aportan más seguridad, junto al MFA. Viendo que muchos familiares y amigos terminan cayendo en usar la misma contraseña, o en no establecer el MFA hasta que es obligatorio, he decidido traeros un post contando un poco lo que es, cómo podemos organizar esas contraseñas, y terminar estando más seguros. Si tienes un familiar en esta situación, no dudes en compartirle este post. # Contraseñas seguras Lo que hace una contraseña segura es lo siguiente: * Que no tenga palabras reconocibles de un diccionario. * Que combine bien entre: * Mayúsculas. * Minúsculas. * Números. * Símbolos. * ¡Y que no se use en más de un sitio! Ese último punto es el que realmente escuece, porque para cuando conseguimos memorizarnos esa contraseña compleja, ahora resulta que tenemos que tener otra distinta para otro sitio. Pues para esto os recomiendo encarecidamente que hagáis uso de gestores de contraseñas. ## Gestores de contraseñas Son aplicaciones que nos ayudan justo en este apartado. Actúan como una caja fuerte: Nos permiten guardar nuestras contraseñas bajo una única contraseña. ¡Genial! Ahora solo tienes que aprenderte una. ¿Pero las que guardo, cómo las genero? Tampoco tendrás que preocuparte por ello, ya que prácticamente todos los gestores de contraseñas traen herramientas de generación de _passwords_ seguros. Con esto ni siquiera tendrás que forzar tu imaginación para que sean realmente distintas. Os dejo aquí algunos casos de uso y una aplicación de generación de contraseñas adecuado para ello: ### Usuario general Si lo único que quieres es tener un gestor seguro y de fiar, para tu día a día, y que te funcione en el PC, móvil o tablet. Hay muchos, de diferentes compañías, pero por mi parte te recomiendo que uses Proton Pass. Proton es una compañía que vela por la seguridad digital, y su app _Pass_ está disponible en todos los sistemas operativos, navegadores y móviles. Esta es mi app de preferencia y la que uso hoy día y desde hace años. ### En el trabajo En los ordenadores del trabajo normalmente no puedes instalar lo que te de la gana, o no te permiten extensiones de navegador. Pero hay una app que suele o bien incluir de forma predeterminada, o permitir que la tengas, y que hasta el propio INCIBE (Instituto Nacional de Ciberseguridad) recomienda: Keepass. Deja todo en un archivo encriptado local, que sin la clave maestra no se puede leer. Así puedes guardar todas esas contraseñas del trabajo. ### Para homelabers Si te gusta la tecnología y tienes tu propio _homelab_ , probablemente ya la conozcas, pero por si acaso, te menciono VaulWarden, un gestor de contraseñas local ideal, que también cuenta con opciones de extensiones de navegador y apps para móvil. Es cómoda, gratuita y de código abierto. Uno de los servicios más habituales de configurar. # MFA El MFA (_Multi-Factor Authentication_), o autenticación de múltiple factor, es una de las mejores herramientas de seguridad que tenemos hoy en día. Su funcionamiento es sencillo: además de tu contraseña, la plataforma te pide una segunda prueba de identidad para asegurarse de que realmente eres tú. Esa segunda prueba suele ser algo que solo tú tienes o puedes generar en ese momento, como por ejemplo: * Un código temporal que cambia cada pocos segundos. * Una notificación en el móvil para aprobar el inicio de sesión. * Una llave física de seguridad. * Un código enviado por SMS o correo, aunque estas opciones son menos recomendables. La idea es muy simple: aunque alguien consiga tu contraseña, no podrá entrar en tu cuenta sin ese segundo factor. Eso hace que el acceso no autorizado sea muchísimo más difícil. ## ¿Cómo funcionan los códigos temporales? Uno de los métodos más habituales de MFA es el uso de códigos temporales de un solo uso, también conocidos como TOTP (_Time-based One-Time Password_). La ventaja de este método es que es totalmente _offline_ , y se puede generar incluso en modo avión. ¿Curioso verdad? Aquí te explico la magia del asunto: 1. Cuando escaneas el QR o introduces la clave a mano, estás copiando una clave secreta. 2. Tu móvil obtiene la fecha y hora actuales en milisegundos, y las divide entre treinta. 3. Ahora coge tanto ese valor, como la clave secreta y las pasa por un sistema criptográfico conocido como HMAC, que devuelve un número. 4. De ese número, nos quedamos con los seis primeros dígitos. ¡Ese es el código que ves! Por eso, siempre que una plataforma te permita activar MFA, hazlo. No lo dejes para "más adelante" ni esperes a que sea obligatorio. Cuanto antes lo actives, antes estarás protegido. De verdad que es de los métodos más seguros hoy día. ## ¿Qué app usar para el MFA? Para gestionar esos códigos de autenticación, hay múltiples aplicaciones de grandes empresas, pero por mi parte te recomiendo usar Proton Authenticator. Es una aplicación pensada precisamente para esto: generar y guardar tus códigos MFA de forma cómoda y segura, con una interfaz sencilla y disponible en varios dispositivos. Si ya usas Proton Pass y tienes la versión de pago, también te permite tener en esa misma aplicación los códigos TOTP así que queda todo mucho más organizado, sincronizado y seguro. En resumen: una buena contraseña te protege, pero el MFA es lo que realmente puede marcar la diferencia si esa contraseña llega a caer en manos equivocadas. Mencionar que hay otras alternativas clásicas y reconocidas para MFA, como Google Authenticator o Microsoft Authenticator. # Conclusión Ahora sabes gestionar mejor tus contraseñas y cómo funciona el MFA, incluso el sistema que hay por debajo para los TOTP. De esta manera, puedes estar más seguro en aquellos sitios en el que vayas aplicando tus nuevas y seguras contraseñas, y habilitando el MFA. Recuerda compartir este post con aquellos que creas que lo puedan necesitar más, la seguridad es algo muy importante, y con un par de aplicaciones (o una en el caso de Proton Pass) podemos solventarlo. # Vídeo A continuación, los vídeos relacionados. # Gestores de Contraseñas 0:00 /1:16 1× # MFA con TOTP
011
Runesoft @river.blog.runesoft.net.ap.brid.gy · 17/08/2026
Nutify es un servicio que nos va a permitir obtener estadísticas de uso y consumo de nuestro SAI o UPS, generando informes y con sistema de alertas.
blog.runesoft.net
Monitoriza tu SAI o UPS con Nutify
Nutify es un servicio que nos va a permitir obtener estadísticas de uso y consumo de nuestro SAI o UPS, además de otra información. También nos da la opción de generar informes, enviar alertas en función de parámetros e incluso enviar reportes y lanzar automatizaciones mediante _webhooks_. Para establecer la conexión con el SAI, hace uso de NUT (_Network UPS Tools_), un software muy trabajado que tiene una lista de compatibilidades inmensa. Puedes revisar esa lista aquí: https://networkupstools.org/stable-hcl.html # Requisitos Para proceder con esta guía, será necesario lo siguiente: * Un SAI compatible con la lista: Lista de Compatibilidades * Un servidor con Docker y conocimientos básicos sobre ello. Si no lo tienes instalado o no has usado previamente Docker, echa un ojo a esta guía: Docker 101 * Tener conectado de la manera correspondiente el SAI al servidor. En mi caso mediante USB a mi Raspberry Pi 5 que ya tiene Docker + Portainer. # Instalación Como ya he mencionado, haremos uso de _Docker_ para el proceso de instalación de **Nutify**. Al necesitar diferentes variables y ser algo extenso, no recomiendo hacerlo solo mediante `docker run`, y hacer uso de un `docker-compose.yaml` para tenerlo todo más organizado. ## Mediante Docker Compose Mi recomendación personal con los servicios desplegados mediante `docker compose` es disponer de una carpeta de trabajo para dicha aplicación. La podemos crear de la siguiente manera en el `home` de nuestro usuario, aunque la ruta base la puedes modificar si deseas: mkdir -p ~/nutify/{logs,instance,ssl,etc} cd ~/nutify Ahora, crearemos el archivo `.env` para nuestras variables de entorno sensibles: nano .env Y ahí, introduciremos la siguientes variables de entorno: SECRET_KEY=test1234567890 Introduce la clave secreta que consideres. Ahora toca crear el fichero de `docker-compose.yml` donde tendremos las especificaciones del contenedor y otros datos necesarios: nano ./docker-compose.yml El contenido de este fichero deberá ser el siguiente, aunque si sabes lo que estás haciendo, puedes adaptarlo como gustes: services: nut: image: dartsteven/nutify:latest-raspberrypi5-arm64 container_name: Nutify # Privilegios requeridos para acceso a UPS y dispositivos USB. privileged: true cap_add: - SYS_ADMIN # Extended system administration capabilities - SYS_RAWIO # Raw hardware I/O access - MKNOD # Create special device files if needed # USB device mapping devices: - /dev/bus/usb:/dev/bus/usb:rwm device_cgroup_rules: - 'c 189:* rwm' # Allow all USB character devices # Persistent storage and host integration volumes: - ./logs:/app/nutify/logs - ./instance:/app/nutify/instance - ./ssl:/app/ssl - ./etc/nut:/etc/nut - /dev:/dev:rw - /run/udev:/run/udev:ro # Variables de entorno environment: - SECRET_KEY=${SECRET_KEY} # Usada para encriptar secretos. - UDEV=1 - LOG=true - LOG_LEVEL=INFO - LOG_WERKZEUG=true - ENABLE_LOG_STARTUP=Y - SSL_ENABLED=false # DNS resolvers dns: - 1.1.1.1 - 8.8.8.8 dns_opt: - timeout:2 - attempts:2 # Exposed ports ports: - 3493:3493 - 5050:5050 - 12443:443 restart: always user: root # Necesario para el correcto funcionamiento de NUT. Ahora, tan solo deberemos lanzar el fichero para que Docker lo ejecute: sudo docker compose up -d ¡Y con esto deberíamos tener funcionando tanto NUT como Nutify! # Configuración Para comenzar con la configuración, deberemos acceder al panel de Nutify, abriendo el navegador e introduciendo la IP de tu servidor seguido del puerto `5050`. Te aparecerá esta interfaz: Rellena los datos para generar tu cuenta de administrador y dale al botón de _Next_ para continuar. Aquí solo tenemos que introducir el nombre que recibirá esta instancia de Nutify como servidor. Tras esto, de nuevo al botón de _Next_. En este punto, deberemos seleccionar lo que necesitemos. En mi caso, he elegido estas opciones por lo siguiente: * **Single Monitor** : Sólo voy a tener una UPS conectada. * **Standalone** : Mi UPS está conectada directamente a mi servidor. En caso de tener otras condiciones, recuerda adaptarlo a tus necesidades. Una vez seleccionado, le daremos otra vez a _Next_. Para esta pantalla, podéis si queréis hacer la configuración manual, pero en la gran mayoría de casos (si no todos) la automática os lo va a configurar bien. La seleccionáis, y posteriormente hacéis click en los dispositivos que os salgan, en mi caso solo uno. Nos mostrará más detalles de la configuración del SAI. Podremos elegir la zona horaria, el nombre del dispositivo o la moneda a utilizar para los informes de consumo. No te preocupes que también se puede modificar posteriormente desde el panel de administración de Nutify. Cuando lo tengas, dale a _Next_. Ahora estaremos viendo un resumen de la configuración que ha realizado por nosotros. Podemos revisar que está todo como queremos y lanzar una prueba haciendo clic en el botón _Test Configuration_. Si todo ha ido bien, nos saldrá una ventana con los resultados del test. La podremos cerrar dando a _Close_ y luego tendremos ya visible el botón de _Save Configuration_ , que al darle nos aparecerá esto: Tan solo hacemos clic sobre _Restart Server_. Nos mostrará un contador de 30 segundos, que al finalizar nos redirigirá automáticamente a la página de bienvenida: Donde ya podremos estar visualizando algunas de las estadísticas y gráficas de nuestro SAI. ¡Ya lo tenemos funcionando! ⚡ # Reportes Una de las mejores herramientas que tiene Nutify es su capacidad de enviar informes de estadísticas de uso, propiedades del SAI y otra información interesante. Os pondré como ejemplo el reporte de consumo, donde nos informa cuánto nos cuesta tener todo lo que tenemos conectado a nuestro SAI encendido, en la moneda que le especifiquemos. Accedemos al menú izquierdo y vamos a la sección de _Energy_. Ahí nos mostrará lo siguiente: Deberemos darle al botón de _Edit_ que aparece arriba a la derecha, al lado de _Current Rate_. Nos llevará al formulario de _Power Flow_ , donde se nos permite especificar el coste eléctrico que tenemos, el cual obtendríamos de nuestro contrato de luz, además de poner la salida nominal de nuestro SAI, los Watts que tiene, vamos. Una vez rellenado, le damos a _Save Changes_. Ya tenemos establecido el coste, ahora toca ver cómo podemos generar un reporte. Para ello, primero deberemos elegir qué medio utilizaremos para el envío del reporte. En mi caso, he elegido hacer uso del correo electrónico. Esto se debe configurar en la sección de _System_ del menú izquierdo, y clicaremos sobre _Add Configuration_ : Aquí, dependiendo de tu proveedor de correo electrónico, los datos necesarios podrían diferir. Rellénalo acorde a lo necesario, y dale a _Test Email_ si deseas realizar una comprobación. Si todo ha ido OK, dale a _Save Configuration_. Momento de ir a la configuración general, que la tenemos haciendo clic en el icono del engranaje de la parte superior derecha de la pantalla. Nos debería aparecer lo siguiente: Podremos ver un listado de alertas, que lo configuraremos más tarde, ahora iremos a la sección de _Reporter_ de arriba. Podemos hacer un envío manual mediante este formulario, pero lo ideal es automatizarlo. Para ello, nos iremos al _Report Scheduler_ en la parte inferior, y le daremos a _Add Scheduler_. Como puedes ver, tenemos diferentes opciones. En mi caso quiero un reporte que cumpla con lo siguiente. * Me informe del consumo. * Me muestre el estado actual del SAI (voltaje, eventos, etc). * Se me envíe de forma semanal. * La información sea de la última semana. Aquí tenéis la configuración resultante: Lo puedes replicar, darle a _Save Schedule_ ¡y ya estaría! Ya cuentas con tu reporte semanal automático de tu SAI o UPS. # Alertas Las alertas son muy cómodas si queremos enterarnos de cuando un parámetro de nuestro SAI no está como debería. La más común es cuando el SAI entra en funcionamiento con su batería. Suele significar que la corriente se ha cortado, y que debemos actuar. Tenemos un listado enorme, que podemos ver accediendo a la configuración general en el engranaje de la esquina superior derecha. Aquí tenéis parte del listado: Para activarlas solo hay que elegir la configuración que tengáis dada de alta para cada método. En mi caso, al tener ya el mail funcional, iré seleccionándolo para cada notificación que me interese recibir (normalmente todas). Al hacerlo, se irán activando: Si quisieras poder realizar automatizaciones en función de estas alertas, sería interesante que utilizaras mejor plataformas como _NTFY_ o sistemas de _webhooks_ , ya que permiten integrarse mejor con agentes de flujos como _n8n_ , que aportan mucha versatilidad. # Conclusión Ahora disponemos de un servicio que nos da información muy útil del estado de nuestro SAI, junto con un desglose del consumo, reportes, alertas... De esta manera podemos actuar de forma cómoda ante cortes de luz, realizando apagados en secuencia o incluso posteriormente activar de nuevo nuestros dispositivos. Además con el reporte que hemos configurado, ahora recibirás un aviso del coste eléctrico que suponen tus dispositivos encendidos. # Referencias Listado de referencias empleadas para la información de este post: * Documentación oficial de NUT: https://networkupstools.org/ * Wiki de Nutify: https://github.com/DartSteven/Nutify/wiki * Repositorio oficial: https://github.com/DartSteven/Nutify # Vídeo 0:00 /1:55 1×
000
Runesoft @river.blog.runesoft.net.ap.brid.gy · 22/07/2026
Montar tu propio gestor de servidores de Minecraft con Crafty, ya tengas Windows, Linux o uses Docker.
blog.runesoft.net
Tu servidor de Minecraft en Windows, Linux o Docker
# Introducción A la hora de montar nuestro propio servidor de Minecraft, tenemos diversas opciones, tanto a nivel de dónde montarlo, como del software a utilizar para gestionarlo. Lo bueno es que hoy día tenemos mucha variedad, pudiendo tener el nuestro tanto mediante un hosting explícito de Minecraft, como a partir de una máquina virtual o incluso nuestro propio PC personal o un PC viejo que tengamos sin tanto uso. Tras muchos años probando diferentes opciones de software, he terminado por decantarme siempre por Crafty. # ¿Qué es Crafty? Se trata de un software de gestión de servidores de Minecraft que lleva ya muchos años en activo. Se utiliza en muchas plataformas y de hecho viene como plantilla en múltiples proveedores VPS. Es ligero y sencillo de utilizar, permite tener varios servidores de manera simultánea, configurarlos, lanzarlos y gestionarlos. Por supuesto, cuenta con herramientas de logs, de modificación de ficheros para agregar mods, de monitorización y de Backups. E incluso alertas y tareas programadas. Es por esto que para mi es la más cómoda de las que he podido probar, y es la que hoy os traigo en este post. # Requisitos Para continuar con el proceso de instalación del post, necesitarás lo siguiente: * Un servidor (físico, VM o VPS) con al menos 4GB de RAM. * Una distro Linux instalada (para las opciones Sobre Linux y Sobre Docker o Windows (para la opción Sobre Windows). * Conocimientos básicos sobre comandos Linux/Powershell y Docker. Docker 101 Si necesitas conocer Docker, te recomiendo seguir estas guías del post para iniciarte: Guía Docker 101 # Instalación Para instalar Crafty como gestor de servidores de Minecraft, tenemos diferentes maneras de hacerlo como bien nos indica su guía oficial. En este caso voy a cubrir tres de los métodos, incluyendo uno para los usuarios de Windows: * Instalación Sobre Docker. * Instalación Sobre Linux. * Instalación Sobre Windows. Decide qué método es más cómodo para ti y sigue solo esa parte de la guía. ## Sobre Docker Instalarlo sobre Docker es una de las mejores prácticas, ya que nos permitirá tenerlo aislado, o levantar incluso múltiples instancias si deseamos. Para ello, necesitaremos tener Docker instalado, puedes hacerlo siguiendo esta guía. Una vez esté listo, deberemos crear el siguiente compose: services: crafty: container_name: crafty_container image: registry.gitlab.com/crafty-controller/crafty-4:latest restart: always environment: - TZ=Etc/UTC ports: - "5520-5550:5520-5550/udp" # Hytale - "8000:8000" # HTTP - "8443:8443" # HTTPS - "8123:8123" # DYNMAP - "19132:19132/udp" # BEDROCK - "25500-25600:25500-25600" # MC SERV PORT RANGE volumes: - ./backups:/crafty/backups - ./logs:/crafty/logs - ./servers:/crafty/servers - ./config:/crafty/app/config - ./import:/crafty/import Y lanzarlo ejecutando el comando: sudo docker compose up -d Esto nos lanzará Crafty en background, siendo accesible en la IP de nuestro servidor de Docker y el puerto configurado en el fichero, en este caso el `8443`. ## Sobre Linux Como siempre que se va a trabajar con Linux, sobre todo si es una nueva instalación, te recomiendo ejecutar: sudo apt update && sudo apt upgrade Tras ello, instalaremos GIT, ya que es lo que usaremos para descargar el repositorio de Crafty: sudo apt install git -y Y procederemos a ejecutar el comando que nos proporciona la guía oficial para que todo se instale: git clone https://gitlab.com/crafty-controller/crafty-installer-4.0.git && \ cd crafty-installer-4.0 && \ sudo ./install_crafty.sh Ahora cambiaremos de usuario al que Crafty nos ha configurado para ejecutar el servicio: sudo su crafty Nos cambiamos de directorio: cd /var/opt/minecraft/crafty Y lanzamos: ./run_crafty.sh Durante el proceso de instalación, si has seleccionado la opción de instalarlo como servicio, tendrás la posibilidad de ejecutarlo como tal, usando: sudo systemctl start crafty Con esto tendríamos el servicio de Crafty activo y listo para empezar. ## Sobre Windows En este caso, para evitar manipular nuestra instalación, te recomiendo que hagas uso de la herramienta de _Crafty Portable_ que nos proporcionan. La puedes encontrar aquí: https://gitlab.com/crafty-controller/crafty-4/-/releases Una vez descargada, deberás descomprimirla, y tendrás el ejecutable listo para lanzar. # Configuración inicial Lo primero que deberemos hacer es acceder a nuestro servidor de Crafty, usando el puerto `8443` si lo hemos mantenido por defecto. Siempre haz uso de HTTPS en este caso. Nos pedirá que logueemos, deberemos utilizar las credenciales por defecto que encontraremos en: sudo cat /var/opt/minecraft/crafty/crafty-4/app/config/default-creds.txt Crafty en Windows Esto no es necesario si estás haciendo uso del portable de Crafty en Windows. Cuando las hayas recuperado, introdúcelas en el panel: Le das a _Login_ y accederás al panel de administración principal: # Crear un servidor Esta parte es bastante sencilla, tan solo tendremos que darle a _Create New Server_ , en la parte superior derecha del listado de _All Servers_ que ahora mismo encontrarás vacío: Nos aparecerá un formulario en el que podremos rellenar todo lo necesario: Te dejo aquí lo que significa cada campo: Campo | Uso ---|--- _Server Type_ | Tipo de servidor. En la mayoría de casos seleccionarás _Minecraft servers_. _Server Select_ | Ejecutable de nuestro servidor. Aquí elige el que desees entre las opciones (Vanilla, Paper, etc). _Server Version_ | Versión de Minecraft a ejecutar. Es posible que versiones recientes no estén disponibles para la opción elegida anteriormente. _Server Name_ | Nombre que le quieras dar a tu nuevo servidor. _Minimum Memory_ | Memoria mínima que reservará tu servidor. Maximum Memory | Memoria máxima que consumirá tu servidor. _Server Port_ | Puerto en el que aceptará conexiones el servidor. Una vez rellenes todo como necesites, le podrás dar a _Build Server!_ y esperar a que se ejecute correctamente. # Gestiones básicas y herramientas Crafty ofrece multitud de herramientas y pantallas para facilitarnos la gestión de nuestro servidor. Estas son algunas de ellas. ## Terminal Es la ventana por defecto que se nos muestra cuando abrimos el detalle de un servidor activo. Nos permite ver la terminal en tiempo real del servidor, e interactuar con ella, pudiendo ejecutar comandos de Minecraft. ## Logs Sección dedicada a la muestra de logs, donde podrás incluso filtrar según necesites para buscar lo que te haga falta. ## Tareas Programadas Aquí se nos permite configurar tareas programadas para nuestro servidor, pudiendo elegir entre diferentes tipos como: * Iniciar el servidor. * Parar el servidor. * Reiniciar el servidor. * Hacer una copia de seguridad. * Ejecutar un comando customizado. Para ello deberemos rellenar el formulario de creación de nueva tarea: Que adicionalmente da opciones de configuración de frecuencia y hora de ejecución. ## Backup Área en la que podremos crear diferentes backups. Estos se ejecutarán según las condiciones en las que los definamos. Nos indica siempre la ruta en la que se depositan, combinado con un _rsync_ podríamos depositarlos en nuestro NAS para más seguridad. ## Archivos Se trata de un visor al estilo explorador de archivos de los ficheros relevantes de nuestro servidor. Adicionalmente nos permite editarlos directamente, siendo algo muy práctico para modificar las configuraciones de plugins o mods. ## Configuración Este apartado es para modificar la configuración del servidor que tiene que ver de manera directa con la gestión de Crafty, y no con lo que es Minecraft en si. Las modificaciones se hacen en cuanto un campo cambia. ## Gestión de Usuarios Una simple tabla con los usuarios que hayan accedido al servidor. Nos indica el estado online/offline de los mismos, además de darnos accesos rápidos a comandos como: * Banear. * Expulsar. * Dar privilegios. * Quitar privilegios. También nos indica la última fecha de conexión y el listado de jugadores baneados. ## Métricas Una gráfica que nos muestra el consumo de recursos y cuántos jugadores hay conectados en una línea temporal. # Conclusión Ahora ya sabes cómo montar tu propio servidor de Minecraft, haciendo uso de una cómoda interfaz de gestión como Crafty, para así poder configurar múltiples servidores y tenerlo todo mucho más sencillo de usar. # Referencias * Guía de inicio e instalación de Docker: https://blog.runesoft.net/docker-101/ * Guía oficial de Crafty: https://craftycontrol.com/ * Guía de Crafty en Docker: https://docs.craftycontrol.com/pages/getting-started/installation/docker/ * Guía de Crafty Linux: https://docs.craftycontrol.com/pages/getting-started/installation/linux/ * Guía de Crafty en Windows: https://docs.craftycontrol.com/pages/getting-started/installation/windows/
000
Runesoft @river.blog.runesoft.net.ap.brid.gy · 16/06/2026
En esta guía verás los pasos necesarios para instalar AdGuard Home y asñi bloquear anuncios y customizar tus entradas DNS locales.
blog.runesoft.net
Filtra y bloquea anuncios con AdGuard Home
Adguard es una empresa que lucha contra la publicidad invasiva. Tienen desde extensiones de navegador y aplicaciones móviles, hasta servidores DNS propios que eliminan los dominios publicitarios. Pero uno de sus productos más interesantes para nosotros como _homelabbers_ , es su servicio de **Adguard Home**. Un producto que podemos desplegar en nuestra red, de forma que filtra y elimina la mayoría de la publicidad, además de contar con otras funcionalidades interesantes. Está en el mismo ámbito que el ya conocido [Pi Hole] (https://blog.runesoft.net/installing-pihole-docker-or-kubernetes/), aunque últimamente le está ganando la carrera gracias a su simplicidad. # Requisitos Para poder seguir los pasos de instalación indicados en este post, deberás contar con lo siguiente: * Un servidor, VM o contenedor LXC: * Con _Docker_ instalado si eliges la opción contenerizada. * Acceso a la administración de tu _router_. * Conocimientos básicos sobre Docker * Un café a disposición (opcional). Docker Si aún no manejas Docker o no lo tienes instalado, re recomiendo revisar estas dos guías: * Instalar Docker y Portainer * Serie Docker 101 Con todo ello preparado, ¡podemos empezar! # Instalación Actualmente contamos con dos métodos al igual que en muchas otras aplicaciones: Binario y contenedor. Te enseñare ambas maneras para que puedas elegir. Normalmente suele ser recomendable hacerlo mediante contenedores, pero si queremos contar con DHCP es más cómodo y sencillo tenerlo como servidor independiente en una VM o contenedor LXC con una IP estática. ## Mediante Binario Es el método más recomendado y bastante sencillo, tan solo tendremos que buscar dentro de este listado el archivo correspondiente al sistema operativo de nuestro servidor, máquina virtual o contenedor LXC: Lista de versiones y sistemas Cuando la tengamos localizada, nos copiamos la ruta de descarga y la utilizamos para el siguiente comando. En mi caso al ser Ubuntu he utilizado la de Linux: curl -L https://github.com/AdguardTeam/AdGuardHome/releases/download/v0.107.77/AdGuardHome_linux_amd64.tar.gz | tar xzvf - Con esto tendremos el binario descargado, tendremos que movernos dentro de la ruta descomprimida, y solo queda que ejecutemos el instalador. Para esto usaremos el siguiente comando: cd AdGuardHome sudo ./AdGuardHome -s install Nos aparecerá un pequeño log indicando el proceso de instalación, y finalmente las rutas de conexión para realizar las configuraciones iniciales. Y si realizamos clic sobre la que tiene la IP de nuestro servidor, podremos ver la pantalla para comenzar con la Configuración inicial. ## Mediante Docker ### Docker Run Para este método, primero deberemos crear las carpetas base. Recuerda adaptar estas rutas según tus necesidades: mkdir -p ~/adguard/{workdir,confdir} Y ahora sí podremos proceder a ejecutar este comando. docker run --name adguardhome\ --restart unless-stopped\ -v ~/adguard/workdir:/opt/adguardhome/work\ -v ~/adguard/confdir:/opt/adguardhome/conf\ -p '192.168.1.183:53:53/tcp' -p '192.168.1.183:53:53/udp'\ -p 80:80/tcp -p 443:443/tcp -p 443:443/udp -p 3010:3000/tcp\ -p 853:853/tcp\ -p 784:784/udp -p 853:853/udp -p 8853:8853/udp\ -p 5443:5443/tcp -p 5443:5443/udp\ -d adguard/adguardhome DHCP AdGuard también puede actuar como DHCP. En el comando proporcionado no vienen los puertos para ello, ya que en la máquina en la que se aloja se hace uso de ellos para el cliente DHCP. Si quieres disponer de ellos deberás utilizar una IP estática del servidor y deshabilitar el cliente DHCP. Y con esto tendríamos ya nuestro contenedor funcionando, tan solo tendrás que ir a la sección de Configuración inicial si decides quedarte con este método de instalación. ### Docker Compose Lo primero será crear la carpeta para alojar todo lo relacionado con AdGuard, recuerda adaptar la ruta a tus necesidades: mkdir -p ~/adguard Tras esto, crearemos nuestro fichero (con el editor que deseemos): nano ~/adguard/adguard-compose.yml Y en este insertaremos el siguiente contenido: services: adguardhome: container_name: adguardhome image: adguard/adguardhome ports: - '5443:5443/udp' - '5443:5443/tcp' - '8853:8853/udp' - '853:853/udp' - '784:784/udp' - '853:853/tcp' - '3000:3000/tcp' - '443:443/udp' - '443:443/tcp' - '80:80/tcp' - '53:53/udp' - '53:53/tcp' volumes: - type: bind source: '~/adguard/confdir' target: '/opt/adguardhome/conf' bind: create_host_path: true - type: bind source: '~/adguard/workdir' target: '/opt/adguardhome/work' bind: create_host_path: true restart: unless-stopped Guardamos el archivo y lo ejecutamos haciendo uso del siguiente comando: sudo docker compose -f ~/adguard/adguard-compose.yml up -d Y veremos como al cabo de unos segundos se levanta sin problemas. # Configuración inicial Lo primero que deberemos hacer es acceder a la URL de nuestro servidor de AdGuard al puerto que hayamos configurado, que por defecto es el `3000`: `http://ip.server.ad.guard:3000` Una vez ahí, nos aparecerá la pantalla de configuración inicial, le daremos a _Comenzar_. En la siguiente página nos solicita qué interfaces de nuestro servidor vamos a utilizar para gestionar cada servicio que nos proporciona. Aquí deberemos elegir la interfaz que corresponda con la IP de nuestro servidor, que es la que habremos utilizado para acceder remotamente, en mi caso la `192.168.1.110`. Los puertos los dejaremos como vienen. Tras dicha configuración, le daremos a _Siguiente_. Momento de crear nuestro usuario de administración. Nuevamente, cuando lo completemos, le daremos a _Siguiente_. Este punto es importante, ya que nos avisa de configuraciones adicionales de nuestra red que tendremos que realizar fuera de nuestro servidor de AdGuard para que funcione correctamente. * Contar con una IP estática o reservada mediante DHCP para el servidor. * Configurar el router o servidor DHCP para que reparta la IP de nuestro servidor de AdGuard como nuevo servidor DNS. Si cumples con estos puntos, podrás continuar haciendo clic en _Siguiente_. Y por último nos notificará de que hemos completado la configuración inicial, llevándonos al login dándole a _Abrir panel de control_. Aquí introduciremos los datos del usuario que hemos creado anteriormente. Y podremos ver el panel general de AdGuard: # Herramientas y utilidades A continuación vamos a ver algunas de las herramientas y utilidades que nos proporciona AdGuard Home desde su interfaz. ## Panel de Control Es el panel principal donde podremos ver las diferentes estadísticas a medida que se va haciendo uso del servidor DNS. Adicionalmente, nos da la opción de parar el servicio, ya sea por un tiempo concreto o de forma indefinida hasta que lo activemos nuevamente. Para ello podemos hacer uso del botón de _Deshabilitar protección_ de la parte superior izquierda: ## Configuración En esta sección contamos con diversas opciones de configuración, desde la general, hasta la del servidor DNS o DHCP. Aquí accederemos en función de lo que necesitemos: ### Configuración DNS Nos da opciones para gestionar el servidor DNS, como poder agregar los _upstreams_ , definir el comportamiento entre Balanceo de carga, Consultar Paralelas o velocidad, y otras muchas más. También tenemos la posibilidad de crear listas ACL para la resolución DNS, para evitar clientes no deseados. ### Configuración de clientes Este apartado está pensado principalmente para registrar los clientes de forma que sean más sencillos de inspeccionar en las estadísticas. ## Filtros Es el apartado más relevante dentro de las opciones que nos da, ya que es donde podremos definir de manera manual las diferentes listas de bloqueos o permitidos, además de poder bloquear por servicios de manera más cómoda. ### Listas de bloqueo DNS Aquí podremos agregar las listas de bloqueos DNS que nos interese. Viene con la lista de AdGuard por defecto activada. ### Listas de permitido DNS Al igual que las de bloqueo, pero a la inversa. **Estas sobreescriben la de bloqueos** , de forma que nos permite agregar un dominio que figure en una lista, para permitir acceder a él. Por defecto viene vacía. ### Reescrituras DNS Una sección muy relevante, porque es donde podremos dar de alta nuestros propios dominios internos para nuestros servidores. Por ejemplo agregar `it-tools.runesoft.internal` para que apunte a la IP correspondiente, dándole a _Añadir reescritura DNS_ : Lo rellenamos con los datos necesarios, y al darle a _Guardar_ lo podremos ver en la lista. ### Servicios bloqueados Aquí nos aparecerá una larga lista de servicios que podremos seleccionar para bloquear según necesitemos. Están agrupados por tipo de servicio. También tenemos atajos para bloquear todo, desbloquear todo, y lo mismo a nivel de cada agrupación de servicios. # Conclusión Ahora con AdGuard Home podremos gestionar mas cómodamente el bloqueo de los servicios y anuncios no deseados, junto con estadísticas de uso y configuraciones para tener nuestros nombres de dominio internos. Esto lo hace uno de los servicios más habituales e ideales para un homelab, por su sencillez y utilidad. # Referencias * Documentación oficial: https://adguard-dns.io/kb/es/adguard-home/getting-started/ * Imagen Docker oficial: https://hub.docker.com/r/adguard/adguardhome * Repositorio oficial: https://github.com/AdguardTeam/AdGuardHome # Vídeo 0:00 /1:35 1×
000
Runesoft @river.blog.runesoft.net.ap.brid.gy · 08/06/2026
Muchos buscamos un servicio que nos permita tener todo lo necesario para desplegar cualquiera de las aplicaciones de nuestro Homelab. Si además venimos de usar algunos VPS o proveedores de servicios como Vercel, Netlify, Heroku... Coolify nos va a venir muy bien, ya que se trata de un PaaS o […]
blog.runesoft.net
Despliega cualquier app contenerizada con Coolify
Muchos buscamos un servicio que nos permita tener todo lo necesario para desplegar cualquiera de las aplicaciones de nuestro _Homelab_. Si además venimos de usar algunos VPS o proveedores de servicios como _Vercel_ , _Netlify_ , _Heroku_... **Coolify** nos va a venir muy bien, ya que se trata de un PaaS o _Product as a Service_ , pero que podemos _auto hostear_ en nuestro _homelab_ de forma gratuita, y que encima es de código abierto. Nos permite desplegar aplicaciones, bases de datos y servicios basándonos en un repositorio **Git** , también permitiéndonos lanzar nuestros propios _Docker Compose_ si lo quisiéramos. Si todo eso se te hiciera complicado, siempre puedes recurrir al inmenso listado de aplicaciones ya preparadas que proporcionan, de forma que con unos pocos clics tendrías tu servicio activo. Y lo mejor de todo es que, si nuestro propósito es publica estas aplicaciones, **Coolify** lo pone muy sencillo gracias al _proxy_ inverso integrado (_Traefik_) que nos gestiona de forma automática las redirecciones y los certificados SSL de manera gratuita. # Requisitos Para seguir con este post, necesitarás lo siguiente: * Un servidor o VPS con al menos: * 2 núcleos. * 2 GB de RAM, recomendable 4GB. * Una distribución Linux instalada en dicho servidor (P.ej. Ubuntu). * Una IP estática o dominio con DNS apuntando a tu servidor: Esto es lo ideal si quieres publicar los servicios, ya que **Coolify** mediante su proxy inverso lo gestiona automáticamente. # Instalar Coolify Es un proceso bastante simple, ya que sólo necesitaremos ejecutar el script de instalación oficial que nos proveen. Nos conectamos a nuestro servidor y ejecutamos: curl -fsSL https://cdn.coollabs.io/coolify/install.sh | bash Solo tendremos que esperar a que finalice todo el proceso, ya que el propio _script_ irá instalando las dependencias necesarias en función de tu distribución. Cuando haya terminado, accederemos a la IP de nuestro servidor en el puerto `8000`: `http://<IP_SERVER>:8000` # Configuración inicial Cuando hayamos accedido a la interfaz web, veremos que nos pedirá crear nuestro usuario de administración, mostrando el siguiente formulario, que deberemos rellenar: Tras darle a _Create Account_ , lo siguiente que nos aparecerá es esta pantalla: Tan solo deberemos darle a _Let's go!_ para comenzar la configuración inicial de nuestra instancia de Coolify. En este apartado se nos pregunta qué tipo de servidor tenemos, en nuestro caso deberemos seleccionar _This Machine_ , pero como podemos apreciar se nos ofrecen diversas opciones, pudiendo controlar un servidor remoto o incluso una VPS. Hacemos click en el que corresponda para ir a la siguiente pantalla. Finalmente nos da la opción de crear nuestro primer proyecto. Seleccionamos _Create "My First Project_ para continuar. Y esta sería la última de las pantallas de la configuración inicial. Podemos ir directamente al dashboard, o hacer click en _Deploy Your First Resource_ y elegir qué aplicacion queremos lanzar. # Desplegando servicios Coolify, como ya hemos mencionado anteriormente, nos proporciona diversas formas de desplegar nuestras aplicaciones, así que en este punto revisaremos las tres maneras y sus detalles. ## Desde repositorio GIT Deberemos conectar o seleccionar un repositorio GIT, y Coolify se encargará de detectar automáticamente si se trata de una aplicación NOde, Python, PHP, etc. Tras esto generará el Dockerfile si no existe previamente. Usaremos una de las aplicaciones de ejemplo que proporcionan, en este caso con _NodeJS_ : https://github.com/coollabsio/coolify-examples/tree/v4.x/nodejs Le daremos click a _Public Repository_ en el listado: Nos pedirá que introduzcamos el link del repositorio: Lo ponemos y le damos al botón de _Check repository_ que nos aparece a la derecha. Aquí nos mostrará la configuración que ha detectado como necesaria para el despliegue, y donde podrás revisar si está todo _OK_ antes de darle a _Continue._ De ahí nos llevará al formulario de configuración general de un nuevo recurso. En este caso no necesitamos comprobar nada más que el mapeo de puertos para agregar el `3000:3000`, y ponerle un nombre y descripción si así deseamos. Tras eso, le daríamos a _Deploy_ en la parte superior derecha, y una serie de logs nos aparecerán, indicándonos el proceso: Ahora si accedemos a la IP de nuestro servidor de **Coolify** en el puerto `3000` veremos que nos da un simple _Hello World_ de la aplicación NodeJS desplegada: ## Con Docker Compose Aquí actúa como cualquier otro gestor de Docker, permitiendo especificar un fichero `docker-compose.yml` donde describiremos el _stack_ que queremos desplegar. Para esto tan solo nos tendremos que ir al apartado de _Projects_ en el menú izquierdo, seleccionar nuestro proyecto, y darle a _New Resource_. Esto nos llevará al listado principal de opciones. Aquí en el primer bloque, contamos con la de _Docker Compose Empty_. Si accedemos, podemos usar como ejemplo la herramienta de IT Tools: services: it-tools: image: 'corentinth/it-tools:latest' ports: - '8080:80' restart: unless-stopped container_name: it-tools Quedando de la siguiente forma en el editor web del `docker-compose.yml`: Lo guardamos dándole a _Save_ , y nos llevará al formulario de configuración general de un nuevo servicio. No tendremos que hacer nada más que asignarle un nombre y una descripción, que son identificativos usados por **Coolify** que no tienen que ver con el nombre de contenedor. Ahora con esto, tan solo queda desplegarlo, haciendo clic en el botón de _Deploy_ en la esquina superior derecha. Cuando lo hagamos, nos saldrán una serie de logs de cómo se ha ejecutado, y podremos ver cómo se lanza correctamente. Los podemos cerrar, y si ahora accedemos a la IP de nuestro servidor de **Coolify** al puerto que hemos configurado, veremos como aparece la página de IT Tools. ## Su listado de aplicaciones Esta es la gran ventaja de Coolify: Nos proporciona una gran cantidad de servicios y aplicaciones listas para funcionar. Sólo hay que hacer unas pocas configuraciones previas, pero lo tendríamos funcionando. Retomamos el ejemplo de IT Tools, lo buscamos y lo seleccionamos. Nos saldrá una pestaña con un formulario, del cual podremos elegir el nombre y descripción, aunque no es necesario modificarlo para su funcionamiento. Lo que sí que haremos es que, si queremos que IT Tools sea accesible intermanete desde nuestra red privada sin necesidad de pasar por un Proxy, deberemos editar el Docker Compose, para ello, clicamos en el botón de _Edit Compose File_ encima el nombre del servicio: Y en este punto lo editamos para dejarlo como muestro, indicando el parámetro de puertos para que estos sean accesibles por el anfitrión. Con esto, le damos a _Save_ , y nos llevará de nuevo al formulario de configuración. Aquí le damos a _Deploy_ en la esquina superior derecha, y veremos, como en pasos anteriores, los logs de despliegue del contenedor: Los podemos cerrar sin problemas. Ahora si accedemos a la IP de nuestro servidor de **Coolify** en el puerto que hayamos configurado, veremos que se nos muestra la página de IT Tools sin problema: ## Eliminar un servicio Ahora que hemos visto las diferentes maneras de crear un servicio, veremos cómo eliminarlos. Para ello deberemos ir a nuestros proyectos, acceder al que contenga el servicio deseado, y seleccionarlo. Veremos de nuevo el formulario de configuración: En este punto, deberemos ir a la sección de _Danger Zone_ en el menú izquierdo. Es aquí donde se nos da la opción de eliminar un recurso: Tan solo tenemos que darle a _Delete_ , y nos aparecerá una ventana de aviso: Le damos a _Continue_ y nos pedirá confirmación, al estilo de AWS y otros proveedores, donde nos solicita que introduzcamos el nombre del servicio para corroborar nuestra decisión: Hacemos clic sobre _Continue_ y como último paso, nos solicitará la contraseña del usuario al tratarse de una operación irreversible: Ahora sí, dándole a _Confirm_ el recurso se eliminará finalmente. # Conclusión **Coolify** es un software que da para mucho. Es realmente completo y cumple con prácticamente todo lo necesario para un gestor de aplicaciones contenerizadas. Esto lo convierte en una de las mejores opciones para tener en un _Homelab_. Podemos asignar permisos y roles, revisar logs o centralizarlos, publicar aplicaciones con pocos clics, gestionar sus actualizaciones y backups, prácticamente todo. Y con esta guía ahora podemos contar con **Coolify** en el repertorio de servicios casi indispensables a probar en nuestro _Homelab_. ## Otras caracterísitcas Coolify es un servicio muy completo, nos aporta multitud de herramientas que son difíciles de cubrir en un único post o vídeo, es por eso que, probablemente más adelante, publique de nuevo sobre él, dando más herramientas y ejemplos. # Vídeo 0:00 /2:05 1×
000
Runesoft @river.blog.runesoft.net.ap.brid.gy · 27/05/2026
Homarr nos da la posibilidad de organizar nuestros servicios de forma cómoda gracias a su interfaz web, pudiendo tener nuestro propio dashboard.
blog.runesoft.net
Organiza tu Homelab con Homarr Dashboard
Uno de los servicios más simples y útiles para un homelab es un dashboard. Hommarr, al igual que Homepage, es otro gran candidato para este rol. Permite una gran configuración, todo desde la sencillez de la interfaz web, sin necesidad de manipular archivos de configuración. Además, acepta múltiples usuarios, por lo que cada miembro podría tener su propia página, o podrías hacer alguna pública, para que sea accesible sin necesidad de loguear. # Requisitos Para proceder con esta guía, necesitarás lo siguiente: * Un entorno con Docker instalado y al menos 256MB de RAM disponibles. * Un cliente web para poder realizar la configuración. # Instalar Homarr Esta aplicación acepta multitud de formas de instalarse, tienes todas en su documentación oficial. Pero de todas ellas, la que seguiremos en este post, al igual que en otros muchos servicios, es mediante Docker. La forma más sencilla usando Docker, es mediante un fichero `docker-compose.yml`, que ya reúne todo lo necesario para que el contenedor funcione como se espera. Este fichero lo proveen en su documentación si lo prefieres, pero te dejo aquí el cómo lo he configurado yo utilizando claves en `.env` para ocultarlas adecuadamente. Además de esto, podemos lanzarlo como contenedor _standalone_ , o incluso usando los _stacks_ de Portainer. ## Docker compose Esta es la vía más cómoda y sencilla. Lo primero que haremos será crear una carpeta para nuestra aplicación: mkdir ~/homarr cd ~/homarr Dentro de esta, crearemos nuestro fichero `docker-compose.yml` con el siguiente contenido: services: homarr: container_name: homarr image: ghcr.io/homarr-labs/homarr:latest restart: unless-stopped volumes: - /var/run/docker.sock:/var/run/docker.sock # Integracion Docker (opt) - ./appdata:/appdata env_file: - .env ports: - '7575:7575' Ahora deberemos generar la clave secreta de encriptado y depositarla en nuestro fichero `env`, para ello, ejecutamos: echo "SECRET_ENCRYPTION_KEY=$(openssl rand -hex 32)" > .env Ahora, tan solo tendremos que lanzar nuestro compose: sudo docker compose up -d # Docker Standalone Similar al _Docker Compose_ , pero sin un fichero que lo defina. Al igual que antes, deberemos generar nuestra ruta y la clave de encriptado: export BASE_PATH="${HOME}/homarr2/data" mkdir -p "$BASE_PATH" export SECRET_KEY=$(openssl rand -hex 32) Ahora que ya tenemos nuestra ruta base y la clave generada, podremos ejecutar nuestro contenedor, lanzando el siguiente comando: docker run \ --name homarr2 \ --restart unless-stopped \ -p 7576:7575 \ -v /var/run/docker.sock:/var/run/docker.sock \ -v "${BASE_PATH}:/appdata" \ -e "SECRET_ENCRYPTION_KEY=${SECRET_KEY}" \ -d ghcr.io/homarr-labs/homarr:latest ## Portainer Stack Este es, al fin y al cabo, igual al Docker compose pero haciendo uso de la interfaz de **Portainer**. Accedemos a nuestra instancia, nos vamos al menú de _Stacks_ , y ahí le damos a uno nuevo. Deberemos rellenarlo con lo siguiente: services: homarr: container_name: homarr image: ghcr.io/homarr-labs/homarr:latest restart: unless-stopped volumes: - /var/run/docker.sock:/var/run/docker.sock # Integracion Docker (opt) - ./appdata:/appdata environment: - SECRET_ENCRYPTION_KEY=${SECRET_KEY} ports: - '7575:7575' De forma que quede de la siguiente manera: Adicionalmente, antes de darle a desplegar, deberemos proporcionar la variable de entorno pertinente con la clave de encriptado. Esta la podemos generar desde cualquier entorno Linux que dispongamos, por ejemplo, desde la terminal, y luego copiarla. El comando es: openssl rand -hex 32 Y con esto lo introducimos como variable nueva de entorno llamada `SECRET_KEY`, como se indica en la siguiente imagen: Ahora sí que podremos desplegarlo sin problema desde **Portaienr**. # Configuración inicial Con nuestro contenedor levantado sin problemas, tendremos que acceder a la dirección: `ip.server.homarr:7575` para realizar la configuración inicial. Debería aparecernos el siguiente formulario, en el que podremos elegir el idioma, el tema, y cómo queremos realizar dicha configuración: Al tratarse de una nueva instancia, le daremos a _Empezar de cero._ Entonces nos saldrá el formulario para dar de alta el primer usuario que además tendrá rol de administrador: Tras darle a _Crear usuario_ , podremos elegir entre diferentes opciones de privacidad y comportamiento de Homarr, aquí seleccionar las que os convengan, en mi caso las he dejado como sigue: Dándole a _Continuar_ , nos saldrá una lista de opciones. Le daremos a _Crea tu primer tablero_ para comenzar a crear nuestro dashboard personalizado: ## Creando tableros Los tableros son los propios Dashboards en si, donde podremos crear nuestros links e integraciones que provee Homarr, y se puede gestionar todo ello desde su interfaz web. Si hemos seguido los pasos anteriores, nos habrá llevado a la siguiente página: Aquí es donde se nos da la opción de crear nuestro nuevo tablero, haciendo clic en el botón de _Nuevo Tablero_ en la esquina superior derecha. Esto nos desplegará un pequeño formulario para nombrarlo, elegir cuántas columnas tendrá, y si será público: ℹ️ El hacer un tablero público, significará que será visible sin necesidad de loguear con un usuario válido en Homarr. Las opciones anteriores se pueden modificar si fuera necesario aunque ya lo hayamos creado. Una vez rellenado, le damos a _Crear_ , y nos aparecerá en la lista: Le damos a _Abrir tablero_ , y desde la interfaz que nos sale, es desde donde se nos permitirá crear los diferentes _widgets_ y aplicaciones. Para ello, clicamos sobre el botón del lápiz en la parte superior derecha para activar el modo de edición, y entonces nos aparecerá un nuevo icono de un `+`, le clicamos y nos despliega una serie de opciones: Si de todas ellas, seleccionamos _Nuevo elemento_ , nos saldrá una inmensa lista con todas las opciones: ## Integraciones Hay algunas preconfiguradas ya para que extraigan información relevante, como el caso de los DNS como Pi-Hole o Adguard Home. Puedes ver todas las opciones en su documentación oficial de integraciones. ### Estadísticas Docker Pero hay una muy cómoda, que es la de Docker, que la podemos encontrar si buscamos _docker_ en la barra de búsqueda: Con tan solo agregarla, nos dará un widget con la información de los contenedores que estén activos en el anfitrion sobre el que está lanzado Homarr: Además de sus nombres y estadísticas de uso, también nos da la posibilidad de pararlos o reiniciarlos si fuera necesario, algo muy cómodo para un Dashboard. ### Immich Otro muy bueno es el de Immich, que primero deberemos configurar nuestro token adecuadamente tal y como nos solicitan en su guía para Immich. Y tendría el siguiente aspecto: También cuenta con otra integración de Immich que permite visualizar un álbum de imágenes concreto del usuario que hayamos usado para generar dicha integración. # Conclusión Ahora podemos contar con otra opción más para gestionar nuestro dashboard del homelab, teniendo incluso estadísticas de nuestros servicios y otras integraciones muy cómodas; todo ello fácilmente actualizable desde su interfaz web, sin necesidad de manipular ficheros `yaml` o similares. En este ámbito, como en muchos otros, hay diversas opciones para un propósito similar, es normal que a veces dudemos entre un servicio u otro, pero no te equivocarás en ninguno mientras cubra lo que necesites. # Referencias * Documentación oficial: Getting started | Homarr documentation * Anterior post (Inglés): Homelab Dashboard with Homarr # Vídeo 0:00 /1:49 1×
000
Runesoft @river.blog.runesoft.net.ap.brid.gy · 14/05/2026
Nginx Proxy Manager es un servicio que nos facilita la gestión de nuestros SSL, permite crear Hosts Proxy y centralizar las conexiones de nuestros host y aplicaciones web.
blog.runesoft.net
SSL y Proxy Inverso con Nginx Proxy Manager
Llegado a cierto punto, si tenemos más de un servidor web o API que queremos exponer, estos terminan colisionando en los puertos. Si bien podemos modificarlos o remapearlos en el caso de contenedores, los puertos por defecto para la mayoría de casos siguen siendo: * `80` para **HTTP**. * `443` para **HTTPS**. Si uno se sale de ese estándar, se convierte en algo incómodo, ya que tienes que memorizar los puertos, o lo hace menos confiable a la hora de una navegación normal en el caso de las webs. Para solventar esto, entra en juego lo que se conoce como _Reverse Proxy_ o _Proxy inverso_. Además, nos vemos en la situación en muchos casos de necesitar un certificado **SSL**. Estos, aunque tienen un precio habitualmente, también se pueden obtener de forma gratuita, pero gestionarlos y mantenerlos renovados siempre es un lío. Para tener todo esto, haremos uso de _Nginx Proxy Manager_. # Requisitos Si deseas seguir esta guía, te recomiendo disponer de lo siguiente: * Un entorno Docker configurado, con la posibilidad de ejecutar `docker compose`. Si no dispones de uno, puedes seguir esta guía: Install Docker and Portainer CE * Un servidor **DNS** para asignar nombres de dominio a los puntos de entrada. Puedes usar uno externo y abrir puertos, o si usarás **NPM** internamente puedes tener PiHole Idealmente también contar con: * Un par de servidores WEB que desees darles visibilidad. * **Para certificados SSL** : Un dominio en posesión, con una entrada **DNS** apuntando a tu servidor. # ¿Qué es un proxy inverso? Un _Reverse Proxy_ o _Proxy Inverso_ es un servicio que se sitúa entre un cliente y un servidor, recibiendo las solicitudes de los clientes y encargándose de distribuirlas al servidor correspondiente. Esta redirección para el cliente es totalmente transparente. Las principales ventajas y funcionalidades de un _Proxy Inverso_ son las siguientes: * Centralización y balanceo de carga del tráfico entrante. * Simplificación y abstracción de los servicios expuestos. * Gestión de SSL/TLS en un único punto. * Posibilidad de filtrado de solicitudes maliciosas antes de llegar al servidor de destino real. * Capacidad de implementar una capa previa de autenticación y control de acceso. # Nginx Proxy Manager _Nginx_ es un servidor web clásico, que nos permite hostear nuestras páginas web estáticas. Pero tiene una funcionalidad adicional: también puede hacer de proxy inverso. Podríamos realizar la configuración para ello de forma manual, instalando los diferentes módulos, pero se trata de una funcionalidad tan extendida que ya se empaqueta incluso en contenedores para su uso. Este paquete, conocido como **NPM** o _Nginx Proxy Manager_ incluye hasta una interfaz gráfica desde la que podremos gestionar todo lo necesario: Desde configuraciones de redirección, hasta certificados **SSL** y sus renovaciones automáticas. # Instalación Para realizar la instalación, haremos uso de la imagen _Docker_ oficial. Como se ha mencionado hay otros métodos, pero hoy día este es el recomendable, sobre todo por su comodidad. Por simplicidad, os dejo el `docker-compose.yml`, y a partir de este os dejaré las adaptaciones que deberíais hacer para vuestro entorno. ## Docker Compose Fichero `docker-compose.yml` base para **NPM** : services: npm: image: 'jc21/nginx-proxy-manager:latest' restart: unless-stopped container_name: nginx ports: - '80:80' # Public HTTP Port - '443:443' # Public HTTPS Port - '81:81' # Admin Web Port volumes: - type: bind source: /home/user/nginx/data target: /data bind: create_host_path: true - type: bind source: /home/user/nginx/ssl target: /etc/letsencrypt bind: create_host_path: true Con este fichero, estamos indicando que **NPM** va a usar los siguientes puertos: * `80` para solicitudes **HTTP**. * `443` para solicitudes **HTTPS**. * `81` para la interfaz de gestión de **NPM**. De estos, no recomiendo modificarlos por simplicidad y evitar problemas de funcionamiento del proxy. ⚠️ Recuerda modificar las rutas definidas de los volúmenes __bind__ en su propiedad `device` para que apunte a las rutas que desees. Estas se crearán automáticamente gracias a la propiedad `create_host_path: true`. Una vez tengamos las modificaciones aplicadas, ejecutamos el siguiente comando: sudo docker compose up -d Esperamos un rato, y comprobamos si nuestro contenedor se ha lanzado correctamente: sudo docker ps Si tenemos más contenedores, saldrán listados, pero entre ellos deberíamos encontrar el de **NPM**. # Configuración Tras lanzar el `docker-compose.yml`, podremos acceder a la interfaz web de gestión de _Nginx Proxy Manager_. Para ello, accederemos a la IP de nuestro servidor, seguido del puerto `81`: `http://ip.servidor.nginx.proxy:81` Y lo primero que nos aparecerá será el formulario para crear el usuario de administración: Aquí tan solo tendremos que rellenarlo como prefiramos, creando nuestro primer usuario administrador de NPM al clicar en _Save_. Con esto, podremos ver nuestro tablero principal: Desde aquí es donde podremos gestionar todo lo que necesitemos. ## Crear un host Proxy Esta es la función principal de un _Proxy Inverso_ , redirigir de un punto a otro el tráfico, enmascarando el servicio de destino. Eso lo gestionaremos desde la sección de _Proxy Host_ , donde actualmente no tenemos ninguno. Para crear uno nuevo, le daremos a _Add Proxy Host_ , y nos aparecerá el siguiente formulario: Los campos que necesitaremos rellenar son los siguientes: Campo | Descripción ---|--- **Domain Names** | Listado de nombres de dominio o IPs a los que este _Proxy Host_ deberá atender y redirigir. Son el punto de entrada. **Scheme** | Elegir entre `HTTP` y `HTTPS` en función del protocolo de comunicación entre **NPM** y el servidor de destino. **Forward Hostname/IP** | Dirección IP o Dominio del servidor de destino. Este debe ser único. **Forward Port** | Puerto del servidor de destino al que redirigir. **Websockets Support** | Si el servidor que quieres visibilizar mediante el proxy hace uso de Websockets, deberás habilitarlo. En mi caso, haré este de ejemplo, para redirigir el tráfico entrante a mi servicio de IT Tools, y le daré _Save_ : Y ahora en el listado nos sale nuestro _Proxy Host_ , con los datos que le hemos introducido: ⚠️ En este punto, es necesario que dispongas de un servidor DNS con un dominio apuntando a ****NPM**** con el nombre que desees. Este DNS puede ser externo mediante proveedores si deseas publicar estos servidores; o interno con servicios como PiHole Si no tenemos dado de alta el dominio que hemos introducido, es el momento de hacerlo, y una vez lo tengamos, accederemos a él en una nueva pestaña de nuestro navegador. Al ser mi ejemplo con IT Tools, me sale la siguiente página, verificando por tanto que el _Proxy Host_ ha hecho su trabajo: ## Control de acceso Otra de las grandes ventajas de usar **NPM** como _Reverse Proxy_ es la capacidad de implementar un control de acceso. Por ejemplo, en mi caso anterior donde he configurado el _Proxy Host_ de IT Tools, podríamos exigir que se inicie sesión con un usuario y contraseña para verificar si se tiene o no acceso al servicio, antes siquiera de cargar la solicitud. Toda esta configuración la haríamos desde la sección _Acces Lists_. Le damos a _Add Access Lists_ para que se nos abra el formulario de creación, donde le podremos introducir el nombre de la lista, además de, para este ejemplo, activar _Satisfy Any_ , esto lo que hará es que deberemos cumplir cualquiera de las condiciones de control, con una será suficiente, en nuestro caso, usuario y contraseña: Ahora iremos a la pestaña de _Authorizations_ : Es aquí donde se nos permitirá crear uno o varios usuarios para esta lista de acceso. Le damos a _Save_ y se nos creará la lista de acceso, apareciendo ahora en el listado: Si regresamos a nuestros _Proxy Hosts_ desde el desplegable del menú de _Hosts_ , y editamos el que hemos creado anteriormente, podremos seleccionar la lista de control de acceso: Elegimos nuestra nueva lista, y si ahora refrescamos la página que teníamos de nuestro servidor, veremos que aparece lo siguiente: Se trata de la autenticación básica. Será aquí donde introduciremos los datos de uno de los usuarios creados anteriormente, y al hacerlo veremos que carga adecuadamente: Con esto ya podemos limitar el acceso a ciertos servicios mediante usuario y contraseña. ℹ️ Las __Access Lists__ también permiten filtrado por direcciones IP de origen y otras funcionalidades. ## Certificados SSL y uso de HTTPS Como mencionaba al inicio del post, otra de las funcionalidades relevantes de _Nginx Proxy Manager_ es la facilidad que nos da para solicitar, renovar y gestionar certificados SSL. Para este punto, sí que es necesario tener un dominio contratado, sea con el proveedor que sea, y configurar el DNS del proveedor para que apunte a nuestra IP (usando DDNS o Cloudflare tunnels). En resumen, nuestro servidor de **NPM** debe ser visible desde el exterior al menos el puerto `443`. Una vez tengamos tengamos lo anterior listo, vamos a la sección de _Certificates_. Le daremos a _Add Certificate_ y nos aparecerá un formulario. Aquí agregaremos los dominios que deseemos. En mi caso, voy a utilizar los que tengo publicados y configurados en mi proveedor DNS: Le damos a _Save_ , y ahora nos aparecerá en la lista de certificados disponibles, con su estado. Aquí nos indicará la fecha de caducidad, si se está usando, y la opción de renovarlo. Ahora podríamos regresar a nuestro _Proxy Host_ y editarlo nuevamente, modificando el _Scheme_ a HTTPS y luego yendo a la pestaña de _SSL_ : Seleccionamos ahora el certificado creado y le damos a guardar. Ahora podremos acceder a nuestra web mediante `HTTPS` sin problemas y con un certificado válido. # Conclusión _Nginx Proxy Manager_ como _Reverse Proxy_ o _Proxy Inverso_ nos facilita enormemente la gestión de acceso a nuestros servicios web, junto con sus certificados y controles. Ahora ya sabemos instalarlo y configurarlo adecuadamente para nuestras necesidades, pudiendo tener nuestros servicios publicados, con SSL/TLS y securizados con listas de acceso si fuera necesario. # Referencias Lista de referencias empleadas para realizar este post: * Documentación oficial: Why you should use NGINX to serve your web application - Sling Academy * Control de acceso: Access Control in Nginx Proxy Manager: How to Set Up an Access List - TechBloat # Vídeo 0:00 /2:17 1×
000
Runesoft @river.blog.runesoft.net.ap.brid.gy · 09/05/2026
Aprende a crear y gestionar volúmenes, pensados para persistir los datos de tus contenedores Docker.
blog.runesoft.net
Docker 101 - Persistiendo datos usando Volúmenes
Para almacenar los datos, un contenedor tiene diversas opciones. Si no se le ha especificado nada en su imagen, hará uso de su propia capa de escritura, pero esta se elimina junto con el contenedor, haciendo que no perdure esa información. Luego también tenemos los _binds_ , que nos permiten mostrar una ruta de nuestro host y hacerla accesible para nuestro contenedor, pero este método no es el que mejor rendimiento da, y no permite hacer copias de seguridad de forma cómoda, ya que estas dependerían del anfitrión. Pero aquí es donde entran los volúmenes. # Importante Docker 101 Este post forma parte de una serie de publicaciones formativas respecto a Docker. Si ya te manejas con ello no es necesario, pero igualmente te recomiendo revisarlo, ya que ahí encontrarás todas las publicaciones que tengan que ver con Docker 101 ordenadas: Échales un un ojo aquí: Docker 101 # Requisitos Para seguir cómodamente este post, recomiendo lo siguiente: * Tener un entorno con Docker, lo cual puedes obtener siguiendo este post (inglés): https://blog.runesoft.net/install-docker-and-portainer-ce/ * Haber repasado el post anterior, para entender mejor lo que es: https://blog.runesoft.net/docker-101-comandos-de-utilidad/ # ¿Qué es un Volumen Docker? Es una unidad persistente de almacenamiento, creada y gestionada por Docker. Son necesarios ya que los contenedores sin uso de volúmenes, hacen uso de su capa de escritura, la cual es volátil y va ligada al ciclo de vida del contenedor. Estos volúmenes se crean con el comando `docker volume create`, o cuando levantamos un contenedor con volúmenes nuevos entre sus parámetros. # Crear un volumen Vamos a crear uno de ejemplo, para almacenar la información de una base de datos como PostgreSQL: sudo docker volume create postgres-data Si ahora lanzamos un nuevo contenedor, con la imagen de PosgreSQL, podremos asignarle este nuevo volumen con el parámetro `-v` seguido del nombre en nuestro comando `docker run`: sudo docker container run \ --name postgres-test \ -v postgres-data:/var/lib/postgresql \ -e POSTGRES_PASSWORD=testPassword123 \ -d postgres Si lo ejecutamos en la terminal tendremos este output: También es posible compartir el mismo volúmen entre diferentes contenedores, permitiendo que compartan información. ## Volúmenes BIND Son volúmenes que vinculan o mapean una ruta del sistema de ficheros de nuestro anfitrión a una ruta interna del contenedor. Son muy cómodos y prácticos, por ejemplo, para entornos de pruebas y contenedores de desarrollo, ya que nos permite mostrar la ruta de, por ejemplo, nuestra aplicación web, a un contenedor con NodeJS, para así desplegarla. Para crear un volumen de este tipo haríamos uso del siguiente comando: sudo docker volume create --driver local \ --opt type=none \ --opt device=/home/test/postgresql \ --opt o=bind \ postgre-sql-data-bind Y posteriormente podríamos asignárselo a nuestro contenedor. Ahora todo lo que introduzcamos en la ruta indicada en el la opción `device`, que en nuestro caso es `/home/test/postgresql` será visible y accesible desde el contenedor, pudiendo ser modificada tanto por este, como por el anfitrión. ## Otros tipos de volúmenes Hay más tipos de volúmenes, como los NFS, que son algo más complejos e involucran otros sitemas. Los veremos más adelante en posts sobre copias de seguridad de contenedores, o los _stacks_ , que nos permitirán tener múltiples contenedores como una única aplicación orquestada. # Gestionar nuestros volúmenes A continuación, vamos a ver una serie de situaciones y los comandos involucrados para cada una de ellas. ## Ver los volúmenes (docker volume ls) Como en muchos otros comandos, tenemos la opción de listar, que se haría: sudo docker volumes ls Esto nos mostraría todos los volúmenes que tenemos creados actualmente en nuestro sistema de Docker. ## Saber los contenedores asignados Otra de las situaciones habituales es querer saber qué contenedores están haciendo uso de un volumen concreto. Para esto, tendríamos que ejecutar el siguiente comando, que listará la información de nuestros contenedores y filtrará por sus volúmenes. Sólo tendríamos que indicarle el nombre: docker ps -a --filter "volume=postgres-data" --format "table {{.Names}}\t{{.ID}}\t{{.Image}}" En nuestro caso obtendríamos algo así por pantalla: Este comando es muy práctico, te recomiendo tenerlo a mano. ## Eliminar un volumen (docker volume rm) Este también es muy sencillo y común a otros, haciendo uso de _remove_ o `rm`: sudo docker volume rm postgres-data Si lo ejecutamos sobre un volumen que esté actualmente en uso, nos saldrá la siguiente advertencia: Indicando que no se puede eliminar dado que está asignado a un contenedor. Por tanto, para poder eliminarlo, tendríamos que primero parar nuestro contenedor. Ahora podemos saber cuál es usando el comando del punto anterior (Saber los contenedores asignados): sudo docker container stop postgres-test Pero a pesar de pararlo, el contenedor sigue asignado, por lo que deberíamos eliminarlo: sudo docker container rm postgres-test Y ahora sí que podríamos eliminar el volumen sudo docker volume rm postgres-data Y como en otros comandos, el output es el nombre del objeto manipulado, en este caso, el de nuestro volumen eliminado: Entorno Si has ejecutado los comandos de este paso, te recomiendo ejecutar el siguiente comando para regenerar el entorno de pruebas de este post: sudo docker volume create postgres-data sudo docker container run \ --name postgres-test \ -v postgres-data:/var/lib/postgresql/data \ -e POSTGRES_PASSWORD=testPassword123 \ -d postgres # Inspeccionar un volumen (docker volume inspect) Al igual que con los contenedores, a veces nos interesa ver la información detallada de nuestro volumen, para conocer todas sus características. El comando es muy sencillo, tan solo ejecutaremos: sudo docker volume inspect postgres-data Si queremos registrar esta información o verla más en detalle, podemos exportarla a un fichero `volumen-inspect.yml`: sudo docker volume inspect postgres-data >> postgres-data-inspect.yaml Si lo abrimos, veremos lo siguiente: Información muy básica sobre: * Fecha de creación. * Tipo de _driver_ que utiliza nuestro volumen. * Etiquetas, nos sirven para agrupar objetos en Docker, lo veremos más adelante. * Punto de montaje, la ruta donde se encuentra el volumen en sí. * Nombre del volumen. * Y otras opciones. ## Eliminar todos los volúmenes sin uso (docker volume prune) Hay que tener cuidado con este comando, ya que podría eliminar volúmenes que queremos conservar pero que no se están usando actualmente. Advertencia Es muy cómodo en entornos de prueba y _homelabs_ , pero no recomiendo su uso a la ligera, siempre es mejor elegir los volúmenes concretos. Para usarlo, deberemos parar y eliminar nuevamente nuestro contenedor: sudo docker container rm -f postgres-test Y ahora podremos hacer el _prune_ : sudo docker volume prune Como he mencionado antes es una operación delicada, y el propio Docker nos avisa: Si le decimos que si pulsando `Y`, procederá a eliminarlo. La opción por defecto es `N`, cancelando la operación. Le daremos a que sí queremos, y nos listará los IDs de los volúmenes eliminados: # Conclusión Ahora sabemos crear, asignar, listar, inspeccionar y eliminar nuestros volúmenes, facilitando mucho su gestión. Son un punto muy importante, ya que actúan a modo de _disco duro_ para nuestros contenedores, y son lo único que perdurará si un contenedor se reinicia, o incluso se pueden emplear para compartir información entre varios contenedores. # Referencias Lista de documentación, vídeos, cursos y referencias utilizadas: * Persistiendo los datos de un contenedor: Persisting container data | Docker Docs * Compartiendo archivos con contenedores: Sharing local files with containers | Docker Docs * Formación obtenida del curso: https://www.udemy.com/course/docker-mastery * Formación obtenida del curso: https://www.udemy.com/course/dive-into-cloud-native-containers-kubernetes-and-the-kcna # Vídeo 0:00 /2:04 1×
000
Runesoft @river.blog.runesoft.net.ap.brid.gy · 29/04/2026
Aprende a instalar sobre un NVMe el sistema operativo de tu Raspberry Pi 5 para que vaya mucho más rápido y sea más fiable
blog.runesoft.net
Instalando Raspberry Pi OS en NVMe
El sistema operativo más extendido para Raspberry es el suyo propietario, basado en Debian, Raspberry Pi OS, o antes conocido como Raspbian. Hoy día gracias a la interfaz PCIe de la Pi 5, podemos hacer buen uso de dispositivos NVMe para instalar nuestro sistema y hacer que la Pi 5 vaya muchísimo más rápida y mejorando la resiliencia del sistema al no hacer uso de MicroSD, cuya durabilidad es bastante inferior. En este post vamos a cubrir los pasos necesarios para echar a andar una Pi 5 con un dispositivo NVMe usando Raspberry Pi OS. # Requisitos Para poder seguir este post, necesitarás lo siguiente: * Una Raspberry Pi 5. * Un HAT NVMe para tu raspberry. * Un adaptador NVMe a USB para poder grabar la imagen. * Una MicroSD. # Instalación El proceso de grabado de la imagen del sistema operativo recomiendo hacerlo siempre con la herramienta oficial: Raspberry Pi Imager. Tan solo tenemos que descargarlo, instalarlo y ejecutarlo. ## Dispositivo y SO Nos aparecerá lo siguiente en pantalla: Aquí tan solo seleccionaremos nuestro dispositivo, en nuestro caso, Raspberry Pi 5, y le daremos a **Siguiente** : En este punto se nos pide que elijamos entre los diferentes sistemas operativos. Clicamos en la primera opción _Raspberry Pi OS (64-bit)_ y de nuevo a **SIGUIENTE**. En este punto es donde, si no has introducido ya tu NVMe en su adaptador y conectado al PC, deberás hacerlo, ya que nos dirá que elijamos el dispositivo en el que grabar el SO: Seleccionaremos el que corresponda, y le daremos a **SIGUIENTE**. ## Personalización de la instalación Esta sección es la de personalización: Nos permite poner el nombre del host o equipo, para que se quede ya con ello desde un inicio. Lo rellenamos a nuestro gusto y le damos a **SIGUIENTE** : Momento de seleccionar la zona horaria y la distribución de teclado, nuevamente algo que deberéis configurar en función de vuestras preferencias. Nos pide ya el usuario y contraseña. Este usuario estará dentro del grupo de `sudoers` y será el que en un principio usarás de forma habitual. En este paso nos solicita una configuración Wi-Fi, ya que la Pi 5 cuenta con ello. No es obligatorio, en mi caso no lo rellenaré, pero si para vosotros es interesante, introducid los datos de vuestra red y dadle a **SIGUIENTE**. Al tratarse de un homelab, en esta pantalla elegiré activar el SSH, usando autenticación básica por usuario y contraseña, siendo el que hemos creado un par de pasos atrás. Como último paso de la personalización, nos da la opción de utilizar el servicio cloud gratuito de Raspberry que nos permitiría conectarnos a ella desde fuera. En mi caso no lo utilizo ya que accedo desde VPN, pero es una opción bastante interesante para muchos casos, no descartéis echarla un vistazo. Una vez os decidáis y configuréis si lo queréis, le dais a **SIGUIENTE**. ## Grabado de la imagen Esta es la última de las pantallas, aquí tan solo nos confirma lo seleccionado en el proceso, y le podemos dar ya a **ESCRIBIR** para iniciar el proceso de grabado. Nos avisará cuando finalice y entonces podremos extraer el NVMe. ## MicroSD Repetiremos este mismo proceso para la MicroSD, que nos servirá más adelante para poder configurar el arranque desde NVMe. # Configuración Ahora que tenemos nuestro sistema operativo grabado correctamente en nuestro dispositivo, sólo tendremos que conectarlo en el HAT de nuestra Raspberry, y encenderla. Veremos que se inicia correctamente al sistema operativo, y que podremos utilizar el usuario y contraseña que hemos configurado mediante SSH. Lo primero que haremos será ejecutar: sudo raspi-config Y dentro de este menú, iremos a la la opción 6 de **Advanced Options**. Ahora accederemos a A4, **Boot Order**. Y finalmente seleccionaremos la opción B2, **NVME/USB Boot** , de esta forma ya nuestra raspberry arrancará desde nuestro NVMe. Para comprobarlo, tan solo apagaremos el sistema: sudo shutdown now Quitaremos la MicroSD y encenderemos de nuevo. # Conclusión Con esto ya podemos realizar instalaciones sobre NVMe de nuestras Pi 5, haciendo que tengan un almacenamiento mucho más rápido y fiable, lo que las hace muy competentes como Homelabs en miniatura, sobre todo si contamos con modelos de 8 o 16GB de RAM. # Referencias * Configuración arranque NVMe: How to Use an NVMe SSD on Raspberry Pi (Step-by-Step Guide) – RaspberryTips * Software Oficial Raspberry: Raspberry Pi software – Raspberry Pi # Vídeo 0:00 /2:31 1×
000
Runesoft @river.blog.runesoft.net.ap.brid.gy · 23/04/2026
ChartDB es una herramienta pensada para diseño y edición visual de bases de datos, que nos permite exportarlas a DDL o incluso como imágenes para documentación.
blog.runesoft.net
Diseña bases de datos con ChartDB
Como programadores muchas veces hemos tenido que utilizar o incluso diseñar estructuras de bases de datos. El problema es que, según crecen los proyectos, entender rápidamente su estructura deja de ser tan sencillo. Aquí es donde entra en juego _ChartDB_ , una herramienta pensada para visualizar estos esquemas de una manera mucho más clara. Nos permite representar tablas, columnas y relaciones de forma gráfica, algo muy útil tanto para documentación como para comprender mejor aplicaciones. Es totalmente gratuita y nos da una opción de _selfhost_ , que es lo que vamos a cubrir en este post. # Requisitos Para poder seguir esta guía necesitaremos lo siguiente: * Un servidor con Docker y Docker Compose instalados. * Acceso al terminal de dicho servidor. * Una base de datos existente que queramos documentar o explorar, si queremos sacarle partido desde el primer momento. * _Recomendable_ : * Un proxy inverso o VPN si queremos acceder de forma segura desde fuera de casa. # Instalación La forma más cómoda de desplegar _ChartDB_ en nuestro homelab es mediante `docker compose`, ya que nos permitirá dejar definida la aplicación en un único fichero y levantarla fácilmente cuando queramos. ## Crear el directorio del proyecto Lo primero será crear una carpeta específica para este servicio: mkdir ./chartdb cd ./chartdb A partir de ahora trabajaremos dentro de este directorio. ## Crear el fichero docker-compose.yml Dentro de la carpeta anterior crearemos un fichero llamado `docker-compose.yml` con un contenido similar al siguiente. Como siempre, recuerda adaptarlo a tus necesidades. services: chartdb: image: ghcr.io/chartdb/chartdb:latest container_name: chartdb ports: - "8080:80" restart: unless-stopped volumes: - ./data:/app/data Con esta configuración estamos indicando que: * Usaremos la imagen oficial de _ChartDB_. * El contenedor se llamará `chartdb`. * Expondremos el servicio en el puerto `8080` de nuestro servidor anfitrión. * Se reiniciará automáticamente salvo que lo detengamos manualmente. * Almacenaremos los datos de la aplicación en la ruta `./data`. Puerto Si ya tienes otros servicios usando ese puerto, tan solo tendrás que cambiar el valor de la izquierda. Por ejemplo, `8081:80`. ## Lanzar el contenedor Una vez guardado el fichero, ya podremos iniciar el servicio: sudo docker compose up -d Si todo va bien, Docker descargará la imagen y levantará el contenedor en segundo plano. Para comprobar que está funcionando correctamente, podemos ejecutar: sudo docker compose ps Y también revisar los logs si fuese necesario: sudo docker compose logs -f # Interfaz web Con la aplicación ya lanzada, podremos acceder a su interfaz web desde el navegador usando la IP de nuestro servidor y el puerto configurado en el `docker-compose.yml`. En el ejemplo anterior sería: http://IP_DE_TU_SERVIDOR:8080 Una vez dentro, veremos la interfaz principal de _ChartDB_ , desde la cual podremos empezar a trabajar con nuestros esquemas de base de datos. # Uso básico La utilidad principal de _ChartDB_ es ayudarnos a representar visualmente la estructura de una base de datos. Esto puede venirnos especialmente bien si: * Tenemos una base de datos ya existente que no terminamos de visualizar. * Queremos generar una nueva estructura para una aplicación que estemos desarrollando. * Vamos a hacer cambios en una base de datos que no controlamos del todo. Dependiendo de estos puntos anteriores, podemos empezar a trabajar en ChartDB desde cero, o desde un archivo importado de una base de datos que ya tengamos a disposición, para así poder visualizar el diagrama. Esto nos permite ver de forma mucho más clara: * Las tablas existentes. * Sus columnas y tipos. * Las claves primarias y otras restricciones. * Las relaciones entre unas tablas y otras. En muchos casos, una vista así ahorra bastante tiempo frente a revisar el esquema directamente desde sentencias SQL o paneles menos visuales. Y ya no hablemos a nivel de documentación técnica, que aquí sí que se da un paso importante. Aquí un ejemplo: ## Configuración de tablas Cuando creamos una tabla, podemos hacerlo con click derecho en el grid, o podemos gestionarlo desde su apartado en el menú izquierdo: ## Relaciones o referencias También podemos gestionar las relaciones entre las tablas, ya sea desde la propia interfaz visual, o desde su apartado en el menú izquierdo de **Refs** : Aquí nos aparecerán todas las que tenemos, pudiendo modificarlas; o crear nuevas dándole al botón de **Agregar Relación** en la parte superior derecha de este menú. ## Lenguaje DBML Son las siglas de _DataBase Markup Languaje_ , y se trata de un lenguaje estándar para definir estructuras de bases de datos. ChartDB trabaja sobre esto, y nos permite editarlo directamente como si de código se tratase, si nos resulta más práctico. La ventaja es que nos permite compartir nuestros esquemas de forma más cómoda, gestionarlos incluso como repositorios de código, etc. Aquí un ejemplo: Table "public"."users" { "user_id" bigint [pk, not null, increment] "user_name" varchar(500) [not null] "user_mail" varchar(500) [not null] "user_register_date" timestamp [not null] "user_bio" text } Table "public"."posts" { "post_id" bigint [pk, not null, increment] "post_content" text [not null] "post_date" timestamp [not null] "post_update_date" timestamp "post_delete_date" timestamp } Table "public"."user_posts" { "user_posts_user_id" bigint [not null, ref: > "public"."users"."user_id"] "user_posts_post_id" bigint [not null, ref: > "public"."posts"."post_id"] Indexes { (user_posts_user_id, user_posts_post_id) [pk] } } Table "public"."comments" { "comment_id" bigint [pk, not null, increment] "comment_content" bigint [not null] "comment_date" timestamp [not null] "comment_parent_id" bigint "comment_update_date" timestamp "comment_delete_date" timestamp } Table "public"."users_comments" { "users_comments_user_id" bigint [not null, ref: > "public"."users"."user_id"] "users_comments_comment_id" bigint [not null, ref: > "public"."comments"."comment_id"] Indexes { (users_comments_user_id, users_comments_comment_id) [pk] } } Table "public"."posts_comments" { "post_comments_post_id" bigint [not null, ref: - "public"."posts"."post_id"] "post_comments_comment_id" bigint [not null, ref: - "public"."comments"."comment_id"] Indexes { (post_comments_post_id, post_comments_comment_id) [pk] } } ## Importado y Exportado Teniendo en cuenta el uso de DBML, tanto importar como exportar nuestro esquema resulta muy sencillo y cómodo. Pero si estamos en la situación de que queremos visualizar una base de datos ya existente, ChartDB nos permite importar desde un dump de casi cualquiera de los proveedores de bases de datos relacionales. Y por supuesto podemos hacer este mismo camino pero a la inversa: Generar los DDL para ejecutarlos en el motor que deseemos, como pueden ser PosrgreSQL o MariaDB. También contamos con la posibilidad de generar imágenes de nuestra estructura, ideal para generar documentación técnica de los proyectos. He de decir que esto me ha salvado la vida en muchas ocasiones en conjunto con Obsidian. Aquí un ejemplo del exportado a PostgreSQL del esquema, que lo podemos obtener haciendo clic en **Acciones > Exportar SQL > PostgreSQL**: # Conclusión Con _ChartDB_ podemos añadir a nuestro homelab una herramienta muy práctica para visualizar y entender mejor la estructura de nuestras bases de datos. Su despliegue con Docker Compose es muy sencillo, por lo que en pocos minutos podemos tenerla funcionando en nuestro servidor y lista para ayudarnos a documentar proyectos, revisar relaciones entre tablas o simplemente comprender mejor cómo está organizada la información de nuestras aplicaciones. Y todo esto en la privacidad de nuestra red, por lo que no debemos preocuparnos por datos sensibles u otros aspectos en el mundo laboral. # Referencias * Repositorio o documentación oficial de ChartDB. * Instalación propia en entorno Docker Compose. # Vídeo 0:00 /2:14 1×
010
Runesoft @river.blog.runesoft.net.ap.brid.gy · 14/04/2026
Proxmox es el hipervisor más extendido en el mundo del homelabing, y nos permite desplegar prácticamente todo lo que necesitemos. Hoy cubrimos los pasos para instalarlo.
blog.runesoft.net
Servidor de Virtualización con Proxmox
Tener un servidor donde poder virtualizar todas las aplicaciones que necesitemos en nuestro homelab es, junto con el NAS, de las primeras cosas que se busca conseguir. Lo habitual es hacer uso de un sistema operativo Hypervisor, y en este ámbito el que más abarca es Proxmox, sobre todo porque su uso es gratuito para lo que lo necesitamos. # Requisitos Para poder seguir esta guía e instalar Proxmox, necesitarás lo siguiente: * Un PC o servidor funcional, en el que instalar el sistema operativo. * Tu PC personal, para preparar los medios de instalación y posterior configuración. * Un USB para grabar la ISO e instalar el Sistema Operativo. # Preparar los medios de instalación Antes de realizar lo que es la instalación en sí, tenemos que preparar un dispositivo USB en el que grabaremos la ISO de Proxmox para su instalación. ## Descargar la ISO Accederemos a la web oficial de descargas de Proxmox, y desde ahí elegiremos la última release disponible de **Proxmox VE ISO Installer**. Tened en cuenta que la versión puede diferir con respecto a la mostrada en esta guía: Le damos a descargar y esperamos a que finalice. # Grabar la ISO Para este proceso, recomiendo hacer uso de Rufus, un programa que lleva años entre nosotros precisamente para esta tarea, y que ya hemos cubierto en anteriores posts, pero centrado más en el proceso para Windows 11. Lo descargamos, seleccionando la versión que más nos convenga: Y luego lo ejecutamos. Nos aparecerá una sencilla pantalla en la que nos dirá de seleccionar el dispositivo USB y la ISO. Aquí, si no has introducido el USB, es el momento de hacerlo, para así seleccionarlo en el desplegable, y posteriormente elegir la ISO que acabamos de descargar. Al seleccionar la ISO de Proxmox, es probable que te salte esta advertencia. Tan solo debes darle a _Aceptar_ y ya podrás darle a _Empezar_. Tan solo tendremos que esperar a que el proceso finalice, para poder extraer el USB con nuestro sistema operativo ya grabado en él. # Instalar Proxmox Empezaremos por introducir el USB en nuestro servidor y encenderlo. Luego, dependiendo del fabricante de la placa base, deberemos pulsar un conjunto de teclas u otro, pero el objetivo es el mismo: Abrir la configuración de arranque para que cargue nuestro USB. Cuando lo consigamos, nos aparecerá una pantalla para elegir el modo de instalación que queremos seguir: En mi caso, me moveré sobre _Install Proxmox VE (Terminal UI)_ , y le daré a la tecla `E` para editar los parámetros de lanzamiento. Vamos a la línea que comienza por `linux`, y al final le agregaremos, separado de un espacio, el parámetro `nomodeset`, para evitarnos conflictos de drivers al iniciar la instalación. Esto puede ser muy relevante si hacemos uso de hardware bastante antiguo, o incluso demasiado reciente. Una vez introducido el parámetro, le damos a `F10` para aplicar los cambios y salir, y nos mostrará el EULA, que deberemos aceptar si queremos instalar el sistema operativo dándole a `Enter` sobre el texto de _I agree_. Con esto comienza lo que es el proceso de instalación en sí, y lo primero será seleccionar el dispositivo sobre el que se va a realizar. Recordad seleccionar el que os interese en vuestro caso y tras eso darle a _Next_. En esta segunda pantalla, crearemos nuestro usuario administrador, asignándole una contraseña y una dirección de correo electrónico. Cuando lo tengamos le daremos nuevamente a _Next_. Ahora es momento de elegir nuestro país, zona horaria y distribución de teclado. Y finalmente el nombre de nuestro host, además de unos parámetros de red, que, en caso de estar usando DHCP, ya vendrán rellenos y tan solo le tendremos que dar a _Next_. Esta última pantalla es un resumen de las opciones que hemos ido eligiendo, para confirmar que todo esté correcto antes de comenzar la instalación. Si es el caso, le daremos a _Install_. Y comenzará a instalarse Proxmox. Esto puede tardar un rato, y dependerá de nuestro hardware que sea más o menos tiempo. Una vez finalizado, nos saltará un mensaje para reiniciar. En caso de que se nos pase por alto no importará mucho, puesto que el reinicio se ejecutará automáticamente. Y ya tendremos nuestro Proxmox instalado, lo veremos en nuestro listado de Grub, que por defecto lanzará nuestro nuevo sistema operativo. Que al iniciarse, nos mostrará este mensaje por pantalla antes de iniciar sesión, indicando la dirección y puerto a la que deberemos acceder para poder hacer uso de la interfaz web que proporciona Proxmox. # Interfaz web de Proxmox Una vez accedamos a la URL que se nos ha proporcionado al final del paso anterior, que suele ser `https://ip.de.nuestro.server:8006`, veremos la pantalla de inicio de sesión: Aquí introduciremos _root_ como nombre de usuario, y de contraseña la que hemos rellenado durante el proceso de instalación. Si queremos también podemos modificar el idioma antes de iniciar sesión. Una vez dentro, veremos que se nos salta un mensaje avisándonos de que no tenemos una suscripción válida para este servidor. Esto es normal al estar utilizando la versión gratuita de Proxmox, tan solo le tendremos que dar a _OK_ y podremos empezar a crear nuestras máquinas virtuales y contenedores. Pero antes, para poder tener actualizado nuestro servidor, deberíamos ir a nuestro nodo en el menú lateral, y acceder al apartado de _Updates > Repositories_, ahí le damos a _Add_ , seleccionando esta opción: De esta manera, podremos disponer de las actualizaciones de Proxmox si hiciese falta. # Conclusión Ahora tenemos nuestro propio servidor de virtualización y contenerización con Proxmox, lo cual nos va a permitir lanzar todas las aplicaciones que necesitemos, o poder incluso tener máquinas virtuales para streaming de juegos, servidores, etc. Junto con el NAS, el servidor de Virtualización es de lo primero que se suele tener en un homelab, así que con esto hemos dado un paso importante, y ya podremos tener bastante más autonomía. # Referencias * Guía oficial de instalación: Installation - Proxmox VE * Parámetro `nomodeset`: Proxmox VE Administration Guide # Vídeo 0:00 /2:26 1×
011
Runesoft @river.blog.runesoft.net.ap.brid.gy · 02/04/2026
Ten tu propio Google Photos en tu homelab, pudiendo sincronizar tu galería del móvil en tu NAS.
blog.runesoft.net
Sincroniza tus imágenes com Immich
Cuando tenemos nuestro NAS DIY, una de las primeras cosas que solemos querer es poder sincronizar las fotos de nuestro móvil, aquí es donde entra en juego Immich. Se trata de una aplicación de código abierto y gratuita, con una gran comunidad detrás. Es prácticamente como un "google fotos" online, con una aplicación para móviles que se encarga de sincronizar nuestras fotos. Adicionalmente nos permite ahorrar espacio detectando fotos duplicadas o eliminando si lo deseamos las fotos de nuestro móvil que ya se hayan subido. Y una de las funcionalidades más cómodas: Detección de rostros o texto. Este proceso se hace totalmente en local, por lo que no tienes por qué preocuparte de tu información privada. # Requisitos Para poder instalar este servicio necesitaremos lo siguiente: * Un servidor con Docker con: * Al menos dos núcleos. * Recomendable con 6GB de RAM. * Suficiente espacio de almacenamiento para nuestra galería de fotos: * O acceso a una unidad compartida de nuestro NAS. * Recomendable tener acceso por VPN o similar a tu red, para que la sincronización no se interrumpa si estás fuera de casa. # Instalación Siguiendo la guía oficial de Immich, lo primero que tendremos que hacer será descargar unos ficheros de ejemplo, para luego adaptarlos y finalmente lanzar los contenedores. ## Descarga de ficheros Aquí recomiendo que generemos un directorio específico para Immich: mkdir ./immich cd immich Dentro de esta carpeta, será donde descarguemos los ficheros, usando `wget`, empezando por el `docker-compose.yml: wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml Y terminando con el `.env`: wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env ## Adaptar las variables de entorno En el fichero `.env` que nos hemos descargado vienen una serie de variables de entorno que son necesarias para el funcionamiento de nuestra instancia de _Immich_. Es bastante explicativo, ya que tiene comentarios por cada una de las variables. De todas formas, cubriremos las más importantes. Nada mas descargarlo, el fichero debería ser tal que así: # You can find documentation for all the supported env variables at https://docs.immich.app/install/environment-variables # The location where your uploaded files are stored UPLOAD_LOCATION=./library # The location where your database files are stored. Network shares are not supported for the database DB_DATA_LOCATION=./postgres # To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List # TZ=Etc/UTC # The Immich version to use. You can pin this to a specific version like "v2.1.0" IMMICH_VERSION=v2 # Connection secret for postgres. You should change it to a random password # Please use only the characters `A-Za-z0-9`, without special characters or spaces DB_PASSWORD=postgres # The values below this line do not need to be changed ################################################################################### DB_USERNAME=postgres DB_DATABASE_NAME=immich ### UPLOAD_LOCATION La primera variable que nos encontramos es `UPLOAD_LOCATION`, que almacena la ruta donde se almacenarán todas las imágenes que gestione _Immich_ y sus ficheros. Si estamos realizando la instalación en nuestro propio NAS, deberemos poner la ruta en el pool de almacenamiento que queramos destinar. Por otro lado, si estamos ejecutando _Immich_ en otro servidor, deberemos darle a este acceso a nuestra unidad del NAS mediante NFS montándolo en nuestro `/etc/fsmount`, y posteriormente apuntar a esta ruta montada en la variable de entorno. ### DB_DATA_LOCATION La variable `DB_DATA_LOCATION` indicará la ruta de la base de datos de PostgreSQL. Aquí se recomienda que se haga sobre un disco SSD o NVMe, y preferiblemente que no se haga sobre una unidad compartida por red (NFS/SAMBA). ### TZ Esta variable está comentada, pero por tener una mejor línea de tiempo de nuestras fotos, te recomiendo buscar tu zona horaria aquí, y ponerla en esta variable, des-comentándola. ## Lanzar la aplicación El paso más sencillo de todos. Haremos uso de `docker compose` para lanzar nuestra aplicación, estando en la ruta que hemos creado en el paso 1: sudo docker compose up -d Y veremos que se lanza lo siguiente: Output del `docker compose up` # Interfaz WEB Ahora que tenemos lanzada la aplicación, es momento de acceder a la interfaz WEB que nos proporciona. Estará con la IP de nuestro servidor, seguida del puerto `2283`. Si entramos, veremos esto: Página de inicio de Immich Si le damos a comenzar, nos pedirá que registremos el usuario administrador: Registro de adminstrador de Immich Le damos a registrar, y nos saldrá ahora sí un login, donde deberemos introducir los datos de la cuenta que acabamos de dar de alta: Inicio de sesión de Immich Y empezará el proceso de configuración inicial, algunas preguntas serán sobre el propio usuario, y otras por la instalación. Aquí solo le damos a **Tema**. Mensaje de bienvenida de Immich Elegiremos nuestro tema de preferencia. Este puede ser cambiado posteriormente, y le damos a **Idioma**. Selector de temas En función de nuestro navegador habrá elegido un idioma por defecto, pero lo podremos cambiar si queremos, y le damos a **Privacidad del servidor**. Selector de idiomas Aquí en mi caso he dejado las dos opciones como vienen, activadas. El mapa es una interfaz que personalmente me resulta muy cómoda. Le damos a **Privacidad del usuario** : Opciones de privacidad del servidor Y aquí lo he dejado sin activar, que es como viene por defecto. Le damos a **Plantilla de almacenamiento**. Opciones de privacidad del usuario En este punto podríamos configurar nuestra plantilla para almacenar las fotos, pero también puede ser configurada posteriormente. Por defecto sigue la estructura `AÑO/AÑO-MES-DÍA`, por ejemplo: `2026/2026-04-01/image.png`. Le damos a **Copias de seguridad**. Motor de plantillas de almacenamiento Este panel es meramente informativo, donde nos explican el sistema ideal de copias de seguridad, siguiendo la clásica estrategia **3-2-1**. Le damos a **Aplicación móvil**. Mensaje informándonos de un sistema ideal de backup siguiendo la estrategia 3 2 1. Aquí se nos informa de la aplicación móvil, que instalaremos más adelante. Le damos a **Hecho**. Aplicaciones móviles Y ya estará finalizada la configuración inicial. Con esto ya tenemos nuestro _Immich_ funcional y activo. Como apreciaréis, se parece mucho a algunos proveedores como _Google Photos_. Página principal de Immich Podemos subir fotos desde nuestro PC directamente, a través de esta web, o como veremos en el siguiente punto, mediante la sincronización de nuestro móvil. # Aplicación móvil En mi caso uso _Android_ , pero la podéis encontrar también para _Iphone_. Tan solo hay que buscar en la tienda correspondiente _Immich_ y descargarla. Lo primero que hará es pedirnos la dirección de conexión de nuestro servidor, se la introducimos y le damos a **Siguiente**. Introducir el servidor de Immich Ahora necesitaremos iniciar sesión, con la cuenta que hemos creado previamente, y darle a **Inicio de sesión**. Inicio de sesión en el servidor Este punto es importante, ya que _Immich_ nos pedirá permisos para acceder a nuestras fotos. Depende de lo que desees elige uno u otro, en mi caso tiene permisos para todos los ficheros, si no, nuevas fotos no podrían salir: Selector de permisos para Immich Con esto, nos saldrá el panel principal de _Immich_ , aún sin fotos. Deberemos darle arriba a la derecha, al botón de la nube. Página principal de la app Y se nos abrirá el menú para configurar nuestra copia de seguridad, donde le daremos a **Seleccionar**. Copia de seguridad Aquí ya podremos elegir qué álbumes queremos sincronizar. Seleccionaremos los que deseemos, y luego iremos atrás. Selector de álbumes a sincronizar En este punto, la aplicación nos irá preparando las imágenes que hay que subir, comprobando si ya estaban previamente o no. Solo nos quedará activar la copia dándole a **Habilitar copia de seguridad** en la parte inferior. Copia de seguridad preparada Si nos fijamos, veremos que el número de **Copia de seguridad** aumenta, y el de **Restante** disminuye, indicando que se están sincronizando. Si le diésemos a **Ver detalles** en la parte inferior, veríamos cómo van subiéndose. Activando la copia de seguridad Por último, si volvemos atrás, al panel principal, ya veremos cómo nos sale nuestra galería, al estilo _Google Photos_ de nuestro móvil, con pequeños iconos en la esquina inferior derecha de nuestras imágenes, indicándonos si esa foto está subida o no. Galería de Immich ## Backup en segundo plano Es importante destacar que, al igual que con otras muchas aplicaciones, necesitará permisos para estar funcionando en _background_ , y esto dependerá del sistema operativo de tu dispositivo móvil, marca, modelo, etc. En mi caso os puedo hablar de cómo hacerlo en _Android_. Lo primero será acceder a la configuración y buscar _Immich_ , para acceder a la **Información de la aplicación**. Información de la aplicación de Immich Ahí le daremos a **Batería** , y seleccionaremos **No restringido**. Permisos de batería de Immich Ahora abrimos la aplicación de _Immich_ y en el apartado de **Backup** , deseleccionaremos nuestros álbumes y desactivamos la copia de seguridad. Por último seleccionamos nuevamente nuestros álbumes deseados y activamos la copia. Ahora sí que tendríamos funcionando la copia de seguridad en segundo plano en nuestro móvil _Android_. Es algo enrevesado pero necesario. # Conclusión Con esto ya podríamos estar tranquilos con que nuestras fotos están sincronizadas en nuestro servidor NAS. Además contamos con una interfaz web cómoda que, junto a una VPN, podremos acceder desde donde deseemos, manteniendo la copia de seguridad del álbum. También podremos buscar a nuestros familiares gracias a la detección de rostros que incorpora, o ahorrar espacio en nuestro dispositivo eliminando las imágenes que se hayan subido o aquellas que estén duplicadas. # Referencias * Guía de inicio rápido de _Immich_ : Quick start | Immich * Instalaciones previas realizadas por mi. # Vídeo 0:00 /2:13 1×
021
Runesoft @river.blog.runesoft.net.ap.brid.gy · 28/03/2026
Hoy veremos múltiples comandos de utilidad, para gestionar los contenedores docker que tenemos funcionando en nuestro día a día.
blog.runesoft.net
Docker 101 - Comandos de utilidad
En anteriores post de esta serie de Docker 101, hemos visto cómo lanzar nuestro primer contenedor. Ahora que sabemos esto, es momento de aprender a gestionar los contenedores de nuestra instancia Docker. Por lo que en este post, veremos una serie de comandos de utilidad bastante comunes, que se utilizan en el día a día a la hora de gestionar nuestros contenedores. # Importante Docker 101 Este post forma parte de una serie de publicaciones formativas respecto a Docker, echa un ojo al resto aquí: Docker 101Como la mayoría de aplicaciones que cubrimos en los vídeos y posts funcionan en contenedores Docker, he decidido hacer una serie de publicaciones enseñando lo que sé sobre Docker de forma instructiva, para que aprendáis lo que es, cómo funciona y a utlizar esta herramienta tan comoda. A continuación osRunesoftRubén Morchón # Requisitos Para seguir cómodamente este post, recomiendo lo siguiente: * Tener un entorno con Docker, lo cual puedes obtener siguiendo este post (inglés): https://blog.runesoft.net/install-docker-and-portainer-ce/ * Haber repasado el post anterior, para entender mejor lo que es: Docker 101 - Lanzando nuestro primer contenedor * Lanzar el siguiente comando para tener un contenedor activo para las pruebas que hagamos en este post. Es posible que este paso se repita en algún punto: sudo docker run -d --name it-tools-1 --restart unless-stopped -p 8080:80 corentinth/it-tools:latest sudo docker run -d --name it-tools-2 --restart unless-stopped -p 8090:80 corentinth/it-tools:latest # Comandos de utilidad A continuación, os enumero brevemente los comandos que vamos a ver, con una breve descripción de lo que hacen. Guardaos esta lista ya que puede resultar bastante útil. * `docker container ls` * `docker container start/stop/restart` * `docker container rm` * `docker ps` + `docker ps -a` * `docker container logs` * `docker container inspect` * `docker container stats` * `docker container top` Comando | Descripción ---|--- `docker container ls` | Lista los contenedores. `docker container start` | Lanza uno o más contenedores detenidos. `docker container stop` | Detiene uno o más contenedores lanzados. `docker container restart` | Reinicia uno o más contenedores. `docker container logs` | Muestra los logs de un contenedor. `docker container stats` | Muestra en tiempo real el uso de recursos de los contenedores. `docker container top` | Muestra los procesos que hay funcionando en un contenedor. `docker container inspect` | Muestra la información detallada de uno o más contenedores. `docker container exec -it` | Abre una terminal interactiva en el contenedor. `docker container cp` | Copia ficheros entre el anfitrión y el contenedor. `docker container rm` | Elimina uno o más contenedores. ℹ️ Tenéis una lista más amplia en su documentación oficial: docker container | Docker Docs ## docker container ls Como hemos podido apreciar en la tabla, este comando va a devolvernos un listado de nuestros contenedores, con información bastante útil. estos son los campos que nos informa: * ID del contenedor. * Imagen utilizada en el momento de creación. * Comando de lanzamiento. Esto lo veremos más en detalle cuando tratemos las imágenes. * Momento de creación. * Estado actual del contenedor. * Puertos en uso y su mapeo correspondiente. * Nombres del contenedor. Como podemos apreciar, si lanzamos el comando: sudo docker container ls Nos saldría algo como esto: ### docker container ls -a Con el parámetro `-a` nos va a mostrar incluso los que tenemos parados. Para ello, ejecutaremos el siguiente comando, que veremos en detalle más adelante en este post: sudo docker container stop it-tools-1 Si ahora ejecutamos el listado de contenedores sin el nuevo parámetro, sólo veríamos uno: sudo docker container ls Obtendríamos esto por pantalla: Si ahora lo ejecutamos con el nuevo parámetro de `-a`: sudo docker container ls -a Veríamos los dos, o más, si teníamos otros contenedores parados, como en mi caso: ## docker container start | stop | restart Como bien podemos intuir de estos comandos, y con la descripción de la tabla principal, nos permiten iniciar, detener, o reiniciar uno o varios contenedores. ### docker container start Para verlo en acción, tan solo deberemos ejecutar este comando, que nos iniciará de nuevo nuestro contenedor `it-tools-1` que habíamos detenido en el paso anterior: sudo docker container start it-tools-1 Nos dará un output con los nombres de los contenedores lanzados: Y lo podremos comprobar listando los contenedores activos, ahora que ya sabemos: sudo docker container ls Si nos fijamos, podemos ver que en el caso de `it-tools-1` es `Up 39 seconds`, indicando que se ha iniciado hace relativamente poco: ### docker container stop En este caso, vamos a probar a detener ambos contenedores. Para ello, es tan sencillo como lanzar esto en nuestra terminal: sudo docker container stop it-tools-1 it-tools-2 Y como antes, veremos que se nos pinta por pantalla los nombres de ambos contenedores detenidos: Y podremos comprobarlo ejecutando el listado de activos, que se nos quedaría vacío: sudo docker container ls Pero si ejecutamos el listado completo, veremos que si aparecen: sudo docker container ls -a Y su estado es `Exited (137)` e indicando el tiempo que llevan en dicho estado, como podremos ver en la siguiente imagen: ### docker container restart Este nos va a permitir reiniciar contenedores activos, o iniciarlos en caso de estar detenidos. Lo podremos comprobar ejecutando: sudo docker container restart it-tools-1 it-tools-2 Ya que nos devolverá los nombres de ambos, y si ahora ejecutamos: sudo docker container ls -a Podremos apreciar que ambos están con estado `Up` seguido de un tiempo: Si ahora lanzamos de nuevo el reinicio de contenedores, pero solo en uno de ellos: sudo docker container restart it-tools-1 Y los listamos nuevamente: sudo docker container ls Veremos una diferencia de tiempos en sus estados, indicando que el contenedor `it-tools-1` es más reciente: ## docker container logs Uno de los comandos más útiles y prácticos, ya que nos permite ver qué está sucediendo en nuestro contenedor. Como todo, atiende a la salida de dicho contenedor, por lo que los logs que veamos, dependerán de la imagen. En nuestro caso, vamos a ejecutarlo con una serie de parámetros por hacerlo más cómodo, y ahora los veremos mas en detalle: sudo docker container logs -n 20 -t it-tools-1 Deberíamos tener una salida por consola similar a esta: Si nos fijamos en la línea de tiempo, podremos ver cuándo se reinició nuestro contenedor en el paso anterior. Respecto a los parámetros utilizados, han sido estos dos: * `-n 20`: Mostrar solo las últimas 20 líneas de logs. * `-t`: Mostrar las marcas de tiempo de los logs. Hay otros también muy útiles, como el `-f`, que nos permite ver en tiempo real los logs de nuestro contenedor. sudo docker container logs -f it-tools-2 Se nos quedará esperando, y para dejar de monitorizar los logs, deberemos presionar las teclas `CTRL + C`. ## docker container stats Permite visualizar las estadísticas de consumo de recursos de los contenedores, y lo mantiene actualizado.. Su uso es muy sencillo, ya que podemos lanzarlo sin parametría: sudo docker container stats Pudiendo ver el consumo de recursos de nuestros contenedores activos actualmente: Como también ver el de los contenedores que deseemos en concreto. Para ello, cerramos pulsando `CTRL + C` y ejecutamos lo siguiente: sudo docker container stats it-tools-1 Y con ello veremos que ahora sólo se visualiza el consumo de recursos del contenedor especificado para este caso, `it-tools-1`: ## docker container top Siguiendo un poco la línea del anterior comando, este permite visualizar los procesos en activo que tiene un contenedor en sí. Para ello tan solo tenemos que lanzar el comando seguido del contenedor que deseemos: sudo docker container top it-tools-1 Y se nos devolverán los procesos en ejecución dentro del contenedor: Esto nos puede venir bien para ver si, en caso de tratarse de una imagen o aplicación propia, se ha lanzado el comando que queríamos. ## docker container inspect Este comando nos va a mostrar todo el detalle de un contenedor: Sus redes, volúmenes, parámetros, estado, imagen y otras propiedades. Es muy práctico para poder tener toda la información de un contenedor, e incluso detectar errores de configuración. Lo lanzamos en nuestra terminal de la siguiente manera: sudo docker container inspect it-tools-2 | more Lo canalizamos mediante `| more` para poder ver más cómodamente la configuración en este caso. Si queremos cerrarlo rápidamente tan solo tendremos que pulsar la tecla `Q` de _quit_. ## docker container exec -it Esta simple línea de consola, seguida del contenedor que deseamos, nos va a permitir abrir una línea de terminal directa contra nuestro contenedor, permitiendo hacer pruebas de conexión o incluso de API mediante CURL si fuese necesario. Muy cómodo para hacer otras comprobaciones de red, como verificar si el contenedor resuelve la dirección o DNS de otro en caso de compartir una red. Lo lanzamos de la siguiente manera: sudo docker container exec -it it-tools-1 sh Y una vez dentro, podremos recuperar el `hostname` de nuestro contenedor, e incluso hacer un ping: Si nos fijamos, por defecto el _hostname_ de un contenedor coincidirá con su ID del listado de `docker container ls`. Para desconectarnos, tan solo tendremos que pulsar las teclas `CTRL + D`. ## docker container cp Otro de los más prácticos, ya que permite copiar ficheros entre el anfitrión y el contenedor, o vice versa. Con comandos como este, podríamos copiar el código fuente de nuestra aplicación en un contenedor con Node.js, para posteriormente ejecutarlo, por ejemplo, aunque ya os aviso que este no es el mejor, ya que hay muchas mejores formas (y más prácticas y seguras) de hacerlo. Pero para nuestro caso, vamos a crear un fichero nuevo `hola.txt` que contenga el _hostname_ de donde se ha creado: echo Hola desde $HOSTNAME >> hola.txt Y lo copiamos a nuestro contenedor: sudo docker container cp ./hola.txt it-tools-1:/hola.txt Nos informará de que se ha copiado correctamente: Ahora, si retomamos el comando del apartado anterior y nos conectamos al contenedor directamente, listamos los archivos y mostramos el contenido del copiado: Veremos que efectivamente tiene el contenido del creado desde el anfitrión, ya que contiene su hostname. Ahora lo modificamos agregando una línea adicional: echo Saludos desde $HOSTNAME >> hola.txt Y lo copiamos de vuelta al anfitrión: sudo docker container cp it-tools-1:/hola.txt ./hola_container.txt Si lo abrimos, veremos que efectivamente contiene ambas líneas: Con esto hemos aprendido a mover ficheros entre nuestro anfitrión y nuestro contenedor. ## docker container rm Para finalizar, vamos a eliminar nuestros contenedores, ya que no vamos a hacer más uso de ellos. Para esto, como en otros muchos más comandos de Linux, contamos con la terminología `rm` o _remove_ : sudo docker container rm it-tools-1 Al lanzarlo, habrá dado un error, avisando de que el contenedor está en uso actualmente. Para eliminarlo tenemos dos maneras: O bien paramos primero el contenedor, y luego lo eliminamos; o forzamos su eliminación con el uso del parámetro `-f` de _force_. Vamos a ver los dos casos, primero paramos nuestro contenedor: sudo docker container stop it-tools-1 Y ahora lo eliminamos: sudo docker container rm it-tools-1 Veremos que, como otros comandos anteriores, nos devuelve el nombre del contenedor si finaliza correctamente. Podemos comprobar que no está activo si listamos los contenedores activos: Si ahora lanzamos el borrado del segundo contenedor, pero esta vez con el `-f`: sudo docker container rm -f it-tools-2 Veremos que este se ha eliminado en un único paso, listando los contenedores nuevamente: # Conclusión Siguiendo los anteriores post de la serie hasta ahora, hemos aprendido tanto a instalar nuestro propio entorno con Docker, conocer un poco lo qué es y cómo funciona, y hasta a lanzar nuestros contenedores y gestionarlos sin mucho problema. En los siguientes ya empezamos con temas algo más complejos, como pueden ser los volúmenes, las redes, las imágenes customizadas o los docker compose que tanto hemos usado para instalar algunas herramientas en nuestro homelab. # Referencias Para la realización del post, se han utilizado las siguientes referencias: * Documentación oficial de Docker: docker container | Docker Docs * Mi propia experiencia personal y profesional en el sector. * Formación obtenida del curso: https://www.udemy.com/course/docker-mastery * Formación obtenida del curso: https://www.udemy.com/course/dive-into-cloud-native-containers-kubernetes-and-the-kcna # Vídeo 0:00 /2:14 1×
021
Runesoft @river.blog.runesoft.net.ap.brid.gy · 16/03/2026
Ahora que sabemos qué es Docker, toca aprender a lanzar nuestro primer contenedor, usando docker run.
blog.runesoft.net
Docker 101 - Lanzando nuestro primer contenedor
En el anterior post sobre Docker, vimos qué es, qué papel cumple y un poco su historia. Ahora en este post podemos dar el siguiente paso y empezar a lanzar nuestros primeros contenedores. # Importante Docker 101 Este post forma parte de una serie de publicaciones formativas respecto a Docker, echa un ojo al resto aquí: Docker 101Como la mayoría de aplicaciones que cubrimos en los vídeos y posts funcionan en contenedores Docker, he decidido hacer una serie de publicaciones enseñando lo que sé sobre Docker de forma instructiva, para que aprendáis lo que es, cómo funciona y a utlizar esta herramienta tan comoda. A continuación osRunesoftRubén Morchón # Requisitos Para seguir cómodamente este post, recomiendo lo siguiente: * Tener un entorno con Docker, lo cual puedes obtener siguiendo este post (inglés): https://blog.runesoft.net/install-docker-and-portainer-ce/ * Haber repasado el post anterior, para entender mejor lo que es: https://blog.runesoft.net/docker-101-introduccion-a-docker ℹ️ Durante este post verás otros comandos de docker (como `docker container ls`, o `docker stop`) que serán explicados en futuros posts, pero son necesarios para poder ejecutar el ejemplo de este post. ****No son necesarios conocerlos en profundidad**** , pero como acabo de indicar, no tienes por qué preocuparte que ****los veremos más en detalle en el siguiente Docker 101****. # ¿Qué es un contenedor? Por ampliar un poco más lo que hemos aprendido hasta ahora, veremos algo más en detalle lo que es un contenedor en si. Se trata de un proceso aislado para cada uno de los componentes de una aplicación. Por ejemplo: Si tenemos una aplicación web, podríamos tener un contenedor por cada uno de estos elementos: * Front con React. * Back con Java. * Base de datos con PostgreSQL. * Caché con REDIS. * Sistema de colas con Kafka. Estos recursos estarían individualmente aislados en sus respectivos contenedores, de forma que podamos gestionarlos de forma independiente, sin afectar a nivel de dependencias al resto de contenedores. Esto facilita mucho los despliegues y la gestión de aplicaciones, con una mayor comodidad de actualización, seguridad y control. Y sin contar con que al funcionar sobre Docker, como hablamos en el post anterior, no dependeremos de un sistema operativo anfitrión concreto, y consumiremos muchos menos recursos que con máquinas virtuales tradicionales. # Lanzar un contenedor Para ello, haremos uso de uno de los comandos más básicos: `docker run`. Si habéis seguido la guía de instalación que os recomiendo del punto anterior, ya habréis lanzado uno de prueba, el clásico _Hello World_ de Docker, pero ese comando es demasiado simple para servir de ejemplo real, así que haré uso de una de las aplicaciones que ya tenemos cubiertas en este blog: IT Tools. ## Ejemplo de docker run Os dejo el comando que deberíamos ejecutar para desplegar esta aplicación, y luego veremos más en detalle los diferentes parámetros que se han usado: sudo docker run -d --name it-tools --restart unless-stopped -p 8080:80 corentinth/it-tools:latest Si lo lanzamos tal cual, nos saldrá lo siguiente en nuestra terminal: Podemos ver que está activo con este comando (_que lo veremos más adelante con más detalle junto a otros comandos de utilidad_): sudo docker container ls -a Obtendremos esta salida en pantalla: Y si accedemos a la URL correspondiente, veremos que IT Tools está lanzado sin problemas. Vamos a parar nuestro contenedor con otro comando de utilidad, `stop`, junto al comando `rm` para eliminarlo. Ambos los detallaremos en el próximo post, pero que por ahora nos basta con poder ejecutarlos: sudo docker container stop it-tools sudo docker container rm it-tools Lo comprobamos ejecutando nuevamente: sudo docker container ls -a Y veremos que no hay rastro, ya que se ha eliminado. ## Parámetros del ejemplo Ahora, si nos fijamos en el comando en sí, veremos que es algo extenso y tiene unos cuantos parámetros: * `-d` * `--name it-tools` * `--restart unless-stopped` * `-p 8080:80` * `corentinth/it-tools:latest` ℹ️ Adicionalmente veremos el comando `--rm`. Así que vamos a ir viendo uno a uno qué son y para qué sirven, y así hacernos una idea general del funcionamiento del comando `docker run`. # Parámetro --rm Aunque no sale en el comando inicial debido a incompatibilidad con `--restart`su funcionalidad es muy sencilla: Elimina el contenedor automáticamente si este es parado. Viene de `remove`, como se puede intuir, y resulta muy práctico para las pruebas, pero no es habitual ejecutarlo en las aplicaciones. Lo verás en próximos ejemplos ya que es muy conveniente para poder mostrar y ejecutar cómodamente las diferentes versiones del comando `docker run` a lo largo de este post. ## Ejemplo parámetro --rm Ejecutamos lo siguiente: sudo docker run --rm -d --name it-tools-rm corentinth/it-tools:latest Veremos que se nos da un output por pantalla: Si ahora revisamos los contenedores que tenemos activos: sudo docker container ls Tendremos listado nuestro contenedor, funcionando: Si ahora lo mandamos parar: sudo docker container stop it-tools-rm Veremos que el contenedor se para, y podremos comprobar que el contenedor se ha eliminado sin necesidad del `docker container rm`: docker container ls -a No deberíamos obtener el contenedor. # Imagen corentinth/it-tools:latest Dentro de toda la parametría que se emplea en el comando, la imagen es diría que la más importante, ya que sin esto, no tenemos referencia de qué queremos lanzar, ya que es la manera que tenemos de indicar qué aplicación queremos desplegar en nuestro contenedor. En este caso, estamos desplegando `corentinth/it-tools:latest`. Para entenderlo mejor, vamos a dividir sus partes: * `corentinth`: Autor de la imagen. * `it-tools`: Nombre de la imagen. * `latest`: Versión de la imagen. Siempre lo veremos de esa misma manera: `autor/imagen:version`. Estas imágenes son alojadas en repositorios dedicados, como puede ser Docker Hub, aunque hay de otros proveedores, este es de los más extendidos. ## Ejemplo de imagen Para este caso, con la imagen de ejemplo, tenemos lo mínimo indispensable para lanzar el contenedor. Esto no significa ni garantiza que esté lo que se necesita realmente para que nuestra aplicación funcione adecuadamente, pero Docker es capaz de lanzarlo salvo requerimientos de la propia imagen. sudo docker container run --rm corentinth/it-tools:latest Veremos que se lanza: Y que al pulsar `CTRL + C` el contenedor se para y se elimina, pudiendo comprobarlo mediante: sudo docker container ls -a ## Ejemplo diferentes imágenes Podemos desplegar una imagen concreta, ya que la `latest` es asignada por el autor a la versión (usualmente LTS) que considera como estable o última. En este caso, podríamos elegir desplegar la versión `nightly`, y para ello ejecutaríamos: sudo docker container run --rm -d corentinth/it-tools:nightly Veremos que se lanza, y que ha descargado una nueva imagen: Ahora si lo listamos, veremos que aparece en ejecución: sudo docker container ls -a Si ahora lo paramos mediante este comando, poniendo el nombre del contenedor del listado anterior (recuerda cambiarlo por el que te corresponda): sudo docker container stop practical_boyd Veremos que se ha parado y eliminado, listando nuevamente los contenedores: sudo docker container ls -a # Parámetro -d Es una abreviatura de `detached`, y se emplea para indicara a nuestro contenedor que queremos que se ejecute en background. Es uno de los que más utilizaremos, ya que sirve para dejar una aplicación activa, independientemente de nuestra sesión de terminal, como si de un servicio se tratase, en combinación con otros parámetros como el `--restart` que veremos más adelante. ## Ejemplo parámetro -d Entonces, aislándolo para este caso, podríamos lanzar por ejemplo: sudo docker run --rm -d corentinth/it-tools:latest Veremos que el contenedor se lanza, volviendo a ejecutar lo siguiente: sudo docker container ls -a Procedemos a pararlo, y por tanto, al haber indicado `-rm`, eliminarlo. **El nombre deberemos obtenerlo del listado del comando anterior, bajo la columna`name`**: sudo docker container stop confident_northcutt # Parámetro --name Bastante auto explicativo. Sirve, como se puede intuir, para asignar el nombre a nuestro contenedor, en este caso `it-tools`. Este nombre nos sirve para facilitar el uso de otros comandos de utilidad que veremos en el próximo post y vídeo, como para parar el contenedor, reiniciarlo, lanzarlo nuevamente o revisar sus logs. También nos permite identificar rápidamente nuestro despliegue sin necesidad de memorizar su ID, ya que este ID es aleatorio. ℹ️ En caso de no especificarle un nombre, se le asignará uno automáticamente, siguiendo una nomenclatura __snake_case.__ ## Ejemplo parámetro --name Como hemos podido comprobar, si ejecutamos lo siguiente: sudo docker container run --rm -d --name it-tools corentinth/it-tools:latest Se nos lanzará el contenedor, que podremos ver ejecutando: sudo docker container ls -a Ahora, a diferencia del apartado anterior, podremos pararlo indicando el nombre que le hemos asignado nosotros mismos, y que adicionalmente se elimine ya que lo hemos lanzado como ejemplo: sudo docker container stop it-tools Y veremos que si listamos nuevamente, no sale dentro de los contenedores que tenemos: sudo docker container ls -a # Parámetro --restart Nos va a permitir configurar la política de reinicio de nuestro contenedor. Esta política es lo que se le indica justo tras el parámetro, siendo en este caso `unless-stopped`. Hay otras políticas diferentes, que podemos elegir indicando solo una de ellas después del `--restart`: Política | Descripción ---|--- `no` | El contenedor no se reiniciará automáticamente en ningún caso. Es la opción por defecto en caso de no indicar un parámetro `--restart`. `on-failure[:max-retries]` | El contenedor se reiniciará si se ha finalizado con algún código de error. Adicionalmente se le puede indicar un número máximo de reintentos como `on-failure:3`. Si el servidor en sí se reinicia, el contenedor no se reiniciará. `always` | El contenedor se reinicia en cualquiera de estas circunstancias. Si lo paramos manualmente y reiniciamos el servicio de Docker (o el servidor de Docker en si) el contenedor se volverá a lanzar. `unless-stopped` | Similar al `always`, exceptuando que si el contenedor es parado manualmente, no se reiniciará hasta que lo lances nuevamente. Esto nos viene genial para poder configurar nuestros contenedores para que se reinicien en función de nuestras necesidades, llegando a actuar como si de servicios nativos de _Unix_ se trataran. ## Ejemplo parámetro restart unless-stopped Siguiendo con el ejemplo anterior, ejecutamos: sudo docker run -d --name it-tools --restart unless-stopped -p 8080:80 corentinth/it-tools:latest Comprobamos que se ha lanzado mediante: sudo docker container ls -a Ahora lo paramos: sudo docker stop it-tools Vemos que ha parado: sudo docker container ls -a Reiniciamos el servicio de Docker: sudo service docker restart Esperamos unos segundos a se haga efectivo el reinicio anterior, y ejecutamos: sudo docker container ls -a Podremos apreciar que nuestro contenedor **NO** se ha reiniciado automáticamente: Eliminamos nuestro contenedor para dejar el entorno limpio: sudo docker container rm it-tools ## Ejemplo parámetro --restart always Con esta flag, como se indica en la tabla anterior, nuestro contenedor debería reiniciarse en cualquier circunstancia. Para comprobarlo lanzamos lo siguiente: sudo docker run -d --name it-tools-restart --restart always corentinth/it-tools:latest Como con cada paso, comprobamos la ejecución del contenedor: sudo docker container ls -a Lo paramos haciendo uso de este comando: sudo docker stop it-tools-restart Y comprobamos nuevamente su estado, verificando que se ha parado: sudo docker container ls -a Si ahora reiniciamos nuestro servicio de Docker: sudo service docker restart Y como antes esperamos a que termine de reiniciarse, y luego listamos nuestros contenedores: sudo docker container ls -a Podremos apreciar que nuestro contenedor esta ves **SI** se ha reiniciado automáticamente: # Parámetro -p Este viene de abreviar el término `ports`, y es con el que indicaremos el mapeo de puertos que deseamos para nuestro contenedor. En el ejemplo dado de `it-tools` estamos señalando que el puerto `8080` de nuestro anfitrión tiene una conexión con el puerto `80` de nuestro contenedor. Están siendo mapeados. Siempre se sigue el mismo orden, siendo `anfitrión:contenedor`. ## Ejemplo parámetro -p multi puerto Si tuviéramos que indicar múltiples puertos, tendríamos que concatenar varios comandos `-p`, por ejemplo: docker run -d --name it-tools-multiport -p 8080:80 -p 8443:443 corentinth/it-tools:latest Si ahora ejecutamos lo siguiente: docker container ls -a Veremos que nuestro contenedor ahora nos indica que tiene varios puertos abiertos: Paramos y eliminamos este contenedor: sudo docker container stop it-tools-multiport sudo docker container rm it-tools-multiport ## Otras configuraciones de puertos Adicionalmente, podemos indicar IPs concretas de anfitrión, que nos viene genial en caso de tener múltiples interfaces en nuestro servidor; y también los protocolos (`TCP/UDP`). Por ejemplo (probablemente no te funcione ya que dependes de tener esas mismas IPs): docker run -d --name it-tools-multiport -p 192.168.10.5:8080:80 -p 192.168.20:5:8443:443 corentinth/it-tools:latest Con este comando le estaremos indicando lo siguiente: * El puerto `80` de nuestro contenedor es accesible desde el puerto `8080` de la IP `192.168.10.5` de nuestro anfitrión. * El puerto `443` de nuestro contenedor es accesible desde el puerto `8443` de la IP `192.168.20.5` de nuestro anfitrión. # Referencias Lista de documentación, vídeos, cursos y referencias utilizadas: * Qué es un contenedor: What is a container? | Docker Docs * Políticas de reinicio: Start containers automatically | Docker Docs * Mapeo de puertos: Port publishing and mapping | Docker Docs
012
Runesoft @river.blog.runesoft.net.ap.brid.gy · 12/03/2026
Hoy veremos cinco formas prácticas para mejorar nuestra conectividad en casa, tanto velocidades, como latencias y privacidad.
blog.runesoft.net
Cómo mejorar tu conectividad en casa
Cada lugar es un mundo. Hay hogares en los que podemos pasar cable sin problemas y otros en los que no. Habitaciones en las que nos llega el WiFi y otras que parecen un búnker aislado totalmente. Además de los problemas de cobertura de nuestro WiFi, también se nos plantean otros como: * **La latencia:** A veces los dispositivos que tenemos para nuestra red no son tan óptimos haciendo su trabajo, haciendo que, aunque tengamos altas velocidades, tarden mucho en respondernos. * **La privacidad** : Desde luego, dependiendo de nuestros dispositivos, principalmente del router, podremos tener más opciones de privacidad. * **Posibilidades de configuración** : Y finalmente, las limitaciones que se puede sufrir a la hora de configurar y adaptar la red a nuestras necesidades. Así que os voy a dar cinco opciones que os pueden ayudar mucho en este aspecto. # Cambiar el router del proveedor Sustituir (o aislar) el router que te instala la operadora es, en muchos casos, el primer paso que recomendaría. ¿Por qué? ## Ventajas * **Más control** : firmware más completo, reglas de firewall finas, VLANs, QoS y monitorización. * **Mejores opciones de seguridad** : actualizaciones, cortafuegos avanzados, políticas de enrutamiento, filtrados de aplicaciones y otras más. * **Funcionalidades extra** : clientes/servidores VPN, servidores DHCP avanzados, segmentación de la red para IoT, etc. * **Rendimiento y cobertura** : dependiendo del equipo que montes, puedes obtener mejor radio Wi‑Fi, más antenas o más potencia de CPU para NAT. * **Mayor privacidad** : Todas las opciones anteriores usualmente no son posibles en el router que proporciona la operadora, por lo que son conscientes de todo nuestro tráfico. Con los puntos anteriores podríamos evitar esto. ## Inconvenientes * Antes de hacer el cambio, hay que asegurarse de configurar bien el router de la operadora en modo _bridge_ , o hacer las configuraciones necesarias. * Aunque ambién está la opción de retirarlo por completo haciendo uso de una ONT propia, para esto algunas operadoras son reacias. Recuerda que en España estás en todo tu derecho de tener control sobre tu router. * Conocimientos más avanzados para su correcta configuración. ## Recomendaciones Como para todo, hay muchísimas marcas y modelos. Están incluso marcas gaming como Asus, como marcas tradicionales de redes como Linksys, o algunas más modernas y que ya hemos visto por aquí como Ubiquiti con su gama Unifi. Y la opción para los que les gusta trastear aún más: Un router custom con PFSense. En mi caso, siempre he trabajado con Unifi para el aspecto de red, os dejo el dispositivo que tengo actualmente en mi _homelab_ : #### ****Dream Machine Pro**** Switch empresarial con sistema de NVR (cámaras), controles de acceso, VoIP y otros. Hasta 10Gbps y 3.5Gbps con IPS. Ver más Como otras recomendaciones dentro de la misma marca, os dejo la siguiente lista. Algunos no tienen WiFi integrado y habría que complementarlos con puntos de acceso, en tal caso estos routers actuarían como **controlador**. Modelo y link | Precio | Velocidad máxima | Velocidad con IPS | WiFi | Otras características ---|---|---|---|---|--- Dream Machine Pro Max | 652,19 € | 10 Gb/s | 5 Gb/s | -- | Sistema empresarial. Sistema NVR. Dos discos. Dream Machine Special Edition | 543,29 € | 10 Gb/s | 3.5 Gb/s | -- | Sistema empresarial. Sistema NVR. Un disco. Puertos PoE. Dream Machine Pro | 411,40 € | 10 Gb/s | 3.5 Gb/s | -- | Sistema empresarial. Sistema NVR. Un disco. Cloud Gateway Fiber | 302,50 € | 10 Gb/s | 5 Gb/s | -- | Altas velocidades. Sistema NVR. Disco NVMe. Puertos PoE. Dream Router 7 | 302,50 € | 10 Gb/s | 2.3 Gb/s | WiFi 7 | Todo en uno potente. Sistema NVR. WiFi 7 integrado. Puertos PoE. UniFi Express 7 | 216,59 € | 10 Gb/s | 2.3 Gb/s | WiFi 7 | Sencillo. Ideal para hogares. Cloud Gateway Max NS | 216,59 € | 2.5 Gb/s | 2.3 Gb/s | -- | Todo en uno sencillo. Sistema NVR. Disco NVMe. Cloud Gateway Ultra | 108,90 € | 2.5 Gb/s | 1 Gb/s | -- | Buen precio ideal para redes simples. # Instalar un sistema Wi‑Fi en malla (Mesh) El Wi‑Fi mesh es la opción ideal cuando no puedes pasar cable y necesitas cubrir una casa con varios puntos de acceso que se coordinan entre sí. ## Ventajas: * Instalación sencilla y cobertura extendida. * Roaming más transparente para dispositivos móviles. * Muchos sistemas tienen gestión centralizada y apps que simplifican su instalación inicial. ## Inconvenientes: * Si la comunicación entre los dispositivos de acceso es totalmente inalámbrica, puede significar una mayor latencia y una posible pérdida de velocidad. * Menos control avanzado que los puntos de acceso empresariales gestionados por controlador. Algunos permiten ser conectados entre sí por cable. Si tienes esa opción, mejorará bastante el roaming, velocidades y latencias. 💡 El "roaming" es el cambio de un dispositivo de un punto de acceso a otro: el salto que da nuestro móvil al pasar del dormitorio al salón. No todos los sistemas gestionan este proceso igual, así que, para roaming mas fluido a nivel profesional se suele utilizar un controlador. ## Recomendaciones En este ámbito hay multitud de marcas reconocidas: TP-Link, Linsys, Asus, Xiaomi... E incluso las operadoras empiezan a ofrecer los suyos propios. Desde mi experiencia, como en muchas ocasiones, mi recomendación personal es Unifi. Os dejo un listado de opciones con su estándar WiFi, precio, cobertura y demás características de interés: Modelo y link | Precio | Estándar | Cobertura | Objetivo ---|---|---|---|--- Access Point U7 Mesh | 214,80 € | WiFi 7 | 140 m² | Modelo de alta gama ideal para múltiples dispositivos y alta velocidad con WiFi 7. Access Point U6 Mesh | 192,00 € | WiFi 6 | 140 m² | Modelo de alta gama ideal para múltiples dispositivos. Access Point U6 Extender | 162,00 € | WiFi 6 | 115 m² | Dispositivo sencillo para ampliar nuestra cobertura WiFi. # Powerline (PLC) Los adaptadores PLC usan la red eléctrica de la casa para transmitir datos, y son una buena alternativa cuando no puedes tirar cable y tampoco utilizar malla WiFi. ## Ventajas: * Muy fácil de instalar: enchufar en ambos puntos, emparejarlos ¡y listo! * Útil para conectar TV, consolas o APs donde el Wi‑Fi llega mal y no tenemos cableado ethernet. ## Inconvenientes: * Rendimiento muy dependiente del estado y la configuración de la instalación eléctrica. * Susceptible a interferencias de electrodomésticos (horno, microondas...) * No lo enchufes enchufes en regletas o similares, ya que puede generar aún más pérdidas. * Latencia variable; no siempre ideal para juegos competitivos. ⚠️ A nivel de seguridad, la mayoría de PLC modernos incorporan cifrado entre los adaptadores, pero no es recomendable usarse si compartes el circuito o la instalación eléctrica con vecinos u otros. ## Recomendaciones Como con anterioridad, os dejo mi recomendación personal que he podido utilizar, pero como siempre, investigad bien qué otros dispositivos hay para encontrar el que más se acople a vuestras necesidades: #### TP-Link TL-PA7017P PLC de conexión Gigabit y fácil instalación. Ver más # Cableado Ethernet (la opción más estable) Si buscas máxima estabilidad y menor latencia, el cable es la mejor elección. Ideal para servidores, NAS, equipos de teletrabajo o tu PC Gaming o consola. Y por supuesto, la mejor de las opciones para interconectar tus dispositivos en tu _homelab_. ## Ventajas * Menor latencia. * Mayor fiabilidad y menor pérdidas de paquetes. * Mayor ancho de banda. * Permite alimentar dispositivos mediante PoE, como cámaras de seguridad, puntos de acceso, o incluso servidores pequeños como la Raspberry Pi. ## Inconvenientes * Requiere mayor planificación previa. * La instalación en sí del dableado es más tediosa y compleja. * No es sencillo revertirla o no es posible de aplicar en todos los lugares. ## Recomendaciones Los cables ethernet tienen una categorización. En función de esta aceptan unas velocidades y distancias. Esto se debe a las diferentes calidades en su fabricación y aislamiento. Al final se componen de ocho pequeños cables en su interior. Os resumo dichas categorías, para que sepáis cuál os viene mejor: Categoría | Abreviatura | Velocidad | Distancia | Otras características ---|---|---|---|--- Categoría 5e | Cat5e | `1Gb/s` | 100m | Habitual en hogares. Categoría 6 | Cat6 | `10Gb/s` | 55m | Ideal para altas velocidades en casa. Categoría 6a | Cat6a | `10Gb/s` | 100m | Mejora la distancia respecto a Cat6. Categoría 7 | Cat7 | `10Gb/s` | 100m | Mejor aislamiento ante interferencias. Categoría 8 | Cat8 | `25-40 Gb/s` | 30m | Ideal para conexiones rápidas entre servidores. # Puntos de acceso profesionales (APs) Colocar puntos de acceso dedicados y alimentarlos por cable transforma la experiencia WiFi respecto a depender sólo del router. Esto lo hace ideal para casi cualquier situación en la que necesites ampliar la cobertura y tengas cableado disponible. ## Ventajas * Mejores radios, antenas y rendimiento, sobre todo con muchos dispositivos.. * Configuración avanzada: VLANs, SSID múltiples, control de potencia, canales, band-steering. * Escalabilidad: varios APs gestionados centralmente funcionan mucho mejor que los repetidores. ## Inconvenientes * Suele ser necesario tener un dispositivo controlador, que se encargue de gestionar bien el roaming y otras opciones necesarias. * Dependes de tener cableado Ethernet, como el del punto anterior. ## Recomendaciones Hay multitud de marcas y modelos, pero os dejo los que tengo a mi disposición y he podido probar. Como lo que muestro en el vídeo y muchos ya sabréis, son de Unifi, la marca de dispositivos de red de Ubiquiti: #### U7 Pro XG Modelo de alta gama con WiFi 7 pensado para empresas con muchos dispositivos conectados. Ver más Aquí tenéis otras opciones de la misma marca, con su estándar WiFi, precio, cobertura y demás características de interés: Modelo y link | Precio | Estándar | Cobertura | Conector | Objetivo ---|---|---|---|---|--- Access Point U7 Pro XG | 216,59 € | WiFi 7 | 140 m² | 10 GbE PoE+ | Modelo de alta gama pensado para empresas con muchos dispositivos conectados. Access Point U7 Pro | 193,60 € | WiFi 7 | 140 m² | 2.5 GbE PoE+ | Modelo de alta gama pensado para empresas con muchos dispositivos conectados. Access Point U7 Lite | 107,69 € | WiFi 7 | 115 m² | 2.5 GbE PoE | Modelo ideal para hogares donde se quiera una alta velocidad y WiFi 7. Access Point U6 Pro | 175,45 € | WiFi 6 | 140 m² | 1 GbE PoE | Modelo de alta gama pensado para empresas con muchos dispositivos conectados. Access Point U6 Plus | 107,69 € | WiFi 6 | 140 m² | 1 GbE PoE | Modelo ideal para hogares donde se quiera una gran cobertura. # Cómo elegir entre estas opciones Muchas de ellas son compatibles entre sí, pero por resumir las opciones en función del caso: * Máxima estabilidad y rendimiento: Cable Ethernet + APs profesionales. * Comodidad sin obra ni cableado: Sistema WiFi mesh. * Sin posibilidad de cableado ni WiFi: PLC puede ser una solución práctica, aunque con limitaciones. * Control y privacidad desde el inicio: sustituir o poner en bridge el router del ISP y usar tu propio equipo. # Resumen rápido * Cambiar el router del proveedor: Suele ser el primer paso recomendado por control y privacidad. * Mesh: Comodidad y cobertura; mejor si los interconectas por cable. * PLC: Rápida solución si no puedes cablear, pero cuidado con las regletas. * Cableado: La opción más estable y con menor latencia. * APs profesionales + controlador: Mejor roaming y gestión en instalaciones con varios puntos. # Otras recomendaciones y aportaciones La intención de este post es que sirva de guía para todos los que lo necesiten. Sentíos libres de aportar mediante los comentarios, otros dispositivos y marcas que os hayan servido, o incluso otros métodos que no se hayan contemplado, para ir complementando y ampliando este post con vuestros aportes. No reparéis en hacerlo. ¡Muchas gracias!
011
Runesoft @river.blog.runesoft.net.ap.brid.gy · 09/03/2026
Docker es una de las herramientas más extendidas hoy día. Conoce qué es y de dónde viene, y más adelante nos adentraremos en su parte más técnica.
blog.runesoft.net
Docker 101 - Introducción a Docker
En este post cubriremos una de las primeras cuestiones más relevantes: ¿Qué es Docker? Aunque de forma más teórica, considero importante conocer bien el espacio que ocupa Docker, y de dónde viene. En posteriores publicaciones iremos profundizando en los aspectos más técnicos, como los siguientes: 1. Lanzar nuestro primer contenedor. 2. Crear y comprender el funcionamiento de los volúmenes. 3. Generar nuestras imágenes, entender las _layers_ y optimizaciones. 4. Comprender el funcionamiento de los repositorios de imágenes. 5. Crear nuestra aplicación compuesta con Docker Compose. 6. Configurar un clúster de Docker usando Swarm. > Así que este será el primero de un total de ocho publicaciones, con los que, al finalizar, habremos comprendido las bases de Docker, y nos permitirá sacarle el mejor provecho. Pero ahora, ¡vamos a lo importante de este post! # ¿Qué es Docker? Docker es un sistema que nos va a permitir desplegar nuestras aplicaciones de forma más cómoda y sencilla, consumiendo menos recursos que anteriores métodos como el uso de máquinas virtuales. Otra gran ventaja de Docker, es que no entiende de sistemas operativos, por lo que, si tenemos un sistema de contenedores funcionando en nuestro servidor, no nos importará que tipo de Linux esté utilizando, o si es incluso un Windows. # Máquinas Virtuales VS Contenedores Las máquinas virtuales han estado presentes mucho tiempo, permitiendo generar entornos _sandbox_ en los que podíamos tener nuestras aplicaciones aisladas e independientes del sistema operativo anfitrión. De esta manera se simplificaba la generación de copias de seguridad y la restauración en ciertos puntos o estados de las aplicaciones. Adicionalmente aportaban una capa más de seguridad. Pero con la llegada de la _contenerización_ esto se nos ha simplificado, ya que atomiza más si cabe la forma en la que se despliegan las aplicaciones. ## Máquinas Virtuales Las máquinas virtuales hasta ahora, requieren funcionar sobre un sistema de virtualización, como VirtualBox; y sobre esto instalar un sistema operativo nuevamente, conocido como Sistema Operativo Virtual, el cual podía ser el que deseásemos. Por lo que las diferentes capas involucradas se pueden visualizar de la siguiente manera: * Los recursos hardware son gestionados por el sistema operativo anfitrión. * Este le permite el acceso en función de lo que necesite a la aplicación de virtualización. * La aplicación de virtualización gestiona los sistemas operativos virtualizados. * Y a su vez estos tienen sobre ellos las aplicaciones finales. ## Hipervisores Posteriormente surgieron sistemas operativos dedicados a la virtualización, conocidos como _hipervisores_ (como el caso de Proxmox). De esta forma se simplifica el esquema, quitando una de las capas, quedando así. Ahora las anteriores capas de **Sistema Operativo** y **Aplicación de Virtualización** se reúnen en una sola: **Sistema Operativo Hipervisor**. ## Contenedores El sistema de contenedores permite abstraer aún más, de forma que delega ciertos recursos que terminarían siendo redundantes al sistema operativo anfitrión. De esta manera, la red, por ejemplo, en el caso de Docker, es compartida con el sistema operativo en el que se encuentra. El esquema quedaría de esta manera: Ahora nos hemos quitado de golpe el sistema operativo virtual, de forma que es la aplicación contra el proceso de _contenerización_ , y posteriormente este el que solicita los recursos hardware necesarios al sistema operativo anfitrión. ¡Se nos quedan muchas menos capas que con las máquinas virtuales inicialmente! # ¿Qué uso se le da hoy día? Si te dedicas al mundo de la informática, y, sobre todo, en los ámbitos de sistemas y programación, verás contenedores por todos lados, ya sea con Docker, como Kubernetes; hasta en proveedores en _Cloud_ como Amazon ECS u Openshift. El principal punto de estos contenedores, es la facilidad de despliegue de nuevas aplicaciones, y su comodidad de gestión. La mayoría de empresas optan por empaquetar sus productos en contenedores para que puedan ser desplegados donde vean más convenientes, ya que, como hemos mencionado, no dependen de un sistema operativo. Además, estos sistemas de contenedores tienen una muy fácil integración con aplicaciones de Integración contínua, que simplifica aún más los despliegues. En el ámbito laboral, en lo que más uso le he dado, ha sido a la hora de poder tener mis entornos locales de prueba, como bases de datos, o incluso poder desplegar mis aplicaciones para probarlas antes de subirlas. Por otro lado, en el aspecto personal, en el _homelab_ , el uso es para poder desplegar y gestionar cómodamente los servicios que quiero tener funcionando, como los que vemos aquí en el blog, o en los diferentes vídeos del canal. # ¿Quién está detrás del proyecto? Ahora, un poco de historia. Los contenedores llevan tiempo existiendo, y han habido diferentes intentos de estandarizarlos, pero quién logró llevar esto a su punto más conocido actualmente fue **Docker**. De ahí que hoy día casi todo el mundo se refiera a los contenedores como Docker, pero **no son lo mismo**. De hecho, actualmente el proyecto en sí de contenedores, conocido como Container.d, es gestionado por la Fundación Linux. Como se puede apreciar en este artículo, en en año 2017 fue cuando se traspasó el proyecto a la Fundación Linux. Gracias a esto, el estándar de contenedores está protegido y es de código abierto. Eso si, no lo son las adaptaciones e interfaces que muchos conocemos, como puede ser **Docker Desktop**. # ¿Y si quiero certificarme? Hay multitud de certificaciones hoy día, y cuesta saber cuáles son realmente reconocidas. Pero en este caso no tenemos ninguna duda, ya que los contenedores son un estándar en la mayoría de trabajos en nuestro campo, por lo que una certificación podría aportarte. A día de hoy, recomiendo que una vez finalices con Docker, te metas en el mundo de _Kubernetes_ , y entonces te prepares para la certificación del KCNA. ⚠️ Aunque sigas todos los post que vaya publicando, te aconsejo que hagas un curso más reconocido y enfocado en ayudarte a formarte para los exámenes, como el que menciono a continuación. * Curso recomendado (inglés): https://www.udemy.com/course/dive-into-cloud-native-containers-kubernetes-and-the-kcna * Certificación KCNA: https://training.linuxfoundation.org/certification/kubernetes-cloud-native-associate/ # Referencias Listado de fuentes de información a la hora de realizar este post: * Mi propia experiencia personal y profesional en el sector. * Formación obtenida del curso: https://www.udemy.com/course/docker-mastery * Formación obtenida del curso: https://www.udemy.com/course/dive-into-cloud-native-containers-kubernetes-and-the-kcna * Web de la Fundación Linux. * Referencia del proyecto de Container.d]([containerd – An industry-standard container runtime with an emphasis on simplicity, robustness and portability)
021
Runesoft @river.blog.runesoft.net.ap.brid.gy · 11/02/2026
Homepage es un dashboard que nos permitirá tener organizados los servicios de nuestro homelab.
blog.runesoft.net
Instalando Homepage Dashboard
Teniendo ya varios servicios en nuestro _Homelab_ , empieza a ser complicado memorizarlos todos, incluso aunque les demos nombre de dominio con herramientas como Pi Hole. Ha llegado el momento de que configuremos un servicio que nos permita tener una interfaz en la que gestionar y agrupar todas nuestras aplicaciones, esto se conoce como Dashboard, y para este cometido vamos a usar Homepage. # Requisitos Para proceder con esta guía necesitarás: * Un servidor donde instalar Homepage. * Docker funcionando en dicho servidor. Si no lo tienes, puedes seguir esta guía. * Acceso por terminal o SFTP al servidor de Docker. # Instalación Se trata de una aplicación de software abierto y gratuita, que podemos instalar de manera sencilla usando Docker. Os voy a dejar tanto la opción de desplegarlo mediante comandos; como haciendo uso de Docker compose para los que lo tengamos habilitado o usemos Portainer. ⚠️ Si estás buscando la vía rápida, ve directamente a la instalación mediante Docker compose. ## Usando comandos Lo primero que suelo hacer, es configurar los volúmenes. En el caso de esta aplicación es algo esencial, ya que será muy conveniente que posteriormente podamos acceder a él. Para estos comandos vamos a dar por hecho que nuestro usuario es **`user`**. ℹ️ Recuerda modificar los comandos para que se adapten a tu entorno y necesidades, ya que son comandos de ejemplo. ### Volumen de configuración Como va a ser un `bind volume`, es decir, un volumen vinculado, deberemos asegurarnos de que la ruta que queremos vincular existe. En mi caso quiero usar `/home/user/homepage/config`, así que la creamos ejecutando: mkdir /home/user/homepage/config Una vez creada la ruta, deberemos crear el volumen en si. Lanzamos el comando: docker volume create --driver local \ --opt type=none \ --opt device=/home/user/homepage/config \ --opt o=bind \ homepage-config Esto nos debería generar un nuevo volumen vinculado a la ruta que hemos creado anteriormente. Podemos comprobar que el volumen existe ejecutando: docker volume inspect homepage-config ### Volumen de multimedia Ahora deberemos repetir esto mismo para otro volumen, en el que podremos subir nuestros iconos y multimedia si fuese necesario, por lo que creamos primero su carpeta: mkdir /home/user/homepage/media Ahora su volumen: docker volume create --driver local \ --opt type=none \ --opt device=/home/user/homepage/media \ --opt o=bind \ homepage-media Y por último comprobamos su correcta creación: docker volume inspect homepage-media ### Lanzado del contenedor Ya sólo queda la parte final, lanzar nuestro contenedor, para esto haremos uso de `docker run`, agregando las especificaciones necesarias. Como siempre, recuerda adaptarlo a tus necesidades: docker run -d \ --name homepage \ --restart unless-stopped \ -p 3000:3000 \ -v homepage-config:/app/config \ -v homepage-media:/app/public/images \ -v /var/run/docker.sock:/var/run/docker.sock:ro \ -e HOMEPAGE_ALLOWED_HOSTS="*" \ ghcr.io/gethomepage/homepage:latest ## Mediante Docker Compose Este proceso es más rápido, ideal para entornos con Portainer o similares. Lo primero será crear las rutas necesarias. Se está dando por hecho que el usuario es `user`, recuerda modificarlo a tus necesidades: mkdir -p /home/user/homepage/{config,media} A continuación os dejo el fichero `docker-compose.yaml` para este servicio. ¡Adaptadlo a vuestros requerimientos y entorno! services: homepage: image: ghcr.io/gethomepage/homepage:latest restart: unless-stopped container_name: homepage ports: - 3000:3000 volumes: - homepage-config:/app/config - homepage-media:/app/public/images - /var/run/docker.sock:/var/run/docker.sock:ro environment: HOMEPAGE_ALLOWED_HOSTS: "*" volumes: homepage-config: driver: local driver_opts: type: none device: /home/user/homepage/config o: bind homepage-media: driver: local driver_opts: type: none device: /home/user/homepage/media o: bind # Configuración de Homepage Tras haber instalado Homepage eligiendo el camino que nos haya interesado, podremos acceder a su interfaz, en un navegador accedemos a la IP de nuestro servidor, junto con el puerto por defecto de Homepage, el `3000`, algo como http://127.0.0.1:3000/. Nos aparecerá esto: Ahora viene lo interesante, configurar a nuestro gusto la interfaz de Homepage. Para esto, deberemos acceder mediante SFTP o SSH a nuestro servidor Docker, e ir a la unidad de `homepage-config`que hemos bindeado, ya que ahí encontraremos, entre otros, los siguientes ficheros de configuración: Fichero | Cometido ---|--- `services.yaml` | Fichero principal, donde se definirán los servicios que queremos mostrar, y cómo organizarlos y agruparlos. `bookmarks.yaml` | Fichero donde podremos configurar qué otras webs queremos tener. Aparecerán como pie de página en el dashboard. `settings.yaml` | Configuraciones adicionales necesarias. `widgets.yaml` | Aquí podremos configurar algunos widgets del propio Homepage, como el que nos muestra el espacio en disco y el uso de recursos de donde se está alojando Homepage. Cada uno de estos tiene su propia estructura, así que iremos yendo uno a uno: ## Configuración de services.yaml Como se ha mencionado anteriormente, se trata del fichero que más vamos a manipular, ya que, cada vez que tengamos un nuevo servicio en nuestro homelab, será aquí donde lo demos luego de alta para visualizarlo en nuestro dashboard. ℹ️ Para una información más detallada, accede a la documentación oficial de servicios de Homepage. Tiene la siguiente estructura, dejando como ejemplo una entrada para Proxmox y otra para Portainer: - Grupo 1: - Proxmox: href: https://proxmox.homelab.local:8006 icon: proxmox.png description: Servidor de virtualización Proxmox siteMonitor: https://proxmox.homelab.local widget: #Es opcional, hay servicios que no lo tienen. type: proxmox #Cambiará dependiendo de tu servicio. url: https://proxmox.homelab.local:8006 username: #Usuario de api, algo como: userapi@pam!homepage password: #Contraseña de la API, es un UUID8. node: #Nombre de tu nodo. - Grupo 2: - Portainer: href: https://portainer.homelab.local:9443/ icon: portainer.png description: Servidor de contenedores Docker con Portainer siteMonitor: https://portainer.homelab.local:9443 widget: type: portainer url: https://portainer.homelab.local:9443 env: #El ID del entorno a monitorizar. key: #Key generada para la AIP. ⚠️ El cómo configurar los widgets lo tienes en su documentación oficial, tan solo tendrás que buscar el que te interesa, y te indican los pasos para ello. Podríamos tener varios servicios en cada grupo, y por supuesto los grupos que deseemos. ## Configuración de settings.yaml Aquí definiremos configuraciones más generales, como el nombre que aparece en la pestaña, el icono o el fondo de nuestro dashboard. También podremos especificar el layout. ℹ️ Para una información más detallada, accede a la documentación oficial de configuraciones de Homepage. Adjunto un ejemplo: title: Homelab Dashboard headerStyle: boxedWidgets theme: dark color: blue cardBlur: sm layout: Servers: style: row columns: 3 icon: mdi-server-#FFFFFF Unifi: icon: unifi.png Networking: icon: mdi-network-#FFFFFF Security: icon: mdi-shield-lock-#FFFFFF Management: icon: mdi-auto-fix-#FFFFFF Monitoring: icon: mdi-list-status-#FFFFFF Automation: icon: mdi-cog-play-#FFFFFF Services: style: row columns: 3 icon: mdi-home-#FFFFFF Other: header: false style: row columns: 1 ## Configuración de bookmarks.yaml Pensado para tener un acceso rápido a diferentes webs o páginas que queramos tener siempre accesibles. ℹ️ Para una información más detallada, accede a la documentación oficial de configuraciones de Homepage. En mi caso, lo he utilizado para guardarme las URLs de mi blog y mi GitHub, aunque planeo ampliarlo poco a poco a medida que vaya necesitando. Aquí tenéis el ejemplo: --- - Webpages: - Runesoft Blog: - icon: si-ghost-#FFFFFF href: https://blog.runesoft.net - GitHub: - icon: si-github-#FFFFFF href: https://github.com/RubenMorPov Al igual que el fichero de `services.yaml`, se pueden agrupar los vínculos como prefiramos. ## Configuración de widgets.yaml En este último fichero, podremos configurar el comportamiento de los widgets que vienen de forma general por defecto con Homepage, como puede ser el calendario, el tiempo, o la información de los dispositivos del host en el que lo alojamos. ℹ️ Para una información más detallada, accede a la documentación oficial de widgets de Homepage. En mi caso, lo he dejado como está: # For configuration options and examples, please see: # https://gethomepage.dev/configs/info-widgets/ - resources: cpu: true memory: true disk: / - search: provider: duckduckgo target: _blank ## Resultado Final Tras ciertas configuraciones y customizaciones, podremos terminar teniendo un dashboard bastante cómodo, con todo lo que necesitemos a nuestro alcance y bien organizado, como este ejemplo que os dejo aquí: # Conclusión Con esta guía hemos aprendido en qué consiste un dashboard para nuestro Homelab, y configurado uno con Homepage, para tener todo más organizado. También se han cubierto los diferentes archivos de configuración para dejarlo lo más a nuestro gusto posible. # Referencias * Documentación oficial: Home - Homepage * Vídeo del que obtuve la idea, de **Christian Lempa** : https://www.youtube.com/watch?v=j9kbQucNwlc&pp=ygUSaG9tZXBhaGUgZGFzaGJvYXJk
000
Runesoft @river.blog.runesoft.net.ap.brid.gy · 02/02/2026
Visualicemos el estado de nuestro SAI con NUT y la interfaz web de PeaNUT.
blog.runesoft.net
SAI en línea con NUT
<p>A la hora de tener un SAI, todos estamos de acuerdo que su principal función es proteger nuestros sistemas ante caídas o picos de tensión.</p><p>Pero un paso importante es saber la información de nuestro SAI, de forma que podamos conocer el consumo en tiempo real, la capacidad restante de batería y el tiempo que tenemos en caso de irse la corriente.</p><p>Para ello instalaremos <a href="https://networkupstools.org/">NUT</a></p><h1 id="requisitos">Requisitos</h1><p>Estos son los requisitos para poder continuar con esta guía:</p><ul><li>Un servidor que actuará como monitor NUT. En mi caso una Raspberry Pi 5.</li><li>Tener Linux instalado en el servidor. Prácticamente cualquier distro servirá.</li><li>Un servidor con Docker (opcionalmente con Portainer). Si tienes dudas puedes seguir <a href="https://blog.runesoft.net/install-docker-and-portainer-ce/">esta guía</a>.</li><li>Un SAI/UPS compatible con NUT, puedes comprobarlo <a href="https://networkupstools.org/stable-hcl.html.">en esta lista</a>.</li></ul><h1 id="preparando-el-servidor">Preparando el servidor</h1><p>Lo primero que tenemos que saber, es qué tipo de driver va a utilizar nuestro SAI, y qué conexión va a tener. La mayoría de SAI de precio razonable para <em>homelabs</em> y hogares, van a ir conectados mediante USB, así que con conectarlos a nuestro servidor sería suficiente.</p><h1 id="instalando-nut">Instalando NUT</h1><p>Es el paso más sencillo, puesto que en la mayoría de distribuciones Linux es un paquete. En mi caso uso Raspbian (Debian), así que lo primero, al tratarse de una nueva instalación, he actualizado el repositorio:</p><pre><code class="language-bash">sudo apt update sudo apt upgrade </code></pre><p>Y posteriormente he instalado el paquete de NUT:</p><pre><code class="language-bash">sudo apt install nut nut-client nut-server </code></pre><p>Comprobamos que se ha instalado correctamente usando este comando:</p><pre><code class="language-bash">sudo nut-scanner -U </code></pre><p>Debería darnos una información similar a esta:</p><figure class="kg-card kg-image-card"><img src="https://blog.runesoft.net/content/images/2026/01/NUT---nut-scanner.png" class="kg-image" alt="" loading="lazy" width="1271" height="495" srcset="https://blog.runesoft.net/content/images/size/w600/2026/01/NUT---nut-scanner.png 600w, https://blog.runesoft.net/content/images/size/w1000/2026/01/NUT---nut-scanner.png 1000w, https://blog.runesoft.net/content/images/2026/01/NUT---nut-scanner.png 1271w" /></figure><p>Con esto deberíamos estar más que servidos, ya solo tendremos que empezar con la configuración.</p><h1 id="configurando-nut">Configurando NUT</h1><p>Para configurarlo, necesitaremos modificar una serie de ficheros, así que iremos cubriendo cada uno de ellos, y explicando para qué sirven las modificaciones que hacemos.</p><div class="kg-card kg-callout-card kg-callout-card-yellow"><div class="kg-callout-emoji">⚠️</div><div class="kg-callout-text">Verás que los ficheros que pongo <b><strong style="white-space:pre-wrap">de ejemplo</strong></b> son nuevos, siempre haré una copia de seguridad de los ficheros de configuración originales.</div></div><h2 id="dando-de-alta-nuestro-ups">Dando de alta nuestro UPS</h2><p>Para ello, deberemos editar el fichero <code>ups.conf</code>, así que ejecutamos este comando:</p><pre><code class="language-bash">sudo mv /etc/nut/ups.conf /etc/nut/ups.conf.bk sudo nano /etc/nut/ups.conf </code></pre><p>Aquí deberemos dar de alta los datos de nuestro SAI, siguiendo el ejemplo que adjunto. En mi caso se trata de un SAI de Cyberpower.</p><div class="kg-card kg-callout-card kg-callout-card-blue"><div class="kg-callout-emoji">💡</div><div class="kg-callout-text">Los datos que necesitáis son los que el comando <code style="white-space:pre-wrap">sudo nut-scanner -U</code> nos ha aportado</div></div><p>Podéis modificar lo que está entre corchetes ("[SAI]") por el nombre que le queráis dar a vuestro UPS dentro del sistema de NUT. Adaptad el resto con vuestra información.</p><pre><code class="language-conf">pollinterval = 1 maxretry = 3 [sai] driver = usbhid-ups port = auto desc = "Cyberpower 1200VA" vendorid = 0764 productid = 0601 serial = ABCDEFHI123456 </code></pre><p>Ahora, guardamos pulsando <code>CTRL + O</code>, le damos a <code>ENTER</code> y cerramos con <code>CTRL + X</code>.</p><h2 id="creando-el-monitor-de-ups">Creando el monitor de UPS</h2><p>Será el encargado de monitorizar nuestro UPS como tal, ejecutamos:</p><pre><code class="language-bash">sudo mv /etc/nut/upsmon.conf /etc/nut/upsmon.conf.bk sudo nano /etc/nut/upsmon.conf </code></pre><p>Aquí deberemos poner una línea por cada UPS que monitoricemos, en mi caso solo es uno. Además, definiremos el usuario y contraseña para conectarse posteriormente, recuerda adaptarlo a tus necesidades:</p><pre><code class="language-conf">MONITOR sai@localhost 1 admin secret master </code></pre><p>Igual que antes, guardamos y cerramos. Ahora configuraremos el usuario para el monitor, por lo que introducimos el siguiente comando:</p><pre><code class="language-bash">sudo mv /etc/nut/upsd.users /etc/nut/upsd.users.bk sudo nano /etc/nut/upsd.users </code></pre><p>Y damos de alta lo siguiente, al igual que en el archivo anterior, modificando el usuario o contraseña si lo vemos conveniente, pero siempre que sean los mismos datos:</p><pre><code class="language-conf">[monuser] password = secret admin master </code></pre><p>Como antes, guardamos y cerramos.</p><h2 id="activando-el-modo-servidor">Activando el modo servidor</h2><p>Con los pasos anteriores, estamos listos para hacer que NUT sea accesible como un servidor, de forma que podamos conectar otras aplicaciones como PeaNUT (lo veremos en siguientes pasos en esta guía) para obtener la información.</p><p>Lo primero aquí es establecer desde qué red o IP vamos a permitir conectarse, para ello ejecutamos:</p><pre><code class="language-bash">sudo mv /etc/nut/upsd.conf /etc/nut/upsd.conf.bk sudo nano /etc/nut/upsd.conf </code></pre><p>Y en el fichero veremos que hay una línea que está apuntando a la IP <code>127.0.0.1</code>. Si vamos a instalar PeaNUT en este mismo servidor, no es necesario, pero si queremos permitir conexiones desde cualquier IP, siempre podemos indicar:</p><pre><code class="language-conf">LISTEN 0.0.0.0 3493 </code></pre><div class="kg-card kg-callout-card kg-callout-card-blue"><div class="kg-callout-emoji">💡</div><div class="kg-callout-text"><code style="white-space:pre-wrap">3493</code> es el puerto por defecto que usa NUT, pero puedes modificarlo si lo deseas.</div></div><p>Como ya sabemos toca guardar el fichero con <code>CTRL + O</code>, darle a <code>ENTER</code> y cerrar con <code>CTRL + X</code>. Ahora vamos al otro fichero implicado en este paso, donde activaremos el modo servidor:</p><pre><code class="language-bash">sudo mv /etc/nut/nut.conf /etc/nut/nut.conf.bk sudo nano /etc/nut/nut.conf </code></pre><p>Aquí tan solo tendremos que introducir:</p><pre><code class="language-conf">MODE=netserver </code></pre><p>Y con esto ya lo tendríamos, tan solo hay que guardar y salir como ya sabemos.</p><h2 id="aplicar-los-cambios-y-comprobar">Aplicar los cambios y comprobar</h2><p>Ahora toca aplicar los cambios, tenemos dos opciones, reiniciar los servicios con:</p><pre><code class="language-bash">sudo service nut-server restart sudo service nut-client restart sudo systemctl restart nut-monitor sudo upsdrvctl stop sudo upsdrvctl start </code></pre><p>O reiniciar todo el sistema entero con:</p><pre><code class="language-bahs">sudo reboot now </code></pre><p>En cualquiera de los casos, al reiniciar, podremos listar los USBs que tenemos disponibles:</p><pre><code class="language-bash">lsusb </code></pre><p>Y de ahí sacar el que tiene el nombre de nuestro SAI, para listar su información detallada</p><figure class="kg-card kg-image-card"><img src="https://blog.runesoft.net/content/images/2026/01/NUT---lsusb.png" class="kg-image" alt="" loading="lazy" width="1142" height="198" srcset="https://blog.runesoft.net/content/images/size/w600/2026/01/NUT---lsusb.png 600w, https://blog.runesoft.net/content/images/size/w1000/2026/01/NUT---lsusb.png 1000w, https://blog.runesoft.net/content/images/2026/01/NUT---lsusb.png 1142w" /></figure><p>Recuerda modificar mi ejemplo con los datos del BUS y Dispositivo.</p><pre><code>lsusb -D /dev/bus/usb/003/002 </code></pre><p>Y ahora sí nos dará los detalles de nuestro UPS:</p><figure class="kg-card kg-image-card"><img src="https://blog.runesoft.net/content/images/2026/01/NUT---lusb--d.png" class="kg-image" alt="" loading="lazy" width="975" height="562" srcset="https://blog.runesoft.net/content/images/size/w600/2026/01/NUT---lusb--d.png 600w, https://blog.runesoft.net/content/images/2026/01/NUT---lusb--d.png 975w" /></figure><h1 id="instalar-peanut">Instalar PeaNUT</h1><p>PeaNUT es una interfaz web que nos permite conectarnos a nuestro NUT server, y así poder visualizar de manera cómoda los datos, consumo real y tiempo restante de nuestro SAI.<br />Lo instalaremos usando Docker. Este sería su fichero <code>docker-compose.yaml</code>:</p><pre><code class="language-yaml">services: peanut: image: brandawg93/peanut:latest container_name: PeaNUT restart: unless-stopped volumes: - peanut-config:/config ports: - 9080:8080 environment: - WEB_PORT=8080 volumes: peanut-config: </code></pre><p>Si utilizamos interfaces como <a href="https://www.portainer.io/">Portainer</a>, solo tendremos que darlo de alta como un <em>stack</em>.</p><p>Una vez arranque, accederemos a su web y puerto, que <strong>en este caso he utilizado el <code>9080</code></strong> para evitar conflictos con otras apps. Nos saldrá lo siguiente, indicando que no hay configurado ningún dispositivo:</p><figure class="kg-card kg-image-card"><img src="https://blog.runesoft.net/content/images/2026/01/PeaNUT---Sin-dispositivos.png" class="kg-image" alt="" loading="lazy" width="2000" height="799" srcset="https://blog.runesoft.net/content/images/size/w600/2026/01/PeaNUT---Sin-dispositivos.png 600w, https://blog.runesoft.net/content/images/size/w1000/2026/01/PeaNUT---Sin-dispositivos.png 1000w, https://blog.runesoft.net/content/images/size/w1600/2026/01/PeaNUT---Sin-dispositivos.png 1600w, https://blog.runesoft.net/content/images/2026/01/PeaNUT---Sin-dispositivos.png 2320w" /></figure><p>Le daremos al icono del engranaje. Nos llevará a la ventana de administración.</p><figure class="kg-card kg-image-card"><img src="https://blog.runesoft.net/content/images/2026/01/PeaNUT---Configuraciones.png" class="kg-image" alt="" loading="lazy" width="1433" height="452" srcset="https://blog.runesoft.net/content/images/size/w600/2026/01/PeaNUT---Configuraciones.png 600w, https://blog.runesoft.net/content/images/size/w1000/2026/01/PeaNUT---Configuraciones.png 1000w, https://blog.runesoft.net/content/images/2026/01/PeaNUT---Configuraciones.png 1433w" /></figure><p>Donde dándole al icono del <strong>+</strong> nos aparecerá el formulario para dar de alta un UPS. Recuerda modificar los campos con los valores que hayas ido configurando, como el puerto, el servidor, o el nombre y contraseña del usuario:</p><figure class="kg-card kg-image-card"><img src="https://blog.runesoft.net/content/images/2026/01/PeaNUT---Administrar-Servidores.png" class="kg-image" alt="" loading="lazy" width="1865" height="1067" srcset="https://blog.runesoft.net/content/images/size/w600/2026/01/PeaNUT---Administrar-Servidores.png 600w, https://blog.runesoft.net/content/images/size/w1000/2026/01/PeaNUT---Administrar-Servidores.png 1000w, https://blog.runesoft.net/content/images/size/w1600/2026/01/PeaNUT---Administrar-Servidores.png 1600w, https://blog.runesoft.net/content/images/2026/01/PeaNUT---Administrar-Servidores.png 1865w" /></figure><p>Una vez finalices, sólo hay que darle al botón de <strong>Aplicar</strong> en la esquina inferior derecha. Volveremos a la ventana principal, y tendremos nuestro SAI dado de alta:</p><figure class="kg-card kg-image-card"><img src="https://blog.runesoft.net/content/images/2026/01/PeaNUT---Con-Dispositivos.png" class="kg-image" alt="" loading="lazy" width="2000" height="357" srcset="https://blog.runesoft.net/content/images/size/w600/2026/01/PeaNUT---Con-Dispositivos.png 600w, https://blog.runesoft.net/content/images/size/w1000/2026/01/PeaNUT---Con-Dispositivos.png 1000w, https://blog.runesoft.net/content/images/size/w1600/2026/01/PeaNUT---Con-Dispositivos.png 1600w, https://blog.runesoft.net/content/images/2026/01/PeaNUT---Con-Dispositivos.png 2309w" /></figure><p>Si queremos ver más información, podemos darle al botón de detalles que aparece a la derecha, y nos saldrán una serie de gráficas, donde podremos ver hasta el consumo real de los dispositivos conectados a nuestro SAI, o el tiempo de respuesta:</p><figure class="kg-card kg-image-card"><img src="https://blog.runesoft.net/content/images/2026/01/PeaNUT---Detalles-de-SAI.png" class="kg-image" alt="" loading="lazy" width="1389" height="623" srcset="https://blog.runesoft.net/content/images/size/w600/2026/01/PeaNUT---Detalles-de-SAI.png 600w, https://blog.runesoft.net/content/images/size/w1000/2026/01/PeaNUT---Detalles-de-SAI.png 1000w, https://blog.runesoft.net/content/images/2026/01/PeaNUT---Detalles-de-SAI.png 1389w" /></figure><p>Y con esto tendríamos nuestro UPS bien monitorizado con PeaNUT.</p><h1 id="conclusi%C3%B3n">Conclusión</h1><p>Habiendo seguido esta guía, hemos podido configurar nuestro servidor de monitorización de SAI con NUT, y aplicarle una interfaz web amigable para poder gestionarlo cómodamente con PeaNUT.</p><h1 id="referencias">Referencias</h1><ul><li>Guía en inglés de <strong>TechnoTim</strong>: <a href="https://technotim.com/posts/NUT-server-guide/">https://technotim.com/posts/NUT-server-guide/</a></li><li>Vídeo del que obtuve la idea de <strong>Hardware Heaven</strong>: <a href="https://www.youtube.com/watch?v=dXSbURqdPfI">https://www.youtube.com/watch?v=dXSbURqdPfI</a></li><li>Documentación oficial de <strong>NUT</strong> para contrastar: <a href="https://networkupstools.org/">https://networkupstools.org/</a></li><li>Guía de instalación oficial de <strong>PeaNUT</strong>: <a href="https://github.com/Brandawg93/PeaNUT">https://github.com/Brandawg93/PeaNUT</a></li></ul>
011
Runesoft @river.blog.runesoft.net.ap.brid.gy · 26/01/2026
blog.runesoft.net
Monitoriza tus servidores con Beszel
Beszel es una ligera herramienta que nos permite monitorear nuestros servidores y tener de un vistazo su estado y consumo de recursos.
031