<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Linux &#8211; Mindeka</title>
	<atom:link href="https://mindeka.es/category/sistemas/linux/feed/" rel="self" type="application/rss+xml" />
	<link>https://mindeka.es</link>
	<description>Biblioteca de pensamientos e ideas.</description>
	<lastBuildDate>Sat, 02 Aug 2025 22:40:43 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>

<image>
	<url>https://mindeka.es/wp-content/uploads/2025/06/mindeka-1-150x150.png</url>
	<title>Linux &#8211; Mindeka</title>
	<link>https://mindeka.es</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>¿NAS o DAS?</title>
		<link>https://mindeka.es/2025/08/03/nas-o-das/</link>
					<comments>https://mindeka.es/2025/08/03/nas-o-das/#comments</comments>
		
		<dc:creator><![CDATA[jmdlr]]></dc:creator>
		<pubDate>Sat, 02 Aug 2025 22:27:14 +0000</pubDate>
				<category><![CDATA[DAS]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[NAS]]></category>
		<category><![CDATA[Redes]]></category>
		<category><![CDATA[Selfhosting]]></category>
		<category><![CDATA[Sistemas]]></category>
		<category><![CDATA[Storage]]></category>
		<guid isPermaLink="false">https://mindeka.duckdns.org/?p=216</guid>

					<description><![CDATA[Actualizando mi hardware Hace no más de un mes decidí sustituir mi pequeño NAS de la marca Iomega (ya no sé ni si existe esta marca) que me dieron en mi antigua empresa por los servicios prestados, porque no me pagaron una parte pero me «regalaron» esa pequeña maravilla de entonces. Acepté y hace poco [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading">Actualizando mi hardware</h3>



<p>Hace no más de un mes decidí sustituir mi pequeño NAS de la marca Iomega (ya no sé ni si existe esta marca) que me dieron en mi antigua empresa por los servicios prestados, porque no me pagaron una parte pero me «regalaron» esa pequeña maravilla de entonces. Acepté y hace poco también él aceptó la jubilación <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p>Previo al cambio, como soy realmente «pesado» para comprar algo, estuve decidiendo que adquirir según mis necesidades. Estuve revisando precios en diferentes páginas generalistas y otras empresas de componentes e informática y valorando sobre todo los «extras» de cada uno de ellos, que llevaban por defecto, que adicionales me llamaban más la atención, etc.</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="683" src="https://mindeka.duckdns.org/wp-content/uploads/2025/08/image-1-1024x683.png" alt="" class="wp-image-218" srcset="https://mindeka.es/wp-content/uploads/2025/08/image-1-1024x683.png 1024w, https://mindeka.es/wp-content/uploads/2025/08/image-1-300x200.png 300w, https://mindeka.es/wp-content/uploads/2025/08/image-1-768x512.png 768w, https://mindeka.es/wp-content/uploads/2025/08/image-1-1536x1024.png 1536w, https://mindeka.es/wp-content/uploads/2025/08/image-1.png 1740w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption"><a href="https://unsplash.com/es/@abject">https://unsplash.com/es/@abject</a></figcaption></figure>



<p>Antes de nada, para quién no lo sepa, explicaré la<strong> diferencia</strong> entre los dos dispositivos, que como habréis comprendido es esa letra <strong>N</strong> o <strong>D</strong>.</p>



<p>Básicamente un NAS es un <strong>Network Attached Storage</strong>, que sencillamente es una aparato al que se le añaden unos discos duros, según bahías tenga, y se <strong>conecta a la red interna o red LAN</strong> mediante un cable Ethernet.</p>



<p>Mientras que un DAS es el llamado <strong>Direct Attached Storage</strong> que sin saberlo, lo habréis usado prácticamente todos, porque es un dispositivo donde se le incluye un disco o varios y se conecta al ordenador, portátil o servidor mediante un cable USB.</p>



<p>Sabiendo esto, comentaré un poquillo las ventajas de cada uno de ello según mi opinión:</p>



<h4 class="wp-block-heading">NAS</h4>



<ul class="wp-block-list">
<li>Lleva incluido prácticamente un sistema operativo para la gestión del dispositivo. Puedes levantar un servicio Web en dos clics o instalar contenedores de Docker sin despeinarte. </li>



<li>Es un ordenador con su propio sistema operativo.</li>



<li>Permite acceder a los archivos desde internet (tu propia nube), ya que está conectado a través de un cable Ethernet. Simplemente compartir y después de unos ajustes, tendrás todo accesible desde fuera.</li>



<li>Fácilmente configurable desde un navegador.</li>



<li>Está enfocado desde el usuario sin conocimientos o novel hasta usuarios más avanzados.</li>
</ul>



<p>Como negativo valoré solo valoré su precio. Un NAS suele ser caro y además hay que comprar los discos aparte, hay alguna opción que los incluye, pero marcas más desconocidas. Por lo que su rentabilidad puede ser a la larga dependiendo de varios factores como el uso, etc.</p>



<h4 class="wp-block-heading">DAS</h4>



<ul class="wp-block-list">
<li>Suele ser menos costoso que un NAS por norma general, ya que el costo por Gigabyte se nota.</li>



<li>Ofrece velocidades más rápidas que un NAS, y</li>



<li>Su instalación es muy sencillo, conectar y listo.</li>
</ul>



<p>Como desventaja o parte negativa, que su puesta en marcha para compartir tus aplicaciones ya sea en Docker o no, almacenar tus fotos desde el móvil en el DAS, etc. Requieren de un ordenador, mini-pc, RaspberryPI, etc., para dar estos servicios. A parte de su configuración manual.</p>



<p>Teniendo esto claro, se podría decir que un NAS es para todos los públicos si nos decidimos por almacenar datos y tenerlos disponibles o accesibles desde internet, con nuestras aplicaciones de móvil, etc. Mientras que un DAS, si solo queremos almacenar y usar en casa, perfecto, pero si queremos usarlo para compartir datos, tener nuestras apps auto alojadas en él y servirlas a internet, la cosa se complica y hay que tener ciertos conocimientos. No excesivamente, porque cada vez esto va siendo más usable, pero requiere un aprendizaje inicial más durillo que un NAS.</p>



<h3 class="wp-block-heading">Decisión</h3>



<p>Finalmente revisando precios del dispositivo en sí, más discos duros y teniendo en cuenta mis conocimientos en sistemas, me decidí adquirir un <strong>DAS</strong>. La mejor decisión al contar ya con un Mini-PC como servidor, con sistema operativo Debian 12 y con el que podría administrar el DAS una vez conectado por USB 3.2, para dar una gran velocidad de manera casi inmediata.</p>



<p>La marca que me convenció y compré fue <strong>Terramaster</strong> y el modelo el <strong>D2-320</strong>, con dos bahías y una capacidad total de 44 Tb. Con lo que podré ampliarlo a futuro. Ahora mismo tengo mis dos antiguos discos de 500 Gb cada uno añadidos al DAS, pero en breve me haré con dos de mayor tamaño.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="800" height="600" src="https://mindeka.duckdns.org/wp-content/uploads/2025/08/result_d274fafe-62eb-424a-a838-ce380eac66e5.jpg" alt="" class="wp-image-219" srcset="https://mindeka.es/wp-content/uploads/2025/08/result_d274fafe-62eb-424a-a838-ce380eac66e5.jpg 800w, https://mindeka.es/wp-content/uploads/2025/08/result_d274fafe-62eb-424a-a838-ce380eac66e5-300x225.jpg 300w, https://mindeka.es/wp-content/uploads/2025/08/result_d274fafe-62eb-424a-a838-ce380eac66e5-768x576.jpg 768w" sizes="(max-width: 800px) 100vw, 800px" /><figcaption class="wp-element-caption">¡Magnífica pose! <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></figcaption></figure>



<p>Lo bueno de este modelo, es que trae incluido la opción de configurar RAID desde hardware, simplemente cambiando la posición en la parte trasera. Fue una de mis decisiones más acertadas, ya que aunque se podría gestionar también sencillamente desde Debian con «mdmam», una cosa menos y la fiabilidad de Terramaster en este aspecto, me dio el impulso.</p>



<figure class="wp-block-image aligncenter size-full"><img decoding="async" width="514" height="618" src="https://mindeka.duckdns.org/wp-content/uploads/2025/08/image-2.png" alt="" class="wp-image-220" srcset="https://mindeka.es/wp-content/uploads/2025/08/image-2.png 514w, https://mindeka.es/wp-content/uploads/2025/08/image-2-250x300.png 250w" sizes="(max-width: 514px) 100vw, 514px" /><figcaption class="wp-element-caption"><a href="https://www.terra-master.com/es/d2-320.html">https://www.terra-master.com/es/d2-320.html</a></figcaption></figure>



<p>La configuración actual es un RAID 1 en espejo, para tener la máxima protección a nivel de rotura de un disco, ya que si fuera así, no perdería nada.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="800" height="600" src="https://mindeka.duckdns.org/wp-content/uploads/2025/08/result_54750254-4690-47a6-b3d7-ac191cd0dca8.jpg" alt="" class="wp-image-221" srcset="https://mindeka.es/wp-content/uploads/2025/08/result_54750254-4690-47a6-b3d7-ac191cd0dca8.jpg 800w, https://mindeka.es/wp-content/uploads/2025/08/result_54750254-4690-47a6-b3d7-ac191cd0dca8-300x225.jpg 300w, https://mindeka.es/wp-content/uploads/2025/08/result_54750254-4690-47a6-b3d7-ac191cd0dca8-768x576.jpg 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /><figcaption class="wp-element-caption">¡Mi nuevo DAS funcionando!</figcaption></figure>



<p>Finalmente destacar sus pequeñas luces led en verde, que indican que está el dispositivo encendido y otros dos para indicar que los HDD están conectados y funcionando. Cuando parpadean es que se está escribiendo/leyendo en ellos.</p>



<p>En definitiva, si queréis ahorraros dinero, os gusta trastear y montar vuestras cosillas «selfhosting» desde vuestro mini-pc, RaspberryPI, OrangePI, lo que sea&#8230; no necesitáis un NAS con el SO incorporado, os basta un DAS conectado por USB a vuestro servidor y desde ahí podéis tener todo lo que queráis.</p>



<p>Por ejemplo en mi caso, este blog que estás leyendo está servido directamente desde el DAS conectado por USB a mi servidor Debian, al igual que otras numerosas apps, además de mis backups, storage de fotos, etc. Seguramente muestre en otro post, como está todo montado. </p>



<h3 class="wp-block-heading">Información adicional</h3>



<p>Es importante decir, ya os decantéis por un NAS o un DAS, que ahí es donde almacenaréis todos vuestros datos personales, fotos, películas, documentos, backups, etc. Por ello, como último consejo, el hardware que compréis hacedlo de una marca conocida, sobre todo si vais a usar algún tipo de RAID. La gestión de estos dispositivos es realmente importante al igual que te alerte cuando un disco pueda estar fallando y te evite la pérdida de información.</p>



<p>Por ello mi último consejo es que optes por alguna de estas marcas (no me pagan ni me han regalado nada) pero por comentarios, análisis, etc. suelen ser las mejores opciones:</p>



<p>Para <strong>NAS</strong> principalmente estarían <strong>Synology</strong> o <strong>QNAP</strong>, son carillos, pero son realmente fiables y además tienen sus propias apps para hacer backups de fotos desde el móvil, etc.</p>



<p>Para <strong>DAS</strong> mi elección iría a <strong>Terramaster</strong> aunque sería buena tercera opción para NAS y como alternativa <strong>Orico</strong>.</p>



<p>Mas allá de esas cuatro marcas, depende de vosotros.</p>



<p>Espero que os haya gustado y si tenéis alguna pregunta, cuestión, duda&#8230; siempre podéis usar los comentarios de abajo <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p>¡Nos vemos por el Fediverso!</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://mindeka.es/2025/08/03/nas-o-das/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Filebrowser en mantenimiento</title>
		<link>https://mindeka.es/2025/06/25/filebrowser-en-mantenimiento/</link>
					<comments>https://mindeka.es/2025/06/25/filebrowser-en-mantenimiento/#respond</comments>
		
		<dc:creator><![CDATA[jmdlr]]></dc:creator>
		<pubDate>Tue, 24 Jun 2025 22:12:20 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Selfhosting]]></category>
		<guid isPermaLink="false">https://mindeka.duckdns.org/?p=207</guid>

					<description><![CDATA[Hace un par de semanas, los desarrolladores que mantenían en Github una de las aplicaciones de gestión de ficheros más conocidas del self-hosting como es Filebrowser, comunicaron que la falta de tiempo provocaba su salida del proyecto de manera instantánea. Después del revuelo por esa noticia oficial, aunque ya era algo que se veía venir [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Hace un par de semanas, los desarrolladores que mantenían en <em>Github </em>una de las aplicaciones de gestión de ficheros más conocidas del <em>self-hosting</em> como es <strong>Filebrowser</strong>, comunicaron que la falta de tiempo provocaba su salida del proyecto de manera instantánea.</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="360" height="216" src="https://mindeka.duckdns.org/wp-content/uploads/2025/06/th.webp" alt="" class="wp-image-208" srcset="https://mindeka.es/wp-content/uploads/2025/06/th.webp 360w, https://mindeka.es/wp-content/uploads/2025/06/th-300x180.webp 300w" sizes="auto, (max-width: 360px) 100vw, 360px" /><figcaption class="wp-element-caption">Logo oficial de la aplicación, junto a su nombre.</figcaption></figure>



<p>Después del revuelo por esa noticia oficial, aunque ya era algo que se veía venir por la falta de actualizaciones en la aplicación desde hace meses, muchas voces han salido a la palestra asegurando la continuidad del mismo.</p>



<p>Hasta entonces, cuando algunos desarrolladores tomen posiciones y comiencen a gestionar y a poner en orden todo, el proyecto pasa a estar en <strong>modo mantenimiento</strong>. ¿Y qué significa esto? pues básicamente que únicamente se arreglarán fallos existentes y aquellos que puedan surgir mientras se revisan perfiles para dar una continuidad.</p>



<h3 class="wp-block-heading">Versión de mantenimiento</h3>



<p>Y con esa noticia y con la pereza que me da cambiar de aplicación, para mover posteriormente todo lo que tengo ella almacenada a esa otra, pues voy a dejar un pequeño <em>tip</em> para instalar desde cero la nueva nueva versión a través de <em>Docker</em>. Ya que si probáis los pasos previos de días atrás, no os servirán.</p>



<p>Incluso chequeando hoy la página oficial, han eliminado toda la información y han añadido un simple enlace a la cuenta oficial de <em>Github</em> hace apenas un día:</p>



<figure class="wp-block-image alignwide size-large has-custom-border"><img loading="lazy" decoding="async" width="1024" height="194" src="https://mindeka.duckdns.org/wp-content/uploads/2025/06/Captura-de-pantalla-2025-06-24-233732-1024x194.png" alt="" class="has-border-color has-foreground-border-color wp-image-209" style="border-width:1px" srcset="https://mindeka.es/wp-content/uploads/2025/06/Captura-de-pantalla-2025-06-24-233732-1024x194.png 1024w, https://mindeka.es/wp-content/uploads/2025/06/Captura-de-pantalla-2025-06-24-233732-300x57.png 300w, https://mindeka.es/wp-content/uploads/2025/06/Captura-de-pantalla-2025-06-24-233732-768x146.png 768w, https://mindeka.es/wp-content/uploads/2025/06/Captura-de-pantalla-2025-06-24-233732.png 1493w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Captura de la página oficial www.filebrowser.org</figcaption></figure>



<h3 class="wp-block-heading">Docker compose</h3>



<p>A continuación os dejo el fichero de <em>docker-compose.yml</em> que os servirá para instalar <em>Filebrowser </em>sin problemas o bien para actualizar el que tengáis ya instalado.</p>



<p>Básicamente lo que he hecho ha sido seguir las indicaciones de su espacio para la instalación (<a href="https://github.com/filebrowser/filebrowser/blob/master/docs/installation.md">enlace</a>), pero que os dejo a continuación bien explicadito:</p>



<pre class="wp-block-code"><code>services:
  filebrowser:
    image: filebrowser/filebrowser:<strong><mark style="background-color:#E9E8E6" class="has-inline-color has-foreground-color">v2-s6</mark></strong>
    container_name: filebrowser
    volumes:
      - <mark style="background-color:#E9E8E6" class="has-inline-color has-foreground-color"><strong>/folder/to/filebrowser/data</strong></mark>:/srv
      - <mark style="background-color:#E9E8E6" class="has-inline-color has-foreground-color"><strong>/folder/to/filebrowser/config</strong></mark>:/database
      - <mark style="background-color:#E9E8E6" class="has-inline-color has-foreground-color"><strong>/folder/to/filebrowser/config</strong></mark>:/config
      - <mark style="background-color:#E9E8E6" class="has-inline-color has-foreground-color"><strong>/folder/data/filebrowser/config/branding</strong></mark>:/branding
    environment:
      - TZ=Europe/Madrid
      - PUID=1000
      - PGID=1000
    ports:
      - <strong><mark style="background-color:#E9E8E6" class="has-inline-color has-foreground-color">8095</mark></strong>:80
    restart: unless-stopped</code></pre>



<p>Lo nuevo que hay que incluir en el fichero <em>docker-compose.yml </em>sería esto:</p>



<ul class="wp-block-list">
<li>image: filebrowser/filebrowser:<strong><mark style="background-color:#E9E8E6" class="has-inline-color has-foreground-color">v2-s6</mark></strong><br>Aseguraros que añadís la imagen de <strong><mark style="background-color:#E9E8E6" class="has-inline-color has-foreground-color">v2-s6</mark></strong> que es la última versión actualizada en el Hub de Docker. Como alternativa que también está actualizada podéis usar la <strong>s6</strong>. En cuanto a «latest» y otras opciones, me han dado ciertos problemas y no me han funcionado sobre todo al crear la base de datos.</li>
</ul>



<ul class="wp-block-list">
<li>/folder/to/filebrowser/data &amp; /folder/to/filebrowser/config<br>Estas carpetas cambian un poquillo, si antes en la versión había que añadir el fichero de la base de datos en el raíz y además crearla con anterioridad con un <em>touch</em>, ahora ya no es necesario. Esta imagen funciona bien.<br><br>En cuanto a la ruta de /folder/to/filebrowser/<strong>data</strong> es la ubicación donde tenemos nuestros datos y /folder/to/filebrowser/config/<strong>branding</strong> es la carpeta donde añadiré mi <em>logo </em>y <em>favicon </em>que quiero usar con Filebrowser. Esta carpeta es opcional. Para saber más de esto sobre configuración podéis visitar este <a href="https://github.com/filebrowser/filebrowser/blob/master/docs/configuration.md">enlace</a>.</li>
</ul>



<ul class="wp-block-list">
<li>&#8211; <strong><mark style="background-color:#E9E8E6" class="has-inline-color has-foreground-color">8095</mark></strong>:80<br>Ese será el puerto en el que queréis mostrar la aplicación. Seguramente tengáis un Reverse Proxy, si es así, únicamente cambiáis ese puerto por el que queráis y tengáis libre. Con eso funcionará.</li>
</ul>



<p>Por último, ya solo os queda hacer correr el docker con <em>docker compose up -d</em> y andando. </p>



<p>Ahora ya tenéis la versión de <em>mantenimiento</em> de esta gran aplicación que por el momento no tendremos que modificar hasta que salga de este estado y se comience a desarrollar el proyecto en nuevas mejoras, rendimiento, etc.</p>



<p>¡Nos vemos por el Fediverso!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mindeka.es/2025/06/25/filebrowser-en-mantenimiento/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Proyecto Selfhosting &#124; 3 Instalación de Nginx Proxy Manager (NPM)</title>
		<link>https://mindeka.es/2024/05/29/proyecto-selfhosting-3-instalacion-de-nginx-proxy-manager-npm/</link>
					<comments>https://mindeka.es/2024/05/29/proyecto-selfhosting-3-instalacion-de-nginx-proxy-manager-npm/#respond</comments>
		
		<dc:creator><![CDATA[jmdlr]]></dc:creator>
		<pubDate>Wed, 29 May 2024 16:00:00 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[Selfhosting]]></category>
		<category><![CDATA[Sistemas]]></category>
		<guid isPermaLink="false">https://mindeka.duckdns.org/?p=117</guid>

					<description><![CDATA[Una vez configurada la IP estática en nuestro servidor Debian 12 que vimos en la primera entrada, la instalación de Docker posteriormente en el segundo artículo, seguimos adelante y ahora tocará instalar el proxy inverso que hará la función de protección de nuestro servidor web frente a ataques y que nos ayudará a conseguir un [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Una vez configurada la <strong>IP estática</strong> en nuestro servidor Debian 12 que vimos en la primera entrada, la instalación de <strong>Docker</strong> posteriormente en el segundo artículo, seguimos adelante y ahora tocará instalar el <strong>proxy inverso</strong> que hará la función de protección de nuestro servidor web frente a ataques y que nos ayudará a conseguir un mayor rendimiento.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="900" height="450" src="https://mindeka.duckdns.org/wp-content/uploads/2025/06/98879880-6796-11ea-8a07-a3f907697ec6-1.jpg" alt="" class="wp-image-118" srcset="https://mindeka.es/wp-content/uploads/2025/06/98879880-6796-11ea-8a07-a3f907697ec6-1.jpg 900w, https://mindeka.es/wp-content/uploads/2025/06/98879880-6796-11ea-8a07-a3f907697ec6-1-300x150.jpg 300w, https://mindeka.es/wp-content/uploads/2025/06/98879880-6796-11ea-8a07-a3f907697ec6-1-768x384.jpg 768w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure>



<p>El servidor proxy inverso siempre se sitúa por delante de los servidores/servicios web que tengamos en el servidor y es el que se encargará de reenviar las solicitudes que reciba hacía los servicios alojados. Es por ello, que es el servicio que tenemos que configurar primeramente es este.</p>



<p>Para instalar este proxy necesitaremos de la última versión LTS de <strong>NodeJS</strong>, la cual descargaremos desde un repositorio. Por defecto, en Debian 12 viene la versión <em>18</em> que serviría, pero siempre me gusta tener actualizada la aplicación a la última versión LTS (<em>Long Term Support</em>) que exista, en este caso la versión <em>20</em>.</p>



<p>Antes de nada y como práctica habitual, primero haremos un <em>update</em> y <em>upgrade</em> para dejar el sistema actualizado hasta ese mismo momento. Lanzamos los comandos pertinentes:</p>



<pre class="wp-block-code"><code>sudo apt update &amp;&amp; sudo apt upgrade -y</code></pre>



<p>Después ya podemos ir a la página del repositorio llamado <strong>NodeSource</strong> de NodeJS (<a target="_blank" rel="noreferrer noopener" href="https://deb.nodesource.com">https://deb.nodesource.com</a>) desde donde podremos descargar e instalar la última versión LTS de esta herramienta. En su página veremos lo sencillo que es, básicamente tendremos que copiar/pegar dos líneas.</p>



<p>Pero antes de lanzar estas dos líneas, habrá que instalar el comando <strong>curl</strong> ya que por defecto no viene instalado por Debian.<br>Lanzamos la instalación:</p>



<pre class="wp-block-code"><code>sudo apt install curl</code></pre>



<pre class="wp-block-code"><code>curl -fsSL https://deb.nodesource.com/setup_20.x | sudo bash -
sudo apt-get install -y nodejs</code></pre>



<p>Si todo ha ido bien, podemos ver que ya lo tenemos instalado:</p>



<pre class="wp-block-code"><code>jmdlr@debian:~$ curl --version
curl 7.88.1 (x86_64-pc-linux-gnu) libcurl/7.88.1 OpenSSL/3.0.11 zlib/1.2.13 brotli/1.0.9 zstd/1.5.4 libidn2/2.3.3 libpsl/0.21.2 (+libidn2/2.3.3) libssh2/1.10.0 nghttp2/1.52.0 librtmp/2.3 OpenLDAP/2.5.13
Release-Date: 2023-02-20, security patched: 7.88.1-10+deb12u5
Protocols: dict file ftp ftps gopher gophers http https imap imaps ldap ldaps mqtt pop3 pop3s rtmp rtsp scp sftp smb smbs smtp smtps telnet tftp
Features: alt-svc AsynchDNS brotli GSS-API HSTS HTTP2 HTTPS-proxy IDN IPv6 Kerberos Largefile libz NTLM NTLM_WB PSL SPNEGO SSL threadsafe TLS-SRP UnixSockets zstd</code></pre>



<p>Con esto ya estaríamos listos y podemos lanzar las dos líneas que ponían en la página del repositorio:</p>



<pre class="wp-block-code"><code>curl -fsSL https://deb.nodesource.com/setup_20.x | sudo bash -
sudo apt-get install -y nodejs</code></pre>



<p>Terminada la instalación, toca comprobar que la versión instalada de <strong>NodeJS</strong> es la que queremos, en este caso la <em>20 LTS.</em><br>Ejecutamos el siguiente comando para visualizar la versión:</p>



<pre class="wp-block-code"><code>jmdlr@debian:~$ node -v
v20.13.1</code></pre>



<p>¡Bien hecho! Ahora ya solo toca instalar el proxy, para ello vamos a la página oficial de <strong>GitHub</strong> de <strong>NPM</strong> para ver la última versión disponible he instalarla.</p>



<ul class="wp-block-list">
<li><a href="https://github.com/NginxProxyManager/nginx-proxy-manager" target="_blank" rel="noreferrer noopener">https://github.com/NginxProxyManager/nginx-proxy-manager</a></li>
</ul>



<p>Vamos a seguir exactamente los pasos que se indican ahí, que de manera resumida son las siguientes.</p>



<p>Creamos un fichero <em>docker-compose.yml</em>:</p>



<pre class="wp-block-code"><code>vi docker-compose.yml</code></pre>



<p>Añadimos el siguiente contenido:</p>



<pre class="wp-block-code"><code>version: '3.8'
services:
  app:
    image: 'docker.io/jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80'
      - '81:81'
      - '443:443'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt</code></pre>



<p>Estamos indicando en el fichero qué:</p>



<ul class="wp-block-list">
<li>Usaremos la última imagen disponible que exista del NPM,</li>



<li>Abriremos los puertos 80, 443 y 81 para el dashboard de administración de la app, y</li>



<li>Se crearán las siguientes carpetas de «data» y «letsencrypt».</li>
</ul>



<p>Salvamos el fichero (:wq!) y lo ejecutamos:</p>



<pre class="wp-block-code"><code>docker compose up -d</code></pre>



<p>Esto tardará un ratillo entre que descargar la imagen, configura, etc. Al final tendrá que indicarnos con checks de color verde, que todo ha ido bien.<br>Para confirmarlo podemos ver en qué estado está la aplicación dentro de docker, para ello ejecutamos lo siguiente:</p>



<pre class="wp-block-code"><code>docker ps</code></pre>



<p>Y tendría que devolvernos que el contenedor de la aplicación está corriendo como podremos ver en la columna de «Status», que dirá el tiempo que lleva levantado:</p>



<pre class="wp-block-code"><code>jmdlr@debian:~$ docker ps
CONTAINER ID   IMAGE                             COMMAND   CREATED          STATUS          PORTS                                                                                  NAMES
016fdef7c34a   jc21/nginx-proxy-manager:latest   "/init"   57 seconds ago   Up 55 seconds   0.0.0.0:80-81-&gt;80-81/tcp, :::80-81-&gt;80-81/tcp, 0.0.0.0:443-&gt;443/tcp, :::443-&gt;443/tcp   jmdlr-app-1</code></pre>



<p>Si esto es así, el servicio estará levantado, probemos directamente lo que nos dice el puerto <strong>80</strong>.<br>Abrimos un navegador en nuestro equipo y atacamos a la <strong>IP de nuestro servidor</strong> en mi caso será la IP 192.168.1.12:</p>



<figure class="wp-block-image size-full has-custom-border"><img loading="lazy" decoding="async" width="1024" height="366" src="https://mindeka.duckdns.org/wp-content/uploads/2025/06/image-3-1024x366-1.png" alt="" class="wp-image-119" style="border-width:1px" srcset="https://mindeka.es/wp-content/uploads/2025/06/image-3-1024x366-1.png 1024w, https://mindeka.es/wp-content/uploads/2025/06/image-3-1024x366-1-300x107.png 300w, https://mindeka.es/wp-content/uploads/2025/06/image-3-1024x366-1-768x275.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Ahora vamos a ir a la página de administración de NPM que por defecto se configura en el puerto <strong>81</strong> y nos devolverá esta ventana de «login»:</p>



<figure class="wp-block-image size-full has-custom-border"><img loading="lazy" decoding="async" width="732" height="316" src="https://mindeka.duckdns.org/wp-content/uploads/2025/06/image-4.png" alt="" class="wp-image-120" style="border-width:1px" srcset="https://mindeka.es/wp-content/uploads/2025/06/image-4.png 732w, https://mindeka.es/wp-content/uploads/2025/06/image-4-300x130.png 300w" sizes="auto, (max-width: 732px) 100vw, 732px" /></figure>



<p>Para acceder, como se indica en la página oficial tendremos que utilizar estas credenciales de abajo, que posteriormente nos obligarán a cambiar la primera vez que accedamos, al igual que el nombre, usuario y dirección de correo electrónico.</p>



<ul class="wp-block-list">
<li>Usuario: <a href="mailto:admin@example.com" target="_blank" rel="noreferrer noopener"><em>admin@example.com</em></a></li>



<li>Contraseña: <em>changeme</em></li>
</ul>



<figure class="wp-block-image size-full has-custom-border"><img loading="lazy" decoding="async" width="1024" height="300" src="https://mindeka.duckdns.org/wp-content/uploads/2025/06/image-5-1024x300-1.png" alt="" class="wp-image-121" style="border-width:1px" srcset="https://mindeka.es/wp-content/uploads/2025/06/image-5-1024x300-1.png 1024w, https://mindeka.es/wp-content/uploads/2025/06/image-5-1024x300-1-300x88.png 300w, https://mindeka.es/wp-content/uploads/2025/06/image-5-1024x300-1-768x225.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-full has-custom-border"><img loading="lazy" decoding="async" width="1024" height="371" src="https://mindeka.duckdns.org/wp-content/uploads/2025/06/image-6-1024x371-1.png" alt="" class="wp-image-122" style="border-width:1px" srcset="https://mindeka.es/wp-content/uploads/2025/06/image-6-1024x371-1.png 1024w, https://mindeka.es/wp-content/uploads/2025/06/image-6-1024x371-1-300x109.png 300w, https://mindeka.es/wp-content/uploads/2025/06/image-6-1024x371-1-768x278.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Añadimos la información que queramos poner y daremos al botón de «Save». Y ya estaremos en la página principal desde la que gestionaremos los diferentes apartados de nuestro proxy.</p>



<figure class="wp-block-image size-full has-custom-border"><img loading="lazy" decoding="async" width="1024" height="270" src="https://mindeka.duckdns.org/wp-content/uploads/2025/06/image-7-1024x270-1.png" alt="" class="wp-image-123" style="border-width:1px" srcset="https://mindeka.es/wp-content/uploads/2025/06/image-7-1024x270-1.png 1024w, https://mindeka.es/wp-content/uploads/2025/06/image-7-1024x270-1-300x79.png 300w, https://mindeka.es/wp-content/uploads/2025/06/image-7-1024x270-1-768x203.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Y hasta aquí toda la instalación de nuestro proxy, seguiremos en próximos artículos con la instalación de los diferentes servicios que queramos tener disponibles en nuestro servidor y veremos como debemos configurar NPM para que las peticiones sean redireccionadas según al servicio que se quiera acceder.</p>



<p>¡Nos vemos por el Fediverso!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mindeka.es/2024/05/29/proyecto-selfhosting-3-instalacion-de-nginx-proxy-manager-npm/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Proyecto Selfhosting &#124; 2  Instalación de Docker</title>
		<link>https://mindeka.es/2024/05/28/proyecto-self-hosting-2-instalacion-de-docker/</link>
					<comments>https://mindeka.es/2024/05/28/proyecto-self-hosting-2-instalacion-de-docker/#respond</comments>
		
		<dc:creator><![CDATA[jmdlr]]></dc:creator>
		<pubDate>Tue, 28 May 2024 16:00:00 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Selfhosting]]></category>
		<category><![CDATA[Sistemas]]></category>
		<guid isPermaLink="false">https://mindeka.duckdns.org/?p=113</guid>

					<description><![CDATA[Para seguir con nuestro proyecto instalaremos ahora Docker, ya que muchos servicios que instalaremos serán mediante imágenes de docker. Por lo que instalar correctamente Docker en nuestro servidor será algo fundamental. Aplicaciones como Nginx Proxy Manager que instalaremos posteriormente lo haremos de esta manera. Así pues, comencemos. Siempre me gusta instalar las últimas versiones de [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Para seguir con nuestro proyecto instalaremos ahora <strong>Docker</strong>, ya que muchos servicios que instalaremos serán mediante imágenes de docker. Por lo que instalar correctamente <strong>Docker</strong> en nuestro servidor será algo fundamental. Aplicaciones como <strong>Nginx Proxy Manager</strong> que instalaremos posteriormente lo haremos de esta manera. Así pues, comencemos.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="900" height="410" src="https://mindeka.duckdns.org/wp-content/uploads/2025/06/docker-generic-banner1_900x410-1.jpg" alt="" class="wp-image-114" srcset="https://mindeka.es/wp-content/uploads/2025/06/docker-generic-banner1_900x410-1.jpg 900w, https://mindeka.es/wp-content/uploads/2025/06/docker-generic-banner1_900x410-1-300x137.jpg 300w, https://mindeka.es/wp-content/uploads/2025/06/docker-generic-banner1_900x410-1-768x350.jpg 768w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure>



<p>Siempre me gusta instalar las últimas versiones de software disponible y aquí no haré la excepción por lo que instalaremos la última versión disponible de docker que haya, por lo que usaremos los repositorios de este para conseguir dicha versión.</p>



<p>Primero instalaremos los paquetes de <em>ca-certificates</em> y <em>gnupg</em>:</p>



<pre class="wp-block-code"><code>sudo apt install ca-certificates gnupg</code></pre>



<p>Creamos una carpeta para almacenar los <em>keyrings</em>:</p>



<pre class="wp-block-code"><code>sudo install -m 0755 -d /etc/apt/keyrings</code></pre>



<p>Descargamos la clave PGP y la almacenamos en la ruta anterior:</p>



<pre class="wp-block-code"><code>curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg</code></pre>



<p>Otorgamos permisos al fichero que hemos descargado:</p>



<pre class="wp-block-code"><code>sudo chmod a+r /etc/apt/keyrings/docker.gpg</code></pre>



<p>Configuramos el repositorio que usará docker:</p>



<pre class="wp-block-code"><code>echo \
  "deb &#91;arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  "$(. /etc/os-release &amp;&amp; echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list &gt; /dev/null</code></pre>



<p>Ahora ejecutamos una actualización con <em>update</em> /<em> upgrade</em> para refrescar los repositorios y finalmente lanzaremos la instalación de <strong>Docker</strong> con todos los paquetes recomendados (sobre todo <em>docker-compose</em>):</p>



<pre class="wp-block-code"><code>sudo apt update &amp;&amp; sudo apt upgrade -y
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin</code></pre>



<p>Por último, comprobamos que se ha instalado adecuadamente:</p>



<pre class="wp-block-code"><code>sudo docker run hello-world</code></pre>



<p>Si todo va bien saldrá lo siguiente en pantalla:</p>



<pre class="wp-block-code"><code>jmdlr@debian:$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
c1ec31eb5944: Pull complete
Digest: sha256:266b191e926f65542fa8daaec01a192c4d292bff79426f47300a046e1bc576fd
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https:&#47;&#47;hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/</code></pre>



<p>Finalmente podemos ver que tenemos la última versión instalada:</p>



<pre class="wp-block-code"><code>jmdlr@debian:~$ docker -v
Docker version 26.1.3, build b72abbb</code></pre>



<p>Ahora quedará configurar docker para poder usarlo con nuestro usuario, ya que tener que usarlo con «root» puede ser tedioso la vez que inseguro.<br>Vamos a por ello entonces.</p>



<p>Creamos un grupo para docker:</p>



<pre class="wp-block-code"><code>sudo groupadd docker</code></pre>



<p>Es posible que nos salga que ya lo hemos creado, si es así, seguimos para adelante, añadimos nuestro usuario a ese grupo de docker:</p>



<pre class="wp-block-code"><code>sudo usermod -aG docker jmdlr</code></pre>



<p>Para que se apliquen los cambios tenemos que <strong>deconectar</strong> y volver a <strong>conectar</strong> con nuestro usuario. Esto es importante o no podremos utilizar docker. Lo hacemos.<br>A la vuelta probamos si ya podemos ejecutar docker con nuestro usuario:</p>



<pre class="wp-block-code"><code>docker run hello-world</code></pre>



<p>Si todo ha ido bien veremos en la pantalla eso de «Hello from Docker!»</p>



<p>Y con esto estaría todo por el momento, ¡seguiremos construyendo nuestro servidor self-hosting en próximos capítulos!</p>



<p>¡Nos vemos en el Fediverso!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mindeka.es/2024/05/28/proyecto-self-hosting-2-instalacion-de-docker/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Proyecto Selfhosting &#124; 1 Configurar IP estática</title>
		<link>https://mindeka.es/2024/05/27/proyecto-selfhosting-1-configurar-ip-estatica/</link>
					<comments>https://mindeka.es/2024/05/27/proyecto-selfhosting-1-configurar-ip-estatica/#respond</comments>
		
		<dc:creator><![CDATA[jmdlr]]></dc:creator>
		<pubDate>Mon, 27 May 2024 14:17:00 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Selfhosting]]></category>
		<category><![CDATA[Sistemas]]></category>
		<guid isPermaLink="false">https://mindeka.duckdns.org/?p=109</guid>

					<description><![CDATA[Una de las primeras cosas a realizar una vez instalado el sistema operativo GNU Linux que hayáis instalado, si lo vais a utilizar como servidor, es fijar la dirección IP dejando una IP estática. En este caso, cuando monto servidores siempre elijo Debian, su estabilidad y robustez de tantos años nunca me ha fallado y [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Una de las primeras cosas a realizar una vez instalado el sistema operativo GNU Linux que hayáis instalado, si lo vais a utilizar como servidor, es fijar la dirección IP dejando una <strong>IP estática</strong>. En este caso, cuando monto servidores siempre elijo <strong>Debian</strong>, su estabilidad y robustez de tantos años nunca me ha fallado y sinceramente, en mi opinión, está siempre un escalafón por encima del resto.</p>



<figure class="wp-block-image"><img decoding="async" src="https://blog.redigit.es/wp-content/uploads/2017/10/linux-debian3.jpg" alt=""/></figure>



<p>Así pues, os explicaré el proceso de fijar una IP estática en Debian de manera sencilla y rápida.</p>



<p>Lo primero será conectar al servidor con la <em>IP dinámica</em> que le haya asignado vuestro <em>router </em>después de haberlo instalado, en mi caso es la IP 192.168.1.128 y con mi nombre de usuario que utilicé al instalar el servidor:</p>



<pre class="wp-block-code"><code>ssh jmdlr@192.168.1.128</code></pre>



<p>Si es la primera vez que accedemos nos dirá si queremos salvar el <em>fingerprint</em>, damos que «Yes» y seguimos adelante. Nos pedirá la contraseña de nuestro usuario y ya estaremos dentro:</p>



<pre class="wp-block-code"><code>Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Mon May 27 14:24:51 2024 from 192.168.1.112
jmdlr@debian:~$</code></pre>



<p>Ahora averiguaremos el nombre de la interfaz de red que tenemos que modificar y que usaremos con la IP estática que queremos, para ello lanzamos el siguiente comando para saber cuál interfaz tiene nuestra IP dinámica configurada:</p>



<pre class="wp-block-code"><code>jmdlr@debian:~$ ip a | grep inet</code></pre>



<p>Nos devolverá todas las interfaces de nuestro equipo y tendremos que ver cual es la que tiene nuestra IP dinámica. En el ejemplo de abajo, veremos que es la <em>tercera línea</em>que tiene la IP acaba en 128 (en la vuestra será una diferente) y está configurada en la interfaz <strong>enp0s31f6</strong>.</p>



<pre class="wp-block-code"><code>jmdlr@debian:~$ ip a |grep inet
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host noprefixroute
    inet 192.168.1.128/24 brd 192.168.1.255 scope global dynamic enp0s31f6
    inet6 fe80::3641:5dff:feb6:cadd/64 scope link</code></pre>



<p>Con esta información modificamos el fichero correspondiente <strong>/etc/network/interfaces</strong><br>Hacemos un <strong>vi</strong> o un <strong>nano</strong> sobre el fichero según nuestra configuración:</p>



<pre class="wp-block-code"><code>sudo vi /etc/network/interfaces</code></pre>



<p>Comando SUDO</p>



<p>Si no tenemos instalado «sudo» en Debian, ya que no viene instalado por defecto, tendremos que instalarlo con el siguiente comando:</p>



<pre class="wp-block-code"><code>su - root
Contraseña:
apt install sudo</code></pre>



<p>SUDO para nuestro usuario</p>



<p>Nuestro usuario no tendrá privilegios de «root», por lo que tendremos que otorgárselos de la siguiente manera.<br>Tecleamos la palabra <strong>visudo</strong> y accederemos a la configuración de «sudo» y buscamos la línea que ponga:</p>



<pre class="wp-block-code"><code># User privilege specification
root    ALL=(ALL:ALL) ALL</code></pre>



<p>Debajo de esa línea, añadimos otra línea igual pero comenzando con el nombre de nuestro usuario y quedaría así:</p>



<pre class="wp-block-code"><code># User privilege specification
root    ALL=(ALL:ALL) ALL
jmdlr   ALL?(ALL:ALL) ALL</code></pre>



<p>Salvamos el fichero y ya tendremos privilegios de «sudo» para nuestro usuario.</p>



<p>Ahora sí, tendría que funcionar el comando de arriba.<br>Salimos primero del usuario <strong>root</strong> tecleando la palabra «exit» y ahora con nuestro usuario escribimos:</p>



<pre class="wp-block-code"><code>sudo vi /etc/network/interfaces</code></pre>



<p>El contenido será más o menos el siguiente:</p>



<pre class="wp-block-code"><code># This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug enp0s31f6
iface enp0s31f6 inet dhcp</code></pre>



<p>La última línea de <strong>iface</strong> la comentaremos, ya que es la que asigna una IP dinámica a la tarjeta, y añadiremos las siguientes líneas:</p>



<pre class="wp-block-code"><code># This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug enp0s31f6
# iface enp0s31f6 inet dhcp

iface enp0s31f6 inet static
address 192.168.1.12
netmask 255.255.255.0
gateway 192.168.1.1</code></pre>



<ul class="wp-block-list">
<li>La primera línea tendremos que cambiar <strong>dhcp</strong> por <strong>static</strong>.</li>



<li>La segunda línea de <strong>address</strong> pondremos la IP local que queremos que tenga el servidor, en este caso puse la acabada en <strong>12</strong>.</li>



<li>La tercera línea de <strong>netmask</strong> será normalmente la <strong>255.255.255.0</strong> pero dependerá de cómo tenemos configurada nuestra red, y</li>



<li>La cuarta línea de <strong>gateway</strong> será la puerta de enlace que corresponde a la salida a internet de nuestro router, en mi caso la IP acabada de <strong>1</strong>.</li>
</ul>



<p>Salvamos el fichero con :wq! si estamos con <strong>vi</strong> o control+x si estamos con <strong>nano</strong>.</p>



<p>Ahora toca reiniciar nuestro servicio de red para que aplique los nuevos cambios introducidos en el fichero de configuración de las interfaces:</p>



<pre class="wp-block-code"><code>sudo systemctl restart networking.service</code></pre>



<p>Si todo va bien, perderemos la conexión con el servidor y podremos conectar con la IP estática que le hayamos configurado. En mi caso la acabada en 12.<br>Así pues, pruebo a conectar por SSH a dicha IP:</p>



<pre class="wp-block-code"><code>ssh jmdlr@192.168.1.12</code></pre>



<p>Nos pedirá el nuevo «fingerprint», le damos de nuevo a «Yes». Ahora nos pedirá la contraseña de nuestro usuario y si todo es correcto, estaremos dentro del servidor con la IP estática correctamente configurada:</p>



<pre class="wp-block-code"><code>root@Azeroth:~# ssh jmdlr@192.168.1.12
The authenticity of host '192.168.1.12 (192.168.1.12)' can't be established.
ED25519 key fingerprint is SHA256:7cy7D1pkU1TDWae14QQCkQPk2yHCR3l0+7DlT2h1osk.
This host key is known by the following other names/addresses:
    ~/.ssh/known_hosts:3: &#91;hashed name]
Are you sure you want to continue connecting (yes/no/&#91;fingerprint])? yes
Warning: Permanently added '192.168.1.12' (ED25519) to the list of known hosts.
jmdlr@192.168.1.12's password:
Linux debian 6.1.0-21-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.90-1 (2024-05-03) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Mon May 27 15:09:16 2024 from 192.168.1.114
jmdlr@debian:~$</code></pre>



<p>Con el siguiente comando podemos ver las interfaces de red y veremos que la tercera línea tiene la IP <strong>12</strong> en mi caso que configuré en la interfaz llamada <strong>enp0s31f6</strong>.</p>



<pre class="wp-block-code"><code>jmdlr@debian:~$ ip a | grep inet
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host noprefixroute
    inet 192.168.1.12/24 brd 192.168.1.255 scope global enp0s31f6
    inet6 fe80::3641:5dff:feb6:cadd/64 scope link</code></pre>



<p>Con esto ya tendríamos configurada la <strong>IP estática</strong>, que es uno de los primeros pasos imprescindibles para posteriormente montar diferentes servicios en nuestro servidor <em>self-hosted</em>.</p>



<p>¡Nos vemos por el Fediverso!</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://mindeka.es/2024/05/27/proyecto-selfhosting-1-configurar-ip-estatica/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Proyecto: Selfhosting</title>
		<link>https://mindeka.es/2024/05/24/proyecto-selfhosting/</link>
					<comments>https://mindeka.es/2024/05/24/proyecto-selfhosting/#respond</comments>
		
		<dc:creator><![CDATA[jmdlr]]></dc:creator>
		<pubDate>Fri, 24 May 2024 07:00:00 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[Selfhosting]]></category>
		<category><![CDATA[Sistemas]]></category>
		<guid isPermaLink="false">http://192.168.1.11:8899/?p=98</guid>

					<description><![CDATA[Siempre he tenido la idea de que la mayor seguridad en estos momentos es que aquella información que no quieras que nadie sepa, no tenga salida a internet.Es así de fácil&#8230; y de difícil a la vez. ¿Qué aparato hoy en día no está conectado a la red? Y no hablemos de la IA que [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Siempre he tenido la idea de que la mayor seguridad en estos momentos es que aquella información que no quieras que nadie sepa, no tenga salida a internet.<br>Es así de fácil&#8230; y de difícil a la vez. ¿Qué aparato hoy en día no está conectado a la red? Y no hablemos de la IA que anda por todas partes desde hace poco y será implantada hasta en los frigoríficos, escobas, sombrillas&#8230; y quién sabe dónde más.</p>



<p>La situación es alarmante si te quedas a pensar en ello por un momento, por ese motivo siempre habrá que intentar poner muros, defensas, aduanas ante ello, para tener más control sobre nuestra información. Y es por ello, que empiezo este pequeño <strong>proyecto</strong> <strong>de self-hosting</strong> desde mi blog, por que si no podemos evitar que nuestra información personal se filtre y alguna la tengan por defecto (nuestro correo electrónico), si al menos, mantengamos nuestros datos, ubicados en nuestra misma casa con nuestro hardware, de manera segura y sin muchas parafernalias.</p>



<p>Esto solo pretende ser una guía de cómo hacerlo, no será la verdad verdadera. Una vez sepáis como funciona esto del «self-hosting» o «self-hosted» si queréis añadir más dificultad, más componentes, más servicios, diferentes vlans, etc. Eso correrá de vuestra parte. Por mi lado, aquí explicaré una configuración básica con lo que empezar y con servicios de «más uso».</p>



<figure class="wp-block-image"><img decoding="async" src="https://user-images.githubusercontent.com/45159366/152699307-1c4ebfcd-a2b0-456c-9a84-01ac255e3782.png" alt=""/></figure>



<h2 class="wp-block-heading">¿Qué vamos a montar?</h2>



<p>Una mini-arquitectura en nuestra ubicación local para tener diferentes servicios, que ahora tendréis externalizados prácticamente en su totalidad o a lo mejor algunos de ellos y de esta manera tenerlos en vuestra propia vivienda, local, etc. Mostraré la instalación de los diferentes componentes y servicios utilizando apps de Software libre paso a paso en su mayoría (tengo Emby aun por aquí rondando). Y añadiremos la seguridad que sea necesaria para evitar cualquier problema.</p>



<p>La intención, explicada de manera breve y rápida, es montar un pequeño servidor con un proxy inverso y detrás de él unos cuantos servicios que pueden ser más o menos interesantes para vuestro uso diario. Estos servicios que he pensado (pueden ser modificados durante las diferentes entradas en el blog) que podrían ser interesantes para instalar en nuestro servidor serían los siguientes:</p>



<ul class="wp-block-list">
<li>Un <strong>buscador </strong>como puede ser SearXNG para realizar búsquedas seguras,</li>



<li>Un <strong>agregador </strong>de enlaces <strong>rss </strong>para estar informados de noticias, blogs, que nos interesen como puede ser FreshRSS,</li>



<li>Una plataforma de <strong>mensajería </strong>para comunicarnos de manera segura como SimpleX,</li>



<li>Una plataforma de <strong>blogs</strong> para escribir y compartir nuestras cosas, bien con WordPress, Ghost o Bludit,</li>



<li>Una pequeña nube de <strong>alojamiento </strong>de ficheros con otras opciones como puede ser FileBrowser, Nextcloud, etc,</li>



<li>Una aplicación de <strong>monitorización </strong>para controlar nuestro sistemas como Uptime Kuma, Umami, etc,</li>



<li>Un protector <strong>DNS </strong>para quitar basura en nuestra red local como Pi-hole,</li>



<li>Un <strong>centro multimedia</strong> para ver nuestro contenido privado de vídeos, fotos&#8230; que podemos hacer con Emby o Jellyfin, y</li>



<li>Muchas más cosas si hay interés en montarlo.</li>
</ul>



<h2 class="wp-block-heading">¿Qué necesitamos?</h2>



<p>Pues varias cosas, pero en resumen los requisitos mínimos serían:</p>



<ul class="wp-block-list">
<li><strong>Red eléctrica</strong> (¿obvio no?)</li>



<li><strong>Conexión a internet</strong>, preferentemente fibra aunque si tenéis ADSL&#8230; ¡pues no queda otra!</li>



<li>Una <strong>RaspberryPI</strong> <strong>3B</strong> o versión superior o bien algún portátil, PC viejo, etc. Recomiendo una Raspberry o algo similar por el consumo de red eléctrica.</li>



<li>Un <strong>MiniPC</strong> o <strong>NUC</strong>, si vamos a querer añadir bastantes servicios, lo mejor en cuanto a rendimiento, coste de luz, etc. sin duda necesitamos este hardware. También podría servir una RaspberryPI de las últimas o una OrangePi, pero sigo opinando que por precio/rendimiento un minipc es mejor inversión. Pero para gustos los colores. Como otra opción también sería tener varias Raspberry/OrangePi y distribuir los servicios por ellas&#8230; la arquitectura puede ser flexible como veis.</li>
</ul>



<p>Por mi parte usaré lo siguiente de lo expuesto anteriormente: Red eléctrica, conexión vía fibra, RaspberryPi 3B+ y Mini-PC (GK41).</p>



<h2 class="wp-block-heading">Servicio a servicio</h2>



<p>Comenzaré en breve a publicar los diferentes <em>posts</em> sobre este proyecto e iré pasito a pasito pero sin prisa, aunque tampoco sin pausa. La idea ir haciendo todo esto a la vez que voy modificando toda mi red interna de casa, que no está como quisiera y que quiero dejarla mejor de lo que está. Aquí os dejo el artículo que publiqué del estado actual de mi red: <a href="http://mindeka.duckdns.org/2020/05/23/red-interna-de-casa/" target="_blank" rel="noreferrer noopener">http://mindeka.duckdns.org/2020/05/23/red-interna-de-casa/</a>.</p>



<p>Así que aprovechando el cambio que quiero hacer de todo, utilizaré mi blog para ir publicando todo y si alguien más quiere dar el salto y <em>auto-alojarse</em> sus servicios pueda hacerlo. Dejo aquí el dibujo final que hice de cómo quedará mi red interna algún día de estos, únicamente exponiendo dos a internet y dentro tener una mini-infraestructura ser microservicios para dar soporte a mi familia y a mi mismo.</p>



<figure class="wp-block-image size-full has-custom-border"><img loading="lazy" decoding="async" width="1024" height="455" src="http://192.168.1.11:8899/wp-content/uploads/2025/06/red_interna_final-1024x455-1.jpg" alt="" class="wp-image-99" style="border-width:1px" srcset="https://mindeka.es/wp-content/uploads/2025/06/red_interna_final-1024x455-1.jpg 1024w, https://mindeka.es/wp-content/uploads/2025/06/red_interna_final-1024x455-1-300x133.jpg 300w, https://mindeka.es/wp-content/uploads/2025/06/red_interna_final-1024x455-1-768x341.jpg 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Y poco más gente, a futuro ya hablaremos de ciertos «pros» y «contras» de tener esto auto-alojado localmente para que podáis decidir si es buena idea para vosotros o no según bastantes factores.</p>



<p>¡Nos vemos por el Fediverso!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mindeka.es/2024/05/24/proyecto-selfhosting/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Acceder por SSH con clave pública</title>
		<link>https://mindeka.es/2020/03/30/acceder-por-ssh-con-clave-publica/</link>
					<comments>https://mindeka.es/2020/03/30/acceder-por-ssh-con-clave-publica/#respond</comments>
		
		<dc:creator><![CDATA[jmdlr]]></dc:creator>
		<pubDate>Mon, 30 Mar 2020 16:32:00 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[Sistemas]]></category>
		<guid isPermaLink="false">http://192.168.1.11:8899/?p=16</guid>

					<description><![CDATA[Este tipo de artículos sobre tareas de un «sysadmin», los publicaré de vez en cuando, explicando de manera sencilla, para que tanto los que se dedican a ello, como los que no lo hacen y quieren saber más, aprendan, porque aun a día de hoy hay gente que me pregunta como «hacerlo» cuando debería ser [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Este tipo de artículos sobre tareas de un «sysadmin», los publicaré de vez en cuando, explicando de manera sencilla, para que tanto los que se dedican a ello, como los que no lo hacen y quieren saber más, aprendan, porque aun a día de hoy hay gente que me pregunta como «hacerlo» cuando debería ser una práctica casi obligatoria para acceder a nuestros sistemas por SSH, ya no hay que usar password hay que utilizar clave privada/clave pública&#8230; ¡Vamos a ello!</p>



<p>Hoy trataremos como dice el artículo, como acceder a nuestro servidor vía ssh sin contraseña pero sí con nuestra propia clave pública/privada.</p>



<h2 class="wp-block-heading">Creando nuestra clave</h2>



<p>La clave se generará en nuestro ordenador de sobremesa, portátil&#8230; en definitiva desde el cual accederemos al servidor X.</p>



<p>Generamos nuestra clave:</p>



<pre class="wp-block-code"><code>$ ssh-keygen -b 4096</code></pre>



<p>Con el parámetro&nbsp;<strong>-b</strong>&nbsp;indicamos que queremos que sea una clave robusta de 4096 bits. Con 2048 bits sería suficiente, pero me gusta ser un tipo duro <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f600.png" alt="😀" class="wp-smiley" style="height: 1em; max-height: 1em;" /><br>Durante la generación nos hará una serie de preguntas que tendremos que responder si queremos cambiar algo o bien dejar por defecto:</p>



<pre class="wp-block-code"><code>jmdlr@casa:~$ ssh-keygen -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/home/jmdlr/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/jmdlr/.ssh/id_rsa.
Your public key has been saved in /home/jmdlr/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:e1S4R43AcFqR3NADcOtS4wDth2RYAojBQp3E28WUGIQ jmdlr@casa
The key's randomart image is:
+---&#91;RSA 4096]----+
|+++o=+B===OB     |
|o..E ..*+=+++o   |
|.   o .+o.= +..  |
|   . .  o=.=     |
|        S.= .    |
|         + .     |
|        . .      |
|         .       |
|                 |
+----&#91;SHA256]-----+
</code></pre>



<p>Breve explicación de cada pregunta:</p>



<ul class="wp-block-list">
<li><strong>Enter file in which to save the key (/home/jmdlr/.ssh/id_rsa):</strong> Ubicación donde se almacenará nuestra clave tanto privada como pública. Se puede modificar pero no es necesario.</li>



<li><strong>Enter passphrase (empty for no passphrase):</strong> Se puede añadir una frase por si quieres fortalecer la seguridad de tu clave. Por experiencia dejadla en blanco, terminaréis por olvidarla si no la apuntáis y tendréis que generar una nueva. El resto de líneas solo confirman que se han creado las claves con tu <em>figerprint </em>asociado. Ya estaría lista.</li>
</ul>



<h2 class="wp-block-heading">Consultando nuestra clave pública</h2>



<p>Ahora ya podremos ver nuestras claves generadas, si no hemos cambiado la ruta por defecto estará en una carpeta oculta dentro de la «home» de nuestro usuario llamada&nbsp;<strong>.ssh/</strong></p>



<p>Ahora tendríamos que ir a nuestra «home» en mi caso es&nbsp;<strong>/home/jmdlr</strong>&nbsp;y luego acceder a la carpeta oculta <em>.ssh</em>:</p>



<pre class="wp-block-code"><code>$ cd /home/jmdlr/
$ cd .ssh/
$ ls -lrth
total 8.0K
-rw------- 1 jmdlr jmdlr 3.2K Mar 30 00:42 id_rsa
-rw-r--r-- 1 jmdlr jmdlr  736 Mar 30 00:42 id_rsa.pub</code></pre>



<p>Veremos que tenemos dos ficheros que tienen por nombre&nbsp;<strong>id_rsa</strong>. Una de ellas es la clave privada (id_rsa) la cual&nbsp;<strong>NO</strong>&nbsp;tendremos que compartir y luego la clave pública (id_<a target="_blank" rel="noreferrer noopener" href="http://rsa.pub">rsa.pub</a>) que es la que subiremos a nuestro servidor o al servidor que deseemos acceder sin que nos solicite password. Echamos un vistazo a la clave pública:</p>



<pre class="wp-block-code"><code>$ cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDDGnQn+2Jld5Y/822sLmZc/1PC0+gm3ORtbRPEUvzuqMIMOVg2ImZPApj/d7+K57MP
y7pQDn/iwi3QkLzpf/tL9LXF2+FouzVsSeZgR1dd7+3QGTMPch+5hXZxuims+zZOLFuXqXzhb00TSMbH5yVBH1gv+qCZj7N/DvRgok+2
Fae1I+Fr0/7ALIaLfFEo5CYfrUNyfuD0ZpJ9GIrv6+sBWbCOomzuw5SMIccbX4VQ+DLmEoMwl3A3GQf3yNrAtjjolPm1zJ0YAd+Kr5UW
REugxTgLslnMHFVozPn5byuj2fT4dQPiB0Zj/mzQf+BWGaT+lI3P/P08mG0gdpD39MUiKGjh0XYbQQh731cnMJK1gTzphPyinROv4S/P
j1HFhSEAbsZJP9l/ZyVi1qupTOFocWEQf0o4yNsVpogDpUQJwEyG5ftQDsmjbHD5EQRMFXktnItdSqhbTVL+qSiB96Jd66CV9+bklUQb
p9w3pT0beZDrKQdPKmrlRYS2MeZB1z5kMnDTm/C1fSDHAuqYAxCyZTBc3ncBpzW7AnWczUdk0zIiToGVs8wE16suGWqlZA2gGLIkY3Ld
vAkzgm9HBIosgZVEPABN4nbMAqv/NqXJd2/e6cFICllX8YhyBcYL9OfwFPK6OUxQg0AKk/rJwSO6aGxDOIHVY16+DvwuQRx1SQ==jmdl
r@casa</code></pre>



<p>Ese texto es lo que tenemos que copiar en todos los servidores remotos a los que queramos conectar vía <em>ssh</em>, pero para hacerlo más fácil, existe un comando que nos ayudará a copiarlo.</p>



<h2 class="wp-block-heading">Copiando la clave pública al servidor</h2>



<p>Simplemente usaremos el siguiente comando desde la ruta donde tenemos nuestra claves.</p>



<pre class="wp-block-code"><code>$ cd /home/jmdlr/.ssh
$ ssh-copy-id -i id_rsa.pub usuario@IP_servidor_remoto</code></pre>



<p>Donde aparece&nbsp;<strong>usuario</strong>&nbsp;tendremos que poner nuestro nombre de usuario que utilizamos para acceder al servidor y donde aparece&nbsp;<strong>IP_servidor_remoto</strong>&nbsp;la dirección IP o el registro DNS que nos de acceso al servidor donde queremos añadir nuestra clave pública. En mi ejemplo, accediendo con mi usuario «jmdlr» sería así:</p>



<pre class="wp-block-code"><code>$ cd /home/jmdlr/.ssh
$ ssh-copy-id -i id_rsa.pub jmdlr@10.5.1.5</code></pre>



<p>Y si todo va bien me diría lo siguiente hasta preguntarme cual es mi&nbsp;<strong>password</strong>&nbsp;del usuario para acceder por primera vez:</p>



<pre class="wp-block-code"><code>/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys

jmdlr@10.5.1.5's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'jmdlrk@10.5.1.5'"
and check to make sure that only the key(s) you wanted were added.
</code></pre>



<p>En el paso que solicita el «password» tendremos que añadirlo y para la próxima vez que queramos acceder tendremos que hacer lo que indica más abajo, simplemente teclearemos&nbsp;<strong>ssh jmdlr@10.5.1.5</strong>&nbsp;y estaremos dentro sin solicitarnos contraseña alguna.</p>



<p>Espero que os haya sido fácil de seguir, cualquier cosilla preguntadme a través de Mastodon/Firefish o Bluesky:</p>



<ul class="wp-block-social-links is-layout-flex wp-block-social-links-is-layout-flex"><li class="wp-social-link wp-social-link-mastodon  wp-block-social-link"><a href="https://@jmdelosreyes@meetiko.org" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M23.193 7.879c0-5.206-3.411-6.732-3.411-6.732C18.062.357 15.108.025 12.041 0h-.076c-3.068.025-6.02.357-7.74 1.147 0 0-3.411 1.526-3.411 6.732 0 1.192-.023 2.618.015 4.129.124 5.092.934 10.109 5.641 11.355 2.17.574 4.034.695 5.535.612 2.722-.15 4.25-.972 4.25-.972l-.09-1.975s-1.945.613-4.129.539c-2.165-.074-4.449-.233-4.799-2.891a5.499 5.499 0 0 1-.048-.745s2.125.52 4.817.643c1.646.075 3.19-.097 4.758-.283 3.007-.359 5.625-2.212 5.954-3.905.517-2.665.475-6.507.475-6.507zm-4.024 6.709h-2.497V8.469c0-1.29-.543-1.944-1.628-1.944-1.2 0-1.802.776-1.802 2.312v3.349h-2.483v-3.35c0-1.536-.602-2.312-1.802-2.312-1.085 0-1.628.655-1.628 1.944v6.119H4.832V8.284c0-1.289.328-2.313.987-3.07.68-.758 1.569-1.146 2.674-1.146 1.278 0 2.246.491 2.886 1.474L12 6.585l.622-1.043c.64-.983 1.608-1.474 2.886-1.474 1.104 0 1.994.388 2.674 1.146.658.757.986 1.781.986 3.07v6.304z"/></svg><span class="wp-block-social-link-label screen-reader-text">Mastodon</span></a></li>

<li class="wp-social-link wp-social-link-bluesky  wp-block-social-link"><a href="https://@jmdlr.bsky.social‬" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M6.3,4.2c2.3,1.7,4.8,5.3,5.7,7.2.9-1.9,3.4-5.4,5.7-7.2,1.7-1.3,4.3-2.2,4.3.9s-.4,5.2-.6,5.9c-.7,2.6-3.3,3.2-5.6,2.8,4,.7,5.1,3,2.9,5.3-5,5.2-6.7-2.8-6.7-2.8,0,0-1.7,8-6.7,2.8-2.2-2.3-1.2-4.6,2.9-5.3-2.3.4-4.9-.3-5.6-2.8-.2-.7-.6-5.3-.6-5.9,0-3.1,2.7-2.1,4.3-.9h0Z"></path></svg><span class="wp-block-social-link-label screen-reader-text">Bluesky</span></a></li></ul>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://mindeka.es/2020/03/30/acceder-por-ssh-con-clave-publica/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
