# Configuración del servidor

En este capítulo vas a encontrar todos los artículos respecto a la preparación del servidor para cosas como:

- Exponerlo al internet público
- Instalarle los componentes necesarios para correr los servicios
- Y más

# El router

# Preparar nuestro router para conexiones externas
## Sinopsis
Cuando utilizamos una computadora como servidor, sea para acceder y depositar archivos o para acceder a servicios, normalmente la conectamos a nuestra red local de casa, gestionada por nuestro Router, el cual en muchos casos nos es proveído por nuestra empresa de internet (o ISP).<figure><a href="https://wiki.cuquiweb.xyz/uploads/images/gallery/2025-10/router.jpg"><img src="https://wiki.cuquiweb.xyz/uploads/images/gallery/2025-10/scaled-1680-/router.jpg" width=150></a><figcaption>El router polvoriento que me dio Fibertel</figcaption></figure>

---
### Para qué sirven los routers
Estos aparatos hacen varias cosas, entre ellas: Gestionan nuestra red local(permiten que nuestras computadoras y dispositivos se conecten entre sí), y nos permiten conectarnos a internet. Cada vez que cargamos una página o bajamos un video, nuestra computadora le está pidiendo a nuestro router que nos ponga en contacto con la máquina que tiene dicha página o video. En este sentido, el router es el punto único de conexión entre nuestras computadoras en nuestra casa y las demás computadoras del mundo conectadas a internet.

Además de esto, es a través del router otras computadoras de internet hablan con las nuestras. Normalmente esto ocurre cuando *nuestras* computadoras se ponen primero en contacto con una compu de afuera: Si queremos revisar el mail, cuando cargamos la página somos *nosotrxs* quienes pedimos a la compu de afuera que tiene nuestros mails guardados que nos los mande para que los podamos leer, por ejemplo.

Sin embargo, para poder acceder nuestra computadora desde afuera, necesitaríamos poder indicar de alguna forma al router, que recibiría la conexión, que "derive" el pedido de la computadora de afuera a una computadora en específico, en este caso nuestro servidor. De esta manera, cuando una computadora externa (como, por ejemplo, nuestro celular cuando no estamos conectadxs a la red wifi o local) se conecta [a nuestra IP pública](https://wiki.cuquiweb.xyz/books/guia-de-navegacion-de-altamar/page/direcciones-ip), nuestro router la guía a la IP local de nuestra red.

Por lo general, esto no es algo que nuestros routers hagan por defecto: Todas las comunicaciones que tenemos a interent, por defecto, las llevamos a cabo desde nuestra casa hacia afuera por cuestiones de seguridad. Para poder hacer que nuestro router "derive" estas conexiones cuando son originadas desde afuera, tenemos que indicarle que lo haga. Para esto vamos a redirigir conexiones a [puertos específicos](https://wiki.cuquiweb.xyz/books/guia-de-navegacion-de-altamar/page/puertos): Esto se llama hacer "port forwarding".

Al final del camino, esta secuencia de conexiones externas se vería de la siguiente forma:
<div drawio-diagram="11"><img src="https://wiki.cuquiweb.xyz/uploads/images/drawio/2025-10/drawing-3-1761513310.png"></div>

En la que una computadora de afuera se conecta con nuestro router a un cierto puerto; nuestro router, al detectar que se conectó a ese puerto, redirige la conexión a la IP local de nuestro servidor.

Hay dos cosas, entonces, que nos conviene hacer:
- Configurar nuestro router para exponer un puerto al exterior.
- Configurar nuestro router para que le de una IP local específica a nuestra computadora.

## Tutorial: Cómo configurar el router para exponer un puerto
Cuando queremos exponer la conexión de una de nuestras computadoras hacia el exterior, tenemos que configurar nuestro router. Esto, a veces, se puede hacer directamente desde la página de nuestro proveedor de internet, pero muchas veces no es el caso. Por este motivo, este tutorial se va a centrar en cómo hacerlo a través de nuestro router directamente.
<p class="callout warning">Esta sección es una de las más complejas, ya que los distintos modelos de routers y gateways suelen tener sus propias convenciones de nombres. Intento ser lo más exhaustivo que puedo, pero es posible que tengas que googlear un poco sobre tu router y proveedor de internet específico.</p>

### Acceder al router
Lo primero que tenemos que hacer es acceder a la página de configuración de nuestro router. Para esto, necesitamos obtener la IP local del router. Por lo general esta puede ser alguna de estas tres:
- 192.168.0.1
- 192.168.1.1
- 10.0.01

Si no te funciona ninguna de ellas, podés usar los siguientes comandos:
###### En Windows
En el "Símbolo de sistema"(CMD) de widnows, escribí el siguiente comando: `ipconfig`, y buscando la ip al lado de "Default Gateway"

###### En MacOS
En la terminal de mac(la podés abrir desde el spotlight), con el comando `netstat -nr | grep default`

###### En Linux
En la terminal de Linux, con el comando `netstat -r | grep default`

#### Login
Este es un punto potencialmente complejo. Por lo general, la mayoría de los routers nos los instalan con las credenciales por defecto, por lo que cosas como:

|Usuario|Contraseña|
|----|----|
|admin|admin|
|admin| |
| | admin|

... suelen funcionar, o incluso no llenar ninguno de los dos campos. Sin embargo, en el mío, por ejemplo, el usuario por defecto era `admin`, pero la contraseña era `cisco`. Recomiendo googlear algo como "cuál es la contraseña por defecto del router <modelo>". El modelo por lo general lo pueden encontrar impreso en algún lugar del propio router.

Por lo pronto, una vez que tengan esa información, pueden ingresar con su navegador a la página http://<ip del router>. En mi caso, por ejemplo, cuando ingeso a http://192.168.0.1, entro a la siguiente página:
[![Captura de pantalla 2025-10-26 a la(s) 6.49.04 p. m..png](https://wiki.cuquiweb.xyz/uploads/images/gallery/2025-10/scaled-1680-/captura-de-pantalla-2025-10-26-a-las-6-49-04-p-m.png)](https://wiki.cuquiweb.xyz/uploads/images/gallery/2025-10/captura-de-pantalla-2025-10-26-a-las-6-49-04-p-m.png)

Al ingresar la información de login vamos a poder ingresar al panel de control del router. En esta página, vamos a tener que buscar la sección de "Port Forwarding", que puede figurar de varias formas:
- En secciones como "Forwarding" o "Port Forwarding", a veces en subsecciones como "Virtual servers"
- En secciones como "Applications", o "Applications and gaming", ya que son cosas que se hacen normalmente cuando una persona quiere "hostear" un server de videojuegos.

En el caso de mi router, el menú en el que encontramos esto es el de "Applications & Gaming". El submenú donde encontramos la opción se llama "Port range forwarding". Fíjense que no siempre son exactos los nombres:

[![Captura de pantalla 2025-10-26 a la(s) 6.55.29 p. m..png](https://wiki.cuquiweb.xyz/uploads/images/gallery/2025-10/scaled-1680-/captura-de-pantalla-2025-10-26-a-las-6-55-29-p-m.png)](https://wiki.cuquiweb.xyz/uploads/images/gallery/2025-10/captura-de-pantalla-2025-10-26-a-las-6-55-29-p-m.png)

En este menú, podemos ver cómo le puedo indicar al router, cuando recibe una conexión externa en un puerto específico(en mi caso un rango de puertos), que la redirija a una IP local en particular.

Al hacer esto, cuando alguien se quiera conectar a nuestra IP, y lo haga en un puerto en particular(todas las conexiones ocurren en un puerto), nuestro router la redirige a una ip, idealmente la de nuestro server. Por otro lado, también nos puede ser útil configurar nuestra computadora para que tenga una IP local específica, ya que si no, por defecto, cada vez que se vuelva a conectar a la red(cuando la reiniciemos, por ejemplo) nuestro router le va a asignar una nueva IP.

## Tutorial: Cómo configurar la computadora para tener una IP estática

Este tutorial, por suerte, es mucho más simple, ya que se puede hacer desde la computadora misma: Simplemente tenés que ir a la configuración de tu red(que, por lo general, es la configuración de la *conexión* a la red que estás conectadx), buscar el menú de IPv4, seleccionar modo Manual, y agregar una ip que esté en el rango de tus ips locales(por ejemplo, si tu router está en `192.168.0.1`, cualquier ip entre '192.168.0.2` y `192.168.0.255` debería estar bien).

Dejo [un tutorial](https://www.geeksforgeeks.org/linux-unix/assign-an-ip-address-on-a-linux-computer/) de cómo hacerlo en linux, pero por lo general esto es bastante simple. *Si vas a googlear cómo hacerlo en linux*, te recomiendo googlear cómo hacerlo *en tu distribución en específico*: Es mejor buscar "how to set local static ip address in ubuntu/mint" que "how to set local static ip address in linux". De todos modos, el proceso es bastante similar en casi todos los sistemas operativos.

# Adquisición y configuración de dominios

En esta página voy a explicar el proceso de alquilar un dominio y de "apuntarlo" a nuestra IP pública para facilitar el acceso externo a nuestro servidor.

<p class="callout danger">Esta sección no fue escrita todavía</p>

# Preparar el sistema operativo

Esta página tiene como fin enseñar a instalar Linux en nuestro futuro servidor. Las guías se encuentran más abajo. Arriba, primero, un poco de contexto:

<p class="callout danger">Esta sección no fue terminada todavía.</p>

### Qué es Linux?
Linux (o, mejor dicho, GNU/Linux) es un sistema operativo. Esto significa que es una serie de "programas" y "herramientas" armadas para servirnos para interactuar con nuestra computadora. Un programa para copiar un archivo en otro lugar, un programa para crear un archivo, etc. No son "programas" como un navegador de internet. Un navegador de internet suele usar varios de estos "programas básicos" para cosas como: Conectarse con otra computadora, descargar la página web y escribirla en nuestro disco, leer el contenido de esa copia para poder visualizarlo.

Un sistema operativo, esencialmente, es la capa que está entre el mundo digital de unos y ceros y el usuario, sobre el cual corren todos los programas que normalmente usamos en nuestro día a día. Cuando corremos, por ejemplo, un navegador de internet, el programa habla con el sistema operativo, y es este último el que actúa de intermediario y le dice a la computadora "qué hacer", qué cuentas hacer, qué píxeles de la pantalla prender, etc.

GNU/Linux es un sistema operativo ya con muchos años que, a diferencia de Windows o MacOS, que son sistemas de "código cerrado", es de "código abierto": Esto significa que, por un lado, todo el mundo puede ver cómo fue armado, y por lo tanto se puede corroborar más allá de cualquier nivel de conifanza qué pasa "abajo del capó" cuando corre. Por el otro lado, también significa que estos proyectos son de índole colaborativa: Cualquiera a quien le interese puede "sumarse" y aportar código, sean funcionalidades nuevas, arreglo de bugs, o lo que sea.

GNU/Linux suele venir en "distribuciones", o "distros", que son "paquetes" que se arman sobre esta base del sistema operativo con varios componentes extra comunmente usuados en el día a día, como un gestor de paquetes(app store, en resumen), un reproductor de vídeo, una interfaz visual para lx usuarix, etc. Estas distribuciones, estos "empaquetamientos" de linux, suelen mantener su filosofía de software libre, aunque no siempre es así, y no siempre lo hacen en la misma medida (Ubuntu, por ejemplo, a veces usa código "cerrado" en cosas como los drivers de placas de video, etc.). Varios distros conocidos y muy usados incluyen:
- Ubuntu
- Linux Mint
- Fedora
- Arch

Cada uno con su propia idiosincracia, pero siempre con la "base de programas" de GNU/Linux (los mismos programas para copiar archivos, para moverlos, etc)


### Por qué linux?
Quizás quienes lean esta guía estén acostumbradxs a utilizar en el día a día otros sistemas operativos como Windows o MacOS. Estos suelen ser una opción elegida con frecuencia por estar pensados para ser utilizados en computadoras de uso personal, y suelen ser los entornos que estamos acostumbradxs a usar en el día a día. Hay varios motivos por los que elegir Linux, como [el hecho de que Windows recolecte por defecto un montón de información privada sobre cómo lo usás](https://www.pcworld.com/article/2379675/ways-windows-11-collects-your-data-and-what-you-can-do-about-it.html). En este caso, sin embargo, voy a enumerar un par de criterios, *algunos de elección personal* y otros más objetivos, por los que elijo escribir esta guía usando un entorno de Linux:
- **Es gratis**: Los sitemas operativos de Linux son gratuitos. Si bien esta es una guía de altamar, la connotación que esto tiene también es una práctica: Cuando Windows "se da cuenta" de que tenés instalada una versión "no oficial", puede ponerse bastante gede.
- **Es libre**: Esto no sólo significa que es gratis, sino que también es una alternativa creada colaborativamente, en la que el código, cómo está hecha cada cosa, es abierto. Esto implica que quien quiera pueda mirarlo y asegurarse de que no pasa anda raro, como que te roben datos o usen recursos de tu computadora para minar crypto. Esto no significa que sea infalible; pueden haber virus en cualquier sistema operativo, y en muchos casos las aplicaciones de código abierto no son lo suficientemente grandes como para que sean revisadas por suficiente gente como para que sean 100% seguras. Pero en muchos casos los proyectos son lo suficientemente grandes como para que esto pase, y además, *considero ideológicamente* que la filosofía del [Software Libre](https://es.wikipedia.org/wiki/Software_libre_y_de_c%C3%B3digo_abierto) es ampliamente mejor que la del software cerrado y con fines de lucro para la humanidad.
- **Es mejor para los servers**: Linux es el sistema operativo utilizado por la mayoría de los servers del mundo. Los programas que vamos a usar, como Docker, suelen funcionar mejor en Linux porque, en este caso, *la máquina por defecto en la que se piensa cuando piensan estos programas corre Linux*.
- **Es mejor para nuestra alfabetización digital**: Estar en contacto con las cosas que vamos a estar armando contribuye mucho a poder entender mejor qué pasa en las computadoras cada vez que usamos un servicio como Netflix, Whatsapp, o cualquier cosa. Creo que entrar en contacto con estos conceptos, y "por ósmosis" ir entendiendo lo que pasa detrás, contribuye a la soberanía que tenemos sobre nuestra información(además, obvio, de la soberanía que queremos tener sobre nuestros medios y cómo los consumimos).

# Guía: Preparación de nuestro server Linux

## Instalar Linux
Instalar linux parece algo súper intimidante, pero la realidad es que es un proceso que se fue haciendo mucho más fácil en los últimos años de lo que creeríamos. Hay una cosa muy importante a tener en cuenta al hacerlo, que es que:
<p class="callout danger">Al instalar linux siguiendo estos pasos, vas a estar borrando por completo toda la información que tengas almacenada en la computadora que estés transformando en server, por lo que es muy importante que antes de hacerlo <b>copies toda la información importante (fotos, videos, documentos)</b> que no quieras perder en algún otro lado (como en tu computadora principal).</p>

Teniendo esto en cuenta, los pasos en sí son muy tranquilos y seguros. Repasemos cuáles son. Ante todo, vamos a necesitar:
- Una copia del sistema operativo
- Una memoria USB (donde entre dicha copia; la de ubuntu, por ejemplo, es de 3 GBs, así que con cualquier memoria más grande estamos bien)
- Una computadora a la que instalarle el sistema operativo :p

### Armar el "Live USB"
Lo primero que vamos a tener que hacer va a ser conseguir una copia del sistema operativo que queramos instalar. En este caso, vamos a usar una distribución de Ubuntu. Ubuntu tiene algunas polémicas respecto a hacia adónde apunta la compañía en sí, y el hecho de querer usar bastante software propietario (no de código libre) en cosas como los drivers, pero a su vez es uno de los sistemas operativos más usados por lejos para armar un server, lo cual hace muy fácil googlear ante cualquier problema que tengamos.

Ante todo, vamos a necesitar descargar la edición para servidores de Ubuntu, que encontramos [aquí](https://ubuntu.com/download/server). Recomiendo bajar la última opción disponible, por lo general (la última que nos muestra por defecto es la última "LTS" (Long Term Support), es decir la última versión *estable* y con soporte activo de por lo menos 5 años (después de los cuales podemos seguir usando esa versión, sólo no va a ser soportada por *Canonical*, la empresa de Ubuntu. Las soluciones vendrían de otrxs usuarixs o unx mismx).
[![descargar_ubuntu_server.png](https://wiki.cuquiweb.xyz/uploads/images/gallery/2025-12/scaled-1680-/captura-de-pantalla-2025-12-18-a-las-6-16-51-p-m.png)](https://wiki.cuquiweb.xyz/uploads/images/gallery/2025-12/captura-de-pantalla-2025-12-18-a-las-6-16-51-p-m.png)

Una vez que se termine la descarga, vamos a tener un archivo `.iso`, con un nombre similar a `ubuntu-24.04.03-live-server-amd64.iso` (los números pueden cambiar con distintas versiones, por ejemplo). Este archivo vamos a necesitar montarlo en un USB, de forma que la computadora entienda que es un "disco" desde el cual instalar el sistema operativo. En este tutorial vamos a usar un programa para esto llamado [Balena Etcher](https://etcher.balena.io/#download-etcher), pero hay varias otras alternativas también. Si no te funciona el Balena, podés encontrar tutoriales con varios programas [acá](https://documentation.ubuntu.com/desktop/en/latest/how-to/create-a-bootable-usb-stick/).

El proceso es simple:
1. Abrimos el programa y seleccionamos "Flash from file"
[![balena_flash_file.png](https://wiki.cuquiweb.xyz/uploads/images/gallery/2025-12/scaled-1680-/captura-de-pantalla-2025-12-18-a-las-6-59-38-p-m.png)](https://wiki.cuquiweb.xyz/uploads/images/gallery/2025-12/captura-de-pantalla-2025-12-18-a-las-6-59-38-p-m.png)
2. Seleccionamos la memoria objetivo (en este caso, el USB)
[![balena_target.png](https://wiki.cuquiweb.xyz/uploads/images/gallery/2025-12/scaled-1680-/captura-de-pantalla-2025-12-18-a-las-7-02-29-p-m.png)](https://wiki.cuquiweb.xyz/uploads/images/gallery/2025-12/captura-de-pantalla-2025-12-18-a-las-7-02-29-p-m.png)
<p class="callout warning">Prestá atención a que el tamaño del dispositivo que elijas sea en efecto el tamaño de la memoria que tenés, así te asegurás de quemar el .iso en el lugar correcto. Si por error eligieses el dispositivo donde está tu sistema operativo (tu disco rígido), podría traer muchos problemas! De todos modos, normalmente no están visibles estos dispositivos de entrada. Pero tené cuidado igual por las dudas.</p>

[![balena_target_seleccionado.png](https://wiki.cuquiweb.xyz/uploads/images/gallery/2025-12/scaled-1680-/captura-de-pantalla-2025-12-18-a-las-7-02-44-p-m.png)](https://wiki.cuquiweb.xyz/uploads/images/gallery/2025-12/captura-de-pantalla-2025-12-18-a-las-7-02-44-p-m.png)
3. Seleccionamos `Flash!` y esperamos a que termine.

Una vez terminado, ya tenemos nuestro dispositivo USB listo para instalar linux.

### Instalar Linux en la computadora
#### Preparación
Para hacer esto, vamos a necesitar hacer un par de cosas antes de arrancar, idealmente ambas con la compu apagada:
- Enchufar el USB a la computadora
- Enchufar la computadora a la red. Si bien se puede hacer a través de wi-fi, es mucho más fácil y rápido tener la compu enchufada a nuestro [router](https://wiki.cuquiweb.xyz/books/guia-de-navegacion-de-altamar/page/el-router).

Para el segundo ítem, fijate que tu router seguro tiene un par de enchufes para cables de LAN numerados (pueden ser sólo los números, tipo 1, 2, 3, 4, o pueden estar etiquetados como "Lan 1, Lan 2", etc, o "Local 1, Local 2"). Con enchufar el cable a cualquiera de esos puertos estás.

#### Instalación - Acceder al BIOS
Lo primero que vamos a tener que hacer es acceder al BIOS de la computadora. Este es como un "mini-sistema operativo" que todas las computadoras tienen, pensado específicamente para poder hacer cosas "por debajo" del sistema operativo que usamos siempre, como, por ejemplo, instalar otros sistemas operativos a la computadora. Para acceder al BIOS, por lo general, es necesario apretar una tecla en un momento apenas después de iniciar la computadora. Muchas veces la computadora tiene algún texto cuando aparece el logo de la marca que dice "Acceder al BIOS" o "Setup" o cosas por el estilo, y pide presionar alguna tecla (por lo general una de las "F", como "F2" que es de las más comunes, a veces "Esc" también puede ser). Si no encontrás este cartel, te recomiendo googlear el modelo de tu computadora en algo del estilo "How do I access the BIOS in \<modelo de computadora\>". Como teclas básicas para probar, te recomiendo F2, Esc, y F12, en ese orden. Por otro lado, como la ventana de tiempo para apretarlas es muy específica, recomiendo que las presiones repetidamente:

<video src="https://wiki.cuquiweb.xyz/attachments/1?open=true" controls width="480" height="270"></video>

#### Instalación - cambiar el orden de prioridad de booteo
A la hora de iniciar la computadora (lo cual también se suele llamar "bootear", o "to boot" en inglés), el BIOS busca una instalación de algún sistema operativo para iniciar. Normalmente, esto lo hace primero buscando en el disco rígido, y si no encuentra ningún sistema operativo va viendo si hay algún dispositivo externo que tenga una instalación, como un pendrive o un CD. Para instalar el nuevo sistema operativo, vamos a tener que, desde el BIOS, poner como primer lugar a buscar el sistema operativo a los puertos USB, así detecta nuestro pendrive con el Live USB antes de la instalación que ya tenemos en el disco duro.

Para hacer esto, vamos a tener que buscar en el BIOS de nuestra computadora una sección que suele ser llamada "Boot Sequence", o "Boot Setup", o algo por el estilo. Abajo incluyo un video, pero es importante acá tener en cuenta que los BIOS suelen tener pequeñas diferencias en sus nombres, así que vas a tener que buscar por tu cuenta la sección que señala de dónde "bootea" la computadora.

<video src="https://wiki.cuquiweb.xyz/attachments/2?open=true" controls width="480" height="270"></video>

#### Instalación - Instalar Linux
Una vez que cambiamos el orden de prioridad de booteo, si apagamos y encendemos la computadora con el USB conectado, va a pasar directamente (después de mostrarnos varios mensajes del proceso de arranque) a un menú de selección de qué "sistema operativo" queremos lanzar:

[![grub.jpg](https://wiki.cuquiweb.xyz/uploads/images/gallery/2025-12/scaled-1680-/grub.jpg)](https://wiki.cuquiweb.xyz/uploads/images/gallery/2025-12/grub.jpg)

De ahí, seleccionamos con `Enter` la opción de instalar Ubuntu, lo cual nos lleva directamente a la primera pantalla de instalación de Ubuntu (luego de un poco de texto de mensajes de inicio):

[![ubuntu_install1.jpg](https://wiki.cuquiweb.xyz/uploads/images/gallery/2025-12/scaled-1680-/ubuntu-install1.jpg)](https://wiki.cuquiweb.xyz/uploads/images/gallery/2025-12/ubuntu-install1.jpg)

De ahora en más, es sólo seguir los pasos de la instalación, sin embargo, un par de consideraciones importantes.
Luego de elegir el tipo de teclado, nos va a ofrecer instalar Ubuntu Server o Ubuntu Server(minimized). Dejamos esto como está, pero nos importa la opción de más abajo: **Search for third-party drivers**. Ya que no sabemos de entrada si nuestra computadora tiene componentes de hardware que son "propietarios", es decir, cuyos drivers no son de código abierto, nos conviene **marcar esta opción** por las dudas.

La siguiente consideración importante llega en la sección de **Network Configuration**. Aquí vamos a querer hacer que nuestra computadora pida una **IP estática** a nuestra red. Si no, cada vez que la reiniciemos va a cambiar su dirección,y esto podría complicarnos las cosas. Para hacer esto seleccionamos los siguientes menúes:

<video src="https://wiki.cuquiweb.xyz/attachments/3?open=true" controls width="480" height="270"></video>

Una vez nos encontramos en el formulario, los datos son los siguientes:

[![network_datos.jpg](https://wiki.cuquiweb.xyz/uploads/images/gallery/2025-12/scaled-1680-/network-datos.jpg)](https://wiki.cuquiweb.xyz/uploads/images/gallery/2025-12/network-datos.jpg)

<p class="callout warning">Tené cuidado, los datos pueden variar dependiendo de cómo está configurada tu red</p>

Para poder ingresar bien tus datos, lo ideal sería que averigües la IP de tu router. Una vez que la tenés, esencialmente, la configuración sería la siguiente, pensándola por ejemplo con una IP de router de 10.0.2.1:

- Subnet: 10.0.2.0/24 (fijate que cambié el último dígito por un 0 y agregué el "/24")
- Address: 10.0.2.x (en lugar de x, poné el número de IP que vas a querer usar para acceder al servidor)
- Gateway: 10.0.2.1 (la IP del router)
- Nameservers: 8.8.8.8,1.1.1.1 (esto lo dejamos igual)

Luego, cuando nos pregunta si queremos usar un proxy, lo dejamos en blanco *(a menos que sepas qué es esto y quieras usarlo, claro)*.

La siguiente pantalla también es una que tenemos que dejar como está si no sabemos del tema:
[![ubuntu_mirror.jpg](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/scaled-1680-/ubuntu-mirror.jpg)](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/ubuntu-mirror.jpg)

En este caso, tenemos que esperar a que tengamos el mensaje que figura en la imagen de `This mirror location passed tests.`(que, obviamente, no va a estar disponible cuando recién lleguemos a la pantalla.

En la siguiente pantalla, nos vamos a cerciorar de que estemos instalando el LVM (Live Volume Manager). Esta aplicación ahora mismo no la vamos a usar, pero si en el futuro queremos agregar más memoria a nuestro servidor (usando, por ejemplo, un disco rígido externo), nos va a venir bien.
[![ubuntu_lvm.jpg](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/scaled-1680-/ubuntu-lvm.jpg)](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/ubuntu-lvm.jpg)

En la siguiente pantalla, vamos a poder configurar cuánto espacio de nuestra computadora le dedicamos a cada partición (segmento del disco rígido); por ahora podemos dejar las opciones como están y seguir.

<p class="callout danger"><b>El siguiente lugar, la sección titulada <code>SSH configuration</code>, es muy importante</b></p>
En la siguiente sección, vamos a asegurarnos de que la opción de instalar el server OpenSSH (Install OpenSSH server) esté <b>marcada</b>.

[![ubuntu_ssh_config.jpg](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/scaled-1680-/ubuntu-ssh-config.jpg)](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/ubuntu-ssh-config.jpg)

Luego de esta pantalla, vamos a tener un par más, incluyendo una en la que nos va a ofrecer instalar "snaps", un tipo de paquete ("paquetes" básicamente son apps) de Ubuntu, pero no le vamos a dar bola y no vamos a instalar nada. Finalmente, llegamos a la pantalla de instalación, donde nos va a aparecer mucho texto al que esencialmente no le tenemos que prestar atención. La instalación puede tomar un rato, dependiendo de la compu, así que es un buen momento para hacerse un mate o poner a lavar la ropa.

[![ubuntu_instalando.jpg](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/scaled-1680-/ubuntu-instalando.jpg)](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/ubuntu-instalando.jpg)

[![ubuntu_instalacion_finalizada.jpg](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/scaled-1680-/ubuntu-instalacion-finalizada.jpg)](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/ubuntu-instalacion-finalizada.jpg)

Una vez finalizada la instalación (**nos va a figurar un mensaje del estilo "Instalation Complete" en la barra roja**), vamos a tener la opción de reiniciar (reboot) la computadora. Cuando lo hagamos, ya vamos a haber terminado la instalación! Al reiniciar, nos va a figurar un mensaje pidiéndonos que quitemos el USB desde el que instalamos el sistema operativo, y aprentemos Enter:

[![ubuntu_remove_medium.jpg](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/scaled-1680-/ubuntu-remove-medium.jpg)](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/ubuntu-remove-medium.jpg)

Y listo! El sistema se va a reiniciar con Ubuntu. La primera vez que se inicie, nos va a aparecer mucho texto, y va a parecer que no inició; es cuestión de apretar "Enter" nada más.

[![ubuntu_primer_startup.jpg](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/scaled-1680-/img-5006.jpg)](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/img-5006.jpg)

Ya estamos! Lo que sigue, ahora, sería [ajustar un par de cosas **en caso de ser una notebook**](https://wiki.cuquiweb.xyz/books/guia-de-navegacion-de-altamar/page/configuraciones-especificas-de-notebooks), y luego, para la mayoría de los proyectos de esta página, al menos, [instalar docker y docker compose](https://wiki.cuquiweb.xyz/link/12#bkmrk-instalar-docker-y-do).

Felicitaciones, ahora sos un ñoñx de Linux! De ahora en más, podés guardar tu servidor en donde sea que lo vayas a tener guardado (si es una laptop, fijate de entrar al link de arriba porque cuando la cierres probablemente se suspenda y no puedas acceder desde afuera para usarla); todo el trabajo que hagamos en adelante lo podemos hacer a través de [ssh](https://wiki.cuquiweb.xyz/link/17). También, para una interfaz gráfica más cómoda para alguna gente, podemos instalar [cockpit](https://wiki.cuquiweb.xyz/link/20#bkmrk-page-title). De todos modos, aprender a manejar ssh sigue siendo algo importante para manejar tu servidor.

<p class="callout warning">Es importante que guardes tu server en algún lugar con espacio o, idealmente, fresco. Si tiene algún tipo de ventilación es ideal, ya que las computadoras pueden levantar temperatura y si el entorno no ventila un poco, puede traer problemas. Existen "cajas" para guardar servidores con venitladores, pero con guardarlo en algún espacio abierto o en algún estante grande está bien.</p>

## Instalar python
Afortunadamente, la mayoría de los distros de linux incluyen una versión de Python ya instalada. Podemos chequear si tenemos python usando el siguiente comando en la terminal: `which python3`

Si python ya está instalado, obtendremos un resultado del estilo:

[![Captura de pantalla 2025-10-27 a la(s) 1.29.06 a. m..png](https://wiki.cuquiweb.xyz/uploads/images/gallery/2025-10/scaled-1680-/captura-de-pantalla-2025-10-27-a-las-1-29-06-a-m.png)](https://wiki.cuquiweb.xyz/uploads/images/gallery/2025-10/captura-de-pantalla-2025-10-27-a-las-1-29-06-a-m.png)


<p class="callout warning">Es importante usar el comando <code>python3</code> y no <code>python</code> a la hora de revisar esto.</p>
En caso de no obtener un resultado del estilo, significa que no tenemos una instalación de python en la computadora. De ser así, para instalarlo en Linux Mint, Debian o Ubuntu, podemos usar el comando `sudo apt update`y luego `sudo apt install python3`. Python ahora estará instalado.

Además de python3, vamos a necesitar pip3, el gestor de paquetes de python(esencialmente la manera de descargar e "instalar" programas de python). La instalación es similar: Primero revisamos si lo tenemos con `which pip3`. Si no obtenemos ningún mensaje en consecuencia de la índole de `/usr/bin/pip3`, ejecutamos `sudo apt update` y `sudo apt install python3-pip`.

## Instalar docker y docker compose

<p class="callout info">Esta sección es, esencialmente, una versión condensada de la [documentación oficial de Docker](https://docs.docker.com/engine/install/ubuntu/) respecto a la instalación del mismo en Ubuntu. Si querés, podés seguir las instrucciones oficiales de ahí, que van a ser más detalladas y completas.</p>

Para instalar docker, lo primero que vamos a tener que hacer va a ser *verificar que no tengamos una versión de docker pre-instalada* en nuestra distribución de Linux, ya que puede traer problemas de compatibilidad en el futuro. Para eso, debemos correr el siguiente comando:

`sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc | cut -f1)`

(Vale aclarar que es posible que [apt](https://wiki.cuquiweb.xyz/link/18#bkmrk-page-title), el programa que corremos con ese comando, nos indique que no desinstaló nada ya que no había una versión previa instalada)

Una vez hecho esto, vamos a instalar docker usando apt también, así cada vez que actualizamos nuestros paquetes se actualiza a su vez docker. Para esto, primero vamos a tener que agregar el repositorio de docker a apt, copiando *todos* los siguientes comandos juntos, pegándolos en la consola, y apretando `Enter`:

```
# Agrega la llave GPG oficial de Docker:
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Agrega el repositorio a las fuentes de apt:
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Signed-By: /etc/apt/keyrings/docker.asc
EOF

sudo apt update
```

Luego, para finalmente instalar docker, debemos ejecutar el siguiente comando:

```
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
```

Una vez corrido esto, docker debería estar instalado. Para verificar que esté corriendo (cosa que debería pasar automáticamente), vamos a correr el siguiente comando:

`sudo systemctl status docker`

Si figura como *active (running)*, significa que ya está corriendo:

[![dockerd_running.png](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/scaled-1680-/captura-de-pantalla-2026-01-21-a-las-4-19-57-p-m.png)](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/captura-de-pantalla-2026-01-21-a-las-4-19-57-p-m.png)

<p class="callout info">Para salir de esta "pantalla" de información, podés apretar <code>q</code>.</p>

Si no figura como *active(running)*, tenemos que iniciarlo manualmente, escribiendo:

`sudo systemctl start docker`

Por último, vamos a verificar que la instalación funcionó bien corriendo:

`sudo docker run hello-world`

Debería mostrarnos algo por el estilo:

[![docker_hello-world.png](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/scaled-1680-/captura-de-pantalla-2026-01-21-a-las-4-23-29-p-m.png)](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/captura-de-pantalla-2026-01-21-a-las-4-23-29-p-m.png)

Y listo! Si esto te funcionó así, significa que ya tenés instalado y corriendo docker. Ya podés pasar al siguiente paso de la guía!

# El Reverse Proxy

## Qué es un reverse proxy?

### Sinopsis
En el artículo sobre [el router](https://wiki.cuquiweb.xyz/books/guia-de-navegacion-de-altamar/page/el-router) hablamos sobre cómo, cuando una computadora de afuera quiere conectarse con nuestro servidor, el router se encarga de "dirigir" la compu de afuera a nuestro server en la red local. Si nuestro server sólo proporciona un servicio, esto es ideal: Alguien se conecta, por ejemplo, a `https://paginapirincho.com` y pirincho, que en su server tiene un netflix privado, "sirve" ese contenido.

Pero qué pasa si, por ejemplo, la misma computadora sirve un netflix privado y, además un blog de cocina? `https://peliculas.paginapirincho.com` debería llevarnos al netflix, y `https://blog.paginapirincho.com` al blog. Pero si están en la misma computadora, el router "dirige" pedidos de ambas páginas hacia la misma computadora. Cómo sabe la computadora qué servicio servir? Para esto existen los **reverse proxies**.

### Paso a paso
Un reverse proxy es un programa que ponemos al frente de nuestra computadora, que recibe todos los pedidos que vayan a esa compu, y se encarga de "dirigirlos", igual que el router, pero a nivel interno de la computadora. Además de esto, el reverse proxy cumple varias funciones de seguridad para nuestro server y para la gente que lo usa, y también nos resuelve algunas complejidades vinculadas con el problema (que quizás ya notaron, o quizás no) de no poder acceder cómodamente a páginas que no tengan "https" en lugar de "http" en la dirección (para más data, googlea "TLS" o "SSL", pero te advierto que es un tema complejo).

El esquema terminaría siendo algo así:

<div drawio-diagram="16"><img src="https://wiki.cuquiweb.xyz/uploads/images/drawio/2025-11/drawing-3-1762013514.png"></div>

Lo que pasaría, entonces:
- Computadora externa se conecta a nuestra IP pública pidiéndo la página `https://blog.paginapirincho.com`.
- Nuestro router recibe la conexión externa (en el puerto predeterminado que usamos para conexiones de http o https, las conexiones que usan nuestros navegadores de internet, que son el 80 y el 443) y la redirige a la dirección interna de nuestro server, pasándo el pedido de la página `https://blog.paginapirincho.com`.
- Dentro de nuestro servidor, nuestro reverse proxy recibe ese pedido en el puerto predeterminado (80 o 443, ambos se usan, y nuestro reverse proxy "presta atención" o "escucha" a ambos puertos), busca en su configuración las instrucciones de qué hacer con esa página, encuentra que hay que redirigir hacia el puerto 3000 y lo hace. Le pide al programa del blog que le dé el blog, el programa se lo da al reverse proxy, que se lo da al router, que finalmente le llega a la computadora, externa.

## Guía: Instalar y configurar mi reverse proxy
### Qué es Caddy?
[Caddy](https://caddyserver.com/) es una aplicación de servidor de código abierto. Un programa "servidor" es esencialmente eso: Un programa que, cuando le hablan, sirve contenido. En este caso, lo vamos a utilizar para que sirva contenido actuando como "reverse proxy": No le vamos a dar el contenido directamente, sino que le vamos a pedir que "redirija" las conexiones a las aplicaciones que corramos en nuestro server y obtenga el contenido desde ahí.

<p class="callout warning">Para utilizar caddy, es muy recomendable que hayas ya configurado <a href="https://wiki.cuquiweb.xyz/books/guia-de-navegacion-de-altamar/page/adquisicion-y-configuracion-de-dominios">un dominio</a> para tus servicios</p>

### Instalación
<p class="callout info">Como en todos los tutoriales de esta guía, la instalación va a ser en sistemas Linux; específicamente, en sistemas de tipo "debian", como Debian, Ubuntu, o Linux Mint</p>
Instalar Caddy, por suerte, es muy fácil (por lo menos, lo es en Linux ;) ). Simplemente corré los siguientes comandos en una consola o terminal:

```bash
sudo apt update
sudo apt install caddy
```

<p class="callout warning">Recordá que, cuando uses comandos con [sudo](https://wiki.cuquiweb.xyz/link/14#bkmrk-sudo), el sistema operativo va a pedirte la contraseña, ya que estás instalando programas como administradorx.</p>

En caso de que no funcione, las [instrucciones oficiales](https://caddyserver.com/docs/install#debian-ubuntu-raspbian) indican estos comandos:

```bash linenums="1"
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
chmod o+r /usr/share/keyrings/caddy-stable-archive-keyring.gpg
chmod o+r /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy
```

Una vez que lo instalaste, fijate si está corriendo ya con el comando `systemctl status caddy`. Esto debería abrirte un cuadro similar a esto:

[![systemctl status caddy](https://wiki.cuquiweb.xyz/uploads/images/gallery/2025-11/scaled-1680-/captura-de-pantalla-2025-11-01-a-las-5-15-39-p-m.png)](https://wiki.cuquiweb.xyz/uploads/images/gallery/2025-11/captura-de-pantalla-2025-11-01-a-las-5-15-39-p-m.png)

<p class="callout info">Para volver a la consola, probá apretar <code>q</code> </p>

Si te indica que no está activo, lo podés poner a andar escribiendo `sudo systemctl start caddy` (notá que este comando *lleva sudo*).

### Configuración
Dejo dos maneras de configurar caddy. La primera es la más simple. Si sólo vas a tener un servicio o dos corriendo en tu servidor, esta te puede alcanzar. Sin embargo, a medida que se agreguen servicios, puede llegar a complicar un poco la lectura y modificación de la configuración. Para esto, vamos a usar una segunda propuesta, un poco más avanzada y que requiere un par de pasos más, pero más estructurada y fácil de leer y modificar.

#### Puntos en común
##### El archivo `Caddyfile`
Si bien vamos a ver dos formas de armar nuestra configuración de caddy, ambas comparten un par de principios. El primero es que caddy guarda su configuración en el directorio `/etc/caddy/`, en un archivo llamado `Caddyfile`. En este archivo vamos a poder encontrar todas las "directivas" para el programa: Es decir, la "tablita" que el programa lee para ver qué hacer con cada dirección que reciba. Si no figura acá, el programa no va a hacer nada, y no va a "servir" ningún contenido.

Para abrir el archivo, primero debemos movernos al directorio de la configuración con el comando `cd /etc/caddy` (nótese la barra diagonal al  comienzo de la dirección, esto es importante). De esta forma, todas las cosas que hagamos se van a llevar a cabo en este directorio.

Una vez en el directorio apropiado, vamos a abrir el Caddyfile con el comando `sudo nano Caddyfile`. Este comando nos va a abrir un editor de texto on el que vamos a poder editar el archivo. Ya que es un archivo del sistema, y no del usuario en específico, necesitamos utilizar `sudo` al comienzo del comando.

Cuando terminemos de editar el archivo, vamos a poder guardarlo con `Ctrl+o` (apretamos enter para confirmar que el nombre del archivo sigue siendo el mismo), y lo cerramos con `Ctrl+x`.

##### Aplicar cambios
Cada vez que actualicemos nuestro  Caddyfile, nuestro archivo de configuración, para implementar sus cambios vamos a tener que escribir el comando `sudo systemctl reload caddy`. Si no nos dice nada, significa que se reinició bien. Si no, nos va a tirar un error. Es muy importante prestar atención a tener los archivos en el caddyfile "bien escritos"; si nos comemos algún símbolo, es muy posible que nos tire un error.

##### Ejemplo de Caddyfile
En un Caddyfile, unx escribe "bloques" de indicaciones para cada dominio y subdominio, por ejemplo:

```Caddyfile
blog.midominio.com {
  <qué "sirvo" para este dominio
}
```

Observemos el formato: Primero va el dominio, un espacio, y luego, entre llaves `{}`, qué hacer con las conexiones a ese dominio.
#### Configuración básica
Para nuestra configuración básica, vamos a escribir un Caddyfile que directamente va a contener los bloques de cada dirección a la que queremos que se pueda conectar la gente de afuera. En este ejemplo, voy a escribir un archivo Caddyfile que contendría dos servicios: Un blog en el puerto 3000, y un "netflix privado" en el puerto 8096:

```Caddyfile
blog.midominio.com {
  reverse_proxy localhost:3000
}

neflis.midominio.com {
  reverse_proxy localhost:8096
}
```

Nótense dos cosas: La dirección "localhost" es una dirección que refiere a que el servicio se encuentra en la misma computadora, en otro puerto (ya que Caddy "escucha" en los puertos estándar de conexión de internet http, `80`y `443`). (Sí, esto significa que podemos hacer que un dominio x sea "redirigido" mediante reverse proxy a otra IP o dominio *externos a nuestro server*, pero esto es mucho más avanzado y probablemente no lo necesitemos nunca).

Por otro lado, los dos puntos indican qué puerto servimos: En el caso del "netflix", que corre "atendiendo" el puerto 8096, usamos `localhost:8096`. Esto funciona en un navegador también. Si ponemos `https://undominio.com:8000`, estamos indicando que nos queremos conectar al puerto 8000 de la computadora conectada a ese dominio. Cuando no aclaramos nada, por defecto "pide" el puerto 443 (y, a veces, el puerto 80).

Una vez escrito este archivo Caddyfile, podemos cargar la nueva configuración con `sudo systemctl reload caddy`.

#### Configuración avanzada

A medida que vayamos agregando nuevos servicios a nuestro servidor, este archivo inicial se puede llegar a hacer muy grande y difícil de navegar y leer. Además de esto, quizás queremos correr alguna de las otras directivas de Caddy, para varias cosas más avanzadas que hagamos, como logear, o correr algún tipo de protección como crowdsec.

Para "reconfigurar" nuestra configuración de Caddy, vamos a empezar por crear los directorios `sites-available` y `sites-enabled`. En `sites-available` vamos a ingresar la configuración de cada servicio de caddy, y los vamos a "conectar" con un link simbólico (algo así como un "acceso directo", un archivo que apunta a otro archivo) en la carpeta sites-enabled cuando queramos que esos sitios estén disponibles. De esta forma, si en algún momento queremos dejar de servir, por ejemplo, nuestro netflix privado, sólo tenemos que eliminar ese archivo en `sites-enabled`, sin borrar la configuración que teníamos armada. Cuando queramos volver a servirlo, sólo tenemos que crear el link de nuevo.

Para crear los directorios, vamos a usar los siguientes comandos:
```
cd /etc/caddy/ # Para movernos hacia la carpeta de la configuración
sudo mkdir sites-available
sudo mkdir sites-enabled # Crea ambos directorios
```
<p class="callout info">No es necesario copiar lo que viene después del `#`, incluyendo el propio símbolo: Representa comentarios que el "intérprete" de la consola va a ignorar. Si los escribís, no cambia nada.</p>

Una vez creados, la estructura local del directorio `/etc/caddy` debería ser la siguiente: (en este ejemplo, usamos los mismos dos servicios que teníamos antes)
```
Caddyfile
sites-available/
|- blog.midominio.com <-- Bloque de config de blog
L- neflis.midominio.com <-- Bloque de config de neflis
sites-enabled/
|- blog.midominio.com <-- Link al archivo en sites-avail
L- neflis.midominio.com <-- Link
```
<p class="callout info">Los subdirectorios están indicados con una barra diagonal <code>/</code> al final del nombre. Si no tiene esta barra diagonal, es un archivo</p>

Una vez creadas la carpetas, tenemos que tomar cada bloque de cada servicio y escribirlo en un archivo en el directorio `sites-available`. Por ejemplo, copiamos el bloque del blog, y lo copiamos en el archivo propio con el comando `sudo nano sites-available/blog.midominio.com`. Dentro del archivo quedaría:

```Caddyfile
blog.midominio.com {
  reverse_proxy localhost:3000
}
```

Hacemos lo mismo con el archivo del "neflis". Ambos bloques los borramos del Caddyfile.

En el Caddyfile, le indicamos que "incluya" todas las "sub-configuraciones" que se encuentran en la carpeta sites-enabled. Nuestro archivo Caddyfile, en principio, quedaría únicamente así:

```Caddyfile
import sites-enabled/*
```
<p class="callout info">El * en la indicación significa "todo" lo que está en la carpeta sites-enabled</p>

Por último, creamos los "accesos directos" dentro de la carpeta sites-enabled que apunten a las configuraciones individuales. En este ejemplo uso la configuración del blog:

`sudo ln -s /etc/caddy/sites-available/blog.midominio.com /etc/sites-enabled/`

(Nótese que uso "paths absolutos", que empiezan con una barra diagonal `/`).

Hacemos lo mismo con cada sitio que queremos que esté "activado".

Finalmente, refrescamos la nueva configuración con `sudo systemctl reload caddy`.
<p class="callout success">Nótese que, mientras trabajamos en la carpeta /etc/caddy, necesitamos usar sudo <i>cada vez que queremos escribir o modificar</i> algo, pero no cada vez que queremos verlo. Esto es porque tenemos, como usuarios comunes no-administradores, permisos para ver pero no para modificar. Por esto con <code>cd</code> podemos "entrar" al directorio y ver sus contenidos, pero no podemos modificarlos sin usar <code>sudo</code>.</p>

# Configuraciones específicas de Notebooks

En esta página vamos a ver un par de ajustes que tenemos que hacer a nuestro server en caso de haberlo instalado en una Laptop (notebook, netbook, cualquier cosa del estilo). Esencialmente, tenemos que tener en cuenta dos cosas principales:
- Que no se suspenda la laptop cuando cerremos la pantalla.
- Que se apague la pantalla cuando la cerremos, también.

### Cambiar comportamiento de cierre de pantalla
En linux, muchas de las configuraciones están en archivos de texto, a veces llamados archivos "config". Estos se suelen guardar en el directorio `/etc/`. En este caso, el que queremos editar se encuentra en `/etc/systemd/login.conf`.

Lo vamos a abrir con el editor `nano`, un editor simple que se encuentra en la mayoría de las distribuciones de Linux, con el siguiente comando: 

`sudo nano /etc/systemd/login.conf`.
[![Captura de pantalla 2026-01-15 a la(s) 1.28.54 p. m..png](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/scaled-1680-/captura-de-pantalla-2026-01-15-a-las-1-28-54-p-m.png)](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/captura-de-pantalla-2026-01-15-a-las-1-28-54-p-m.png)

Este comando va a llevar `sudo`, es decir que lo vamos a ejecutar como [administradores](https://wiki.cuquiweb.xyz/link/14#bkmrk-root). Por esto mismo, nos va a pedir la contraseña antes de permitirnos seguir. Una vez adentro, vamos a movernos con las flechas del teclado hasta encontrar la línea `#HandleLidSwitch=suspend`. Le vamos a eliminar el `#`, que indica que es un "comentario", es decir que es una línea que no hace nada aún (la línea está para indicarnos cuál es la opción por defecto, si no escribimos nada), y vamos a cambiar el `suspend` por `lock`. Esto va a indicar que cuando cerremos la tapa, se va a "desloguear" y vamos a tener que ingresar nuevamente cuando la abramos, pero crucialmente *no se va a suspender la computadora*, por lo que vamos a poder loguearnos remotamente a través del [ssh](https://wiki.cuquiweb.xyz/link/17).

[![HandleLidSwitch.png](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/scaled-1680-/captura-de-pantalla-2026-01-15-a-las-1-32-00-p-m.png)](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/captura-de-pantalla-2026-01-15-a-las-1-32-00-p-m.png)

Para guardar los cambios, primero vamos a apretar `Ctrl+O` (de "Write **O**ut"), tocamos `Enter` para guardar con el mismo nombre el archivo y luego `Ctrl+X`para salir.

Por último, vamos a necesitar reiniciar el servicio de systemd, al cual le acabamos de cambiar la configuración, con el comando:
`sudo systemctl restart systemd-logind.service`. Después de esto, la comptuadora no debería suspenderse cuando cerremos la tapa.

### Configurar apagado de pantalla
<p class="callout danger">Por lo general, la pantalla se debería apagar siguiendo los pasos de arriba, al menos unos segundos después de cerrar la pantalla. Sin embargo, si te das cuenta de que no es el caso, podés intentar lo siguiente:</p>

Con nano, nuevamente, vamos a editar otro archivo:
`sudo nano /etc/default/grub`

Dentro de este archivo, vamos a buscar la línea que contiene `GRUB_CMDLINE_LINUX_DEFAULT=`, y a cambiarla por `GRUB_CMDLINE_LINUX_DEFAULT=consoleblank=600`.
Guardamos nuevamente con `Ctrl+O`, `Enter`, y salimos con `Ctrl+X`. De vuelta en la consola, escribimos el comando `update-grub` (es posible que nos pida que lo corramos como `sudo`, en cuyo caso corremos `sudo update-grub` e ingresamos nuestra contraseña), y luego reiniciamos la computadora con `sudo reboot`, y debería funcionar.

# Usando el LVM

# Usando el LVM (Logical Volume Manager)

## Qué es el LVM?
En los tutoriales de esta página, y específicamente cuando instalamos Linux (Ubuntu), recomendamos instalarlo con el `lvm` ya instalado y funcionando (lo cual es lo que Ubuntu ofrece desde el vamos). Si lo hiciste de esta forma, quizás te encuentres con algo interesante: Sin importar el espacio con el que tu disco cuente, sólo vas a tener 100 GB disponibles si revisas el espacio libre:

[![df_lvm_default.png](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/scaled-1680-/captura-de-pantalla-2026-01-21-a-las-4-42-06-p-m.png)](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/captura-de-pantalla-2026-01-21-a-las-4-42-06-p-m.png)

Esto ocurre porque Ubuntu instaló el LVM, que es un gestor de "discos virtuales", e instaló el sistema operativo en un *logical volume* (dicho disco virtual, llamado un volumen lógico) con 100 GBs. En este disco vamos a instalar todos nuestros contenedores (programas) y demás, pero si nos manejamos de esta forma, podemos *designar cuánto espacio vamos a querer dedicarle a la data de nuestros otros servicios*, guardando la música de nuestro Spotify o las pelis y series de nuestro Netflix en otros *logical volumes* con espacio delimitado, por ejemplo 200 GBs para música y 500 para películas, etc.

El LVM nos permite incorporar varias unidades físicas (como podrían ser el disco rígido de la computadora y un disco rígido externo) en una sóla unidad lógica (llamada *volume group*), sin tener que preocuparnos nosotrxs por qué va a parar adónde en esos discos.
Si querés más info sobre cómo funciona esto, la página de [red hat](https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html/configuring_and_managing_logical_volumes/overview-of-logical-volume-management_configuring-and-managing-logical-volumes) tiene una buena descripción.

## Usando el lvm
En principio, la instalación de linux ya va a tener el lvm instalado y configurado, con sus unidades fundamentales ya definidas: Un *volume group* (vg), que va a agrupar los volúmenes que creemos, y un *logical volume* (lv) dentro de ese vg, normalmente de 100 GBs. Por lo tanto, nos vamos a enfocar en tres procesos básicos:
- Crear un lv
- Modificar el tamaño de un lv
- Eliminar un lv

### Crear un Logical Volume

Lo primero que tenemos que hacer para esto es averiguar cuánto espacio sin asignar tenemos en nuestro vg, ya que este es el que vamos a tener disponible para asignar a nuestro lv. Para esto, vamos a escribir:

`sudo vgdisplay`

[![lvdisplay_espacio_libre.png](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/scaled-1680-/captura-de-pantalla-2026-01-21-a-las-4-53-52-p-m.png)](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/captura-de-pantalla-2026-01-21-a-las-4-53-52-p-m.png)

Podemos ver, por ejemplo, que tenemos alrededor de 196 GBs libres, sin utilizar. Armemos un lv con 150 GBs llamado "navidrome". Para hacer esto, vamos a utilizar el comando `lvcreate`, que se escribe de la siguiente forma:

lvcreate -L \<tamaño> -n \<nombre> \<vg del que obtenemos el espacio>

<p class="callout danger">Como en todo lo que es linux, es importante prestar atención a <b>las mayúsculas y minúsculas</b> en lo que escribimos. La opción "-L" es con L mayúscula, mientras que la opción "-n" es con n minúscula.</p>

El nombre el vg lo podemos ver en lo que nos devolvió el `vgdisplay` más arriba: es "ubuntu-vg". Así que, con esto en mente, el comando que tendríamos que escribir es:

`sudo lvcreate -L 150G -n navidrome-lv ubuntu-vg`

[![Captura de pantalla 2026-01-21 a la(s) 5.10.03 p. m..png](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/scaled-1680-/captura-de-pantalla-2026-01-21-a-las-5-10-03-p-m.png)](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/captura-de-pantalla-2026-01-21-a-las-5-10-03-p-m.png)

Ya creado, podemos verlo usando el comando `sudo lvs`:

[![sudo_lvs.png](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/scaled-1680-/captura-de-pantalla-2026-01-21-a-las-5-11-13-p-m.png)](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/captura-de-pantalla-2026-01-21-a-las-5-11-13-p-m.png)

Sin embargo, todavía no lo podemos usar; tenemos que formatearlo con un sistema de archivos y tenemos que montarlo en algún directorio. Para esto, necesitamos ver dónde está ubicado el disco; en Linux, [todo es un archivo](https://ihaveapc.com/2025/09/understanding-linuxs-everything-is-a-file-concept/). Esto significa que la mayoría de las cosas (dispositivos como el teclado, discos rígidos, los logic volumes, o los mismos programas que corremos) figuran en el navegador como archivos (o, más bien, abstracciones de lo que representan a archivos). Para ubicar nuestro nuevo lv, vamos a buscar en el *mapper*, que son como "accesos directos" a los discos:

`ls /dev/mapper`

Esto nos va a mostrar los dispositivos de almacenamiento que tenemos disponibles en el server:

[![ls_mapper.png](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/scaled-1680-/captura-de-pantalla-2026-01-21-a-las-7-04-03-p-m.png)](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/captura-de-pantalla-2026-01-21-a-las-7-04-03-p-m.png)

En este caso, podemos ver que tenemos esas dos opciones:
- ubuntu--vg-navidrome--lv
- ubuntu--vg-ubuntu--lv

Nos interesa formatear el lv de navidrome, así que vamos a utilizar su dirección: `/dev/mapper/ubuntu--vg-navidrome--lv`

El comando que vamos a utilizar es mkfs, específicamente vamos a usar su variante que formatea el archivo a ext4; `mkfs.ext4`:

`sudo mkfs.ext4 /dev/mapper/ubuntu--vg-navidrome--lv`

[![mkfs_ext4.png](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/scaled-1680-/captura-de-pantalla-2026-01-21-a-las-7-08-26-p-m.png)](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/captura-de-pantalla-2026-01-21-a-las-7-08-26-p-m.png)

Una vez formateado el volumen, estamos listos para montarlo (sería asignarle un lugar en la jerarquía de directorios en donde estén las cosas que contiene; en Windows este proceso se hace automáticamente y figura como `D:\\`o `C:\\`, etc.), para esto,  primero vamos a crear el directorio al que lo vamos a montar:

`sudo mkdir /mnt/musica`

Luego, vamos a usar el comando `mount`:

`sudo mount /dev/mapper/ubuntu--vg-navidrome--lv /mnt/musica`

Y listo! Ya tenemos nuestro volumen montado y listo para usar. Podemos corroborarlo usando el comando `lsblk`:

[![lsblk_navidrome.png](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/scaled-1680-/captura-de-pantalla-2026-01-21-a-las-7-20-38-p-m.png)](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/captura-de-pantalla-2026-01-21-a-las-7-20-38-p-m.png)

Además de esto, podemos ver que figura entre los discos montados cuando usamos el comando para ver el espacio libre `df` (usamos el "flag" -h para ver el espacio que tienen disponible en unidades "de humanos", MBs y GBs):

[![df_navidrome.png](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/scaled-1680-/captura-de-pantalla-2026-01-21-a-las-7-24-30-p-m.png)](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/captura-de-pantalla-2026-01-21-a-las-7-24-30-p-m.png)

(Es el último elemento de la lista; a la izquierda vemos el dispositivo, el lv, y a la derecha vemos dónde está montado)

Nos queda únicamente un último paso: Encargarnos de que se monte automáticamente cada vez que encendemos la compu. Para esto, vamos a usar un archivo llamado `fstab`, que está ubicado en `/etc/fstab`. Vamos a necesitar obtener el UUID del volumen a montar, y para esto vamos a usar el comando `lsblk -f`  (la opción -f es importante acá):

[![lsblk_f_navidrome.png](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/scaled-1680-/captura-de-pantalla-2026-01-21-a-las-7-57-33-p-m.png)](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/captura-de-pantalla-2026-01-21-a-las-7-57-33-p-m.png)

Podemos ver la UUID abajo (si la pantalla es grande, al lado) del volúmen que queremos agregar.

Ahora que tenemos el UUID, lo sumamos al fstab; vamos a tener que abrir el archivo `/etc/fstab` con un editor de texto (como `nano`), e instertar la siguiente línea:

`UUID=<el UUID del disco> <punto de montado> <formato de sistema de archivos> defaults 0 2`

Nótese que el defaults 0 2 va a ser siempre igual; lo que cambia es lo de la izquierda.
Para el ejemplo con el que venimos trabajando, sería:

`UUID=55c52d68-4199-41ae-99c1-d00102b3ecf1 /mnt/musica ext4 defaults 0 2`

Con el comando `sudo nano /etc/fstab` se nos abre el editor:

[![fstab_navidrome.png](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/scaled-1680-/captura-de-pantalla-2026-01-21-a-las-8-02-38-p-m.png)](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/captura-de-pantalla-2026-01-21-a-las-8-02-38-p-m.png)

Como siempre, guardamos (en nano) con `Ctrl+o` y  salimos con `Ctrl+x`.

Una vez hechos los cambios, probamos si nuestro fstab funciona con el comando `sudo mount -a`, que monta todos los volúmenes que figuran en el fstab:

[![chequeo_fstab_navidrome.png](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/scaled-1680-/captura-de-pantalla-2026-01-21-a-las-8-07-06-p-m.png)](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/captura-de-pantalla-2026-01-21-a-las-8-07-06-p-m.png)

Como suele pasar en Linux, la ausencia de mensaje se lee como ausencia de error: Todo funcionó bien.

Y ahora sí! Ya tenemos nuestro nuevo volúmen montado y listo para ser utilizado de forma permanente :)

### Modificar el espacio de un Logical Volume

Modificar el espacio del que dispone el volumen es simple; utilizamos el comando `lvextend` para ampliar el espacio, y `lvreduce` para achivarlo.

<p class="callout warning">Cuando reducimos el espacio de un volumen, hay que tener mucho cuidado; si lo reducimos a un tamaño menor al de los datos que tiene almacenados, es muy probable que perdamos esa información de forma irreversible.</p>

#### Reducir el espacio de un lv

Para reducir el espacio, como mencionamos más arriba, vamos a usar el comando `lvreduce`. La sintaxis es muy similar a la de `lvcreate` que vimos más arriba:

`sudo lvreduce --resizefs -L <nuevo tamaño> <volumen a reducir>`

En -L, podemos poner un tamaño absoluto, como puede ser 100G para 100 Gbs, o podemos poner un tamaño relativo, como -20G para restarle 20 Gbs al total del volúmen:

[![lvreduce_navidrome.png](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/scaled-1680-/captura-de-pantalla-2026-01-21-a-las-7-32-39-p-m.png)](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/captura-de-pantalla-2026-01-21-a-las-7-32-39-p-m.png)

Podemos ver cómo se redujo el tamaño del volúmen de 150 Gb a 130 Gb.

Como podemos ver, para hacer esta operación el programa nos pide desmontar el volúmen. Esto significa que si queremos montarlo de nuevo, vamos a tener que volver a correr el comando `mount` como vimos más arriba (en la sección de crear un lv).

#### Expandir el espacio de un lv

Para expandir el espacio, el proceso va a ser similar al que vimos en cómo reducir el espacio; vamos a usar el comando `lvextend`:

`sudo lvextend --resizefs -L <nuevo tamaño> <volumen a expandir>`

Como antes, la opción --resizefs se encarga de que además de cambiar le tamaño del volúmen cambie el tamaño de su sistema de archivos, y la opción -L tamaños absolutos como 50G o relativos como +20G:

[![lvextend_navidrome.png](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/scaled-1680-/captura-de-pantalla-2026-01-21-a-las-7-37-56-p-m.png)](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/captura-de-pantalla-2026-01-21-a-las-7-37-56-p-m.png)

### Eliminar un Logical Volume

En algunos casos, también, podríamos llegar a querer eliminar un lv. El proceso para hacerlo es simple, pero siempre hay que tener mucho cuidado, ya que **podemos perder permanentemente la data almacenada en ese volúmen**.

La única consideración es que, antes de eliminarlo, debemos desmontarlo con el comando `umount` (sí, no *unmount*, **umount**)

`sudo umount /mnt/musica`
(nótese que usamos el lugar donde está montado, no la "dirección del volúmen")

[![umount_musica.png](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/scaled-1680-/captura-de-pantalla-2026-01-21-a-las-7-42-53-p-m.png)](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/captura-de-pantalla-2026-01-21-a-las-7-42-53-p-m.png)

Hecho esto, vamos a usar el comando `lvremove` para eliminar el volúmen:

[![lvremove_navidrome.png](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/scaled-1680-/captura-de-pantalla-2026-01-21-a-las-7-43-50-p-m.png)](https://wiki.cuquiweb.xyz/uploads/images/gallery/2026-01/captura-de-pantalla-2026-01-21-a-las-7-43-50-p-m.png)

Y listo, el volúmen ya no existe más.

Como tuvimos que agregarlo al fstab cuando lo creamos, ahora deberíamos eliminarlo de la lista modificando nuevamente el archivo `/etc/fstab`, eliminando la línea que lo monta al encender la computadora. (Revisá la sección de cómo crear un Logical Volume para ver más info al respecto)