Guía de navegación de Altamar

Un pequeño compendio que busca reunir información útil para quienes quieren alejarse de las injusticias éticas y monetarias que se nos imponen para poder disfrutar de las artes.

Introducción

Hola, bienvenidx! Pasá por acá, sentate, ponete cómodx. Este libro que tenés enfrente tuyo es, como su nombre indica, una guía de navegación por las aguas del altamar, para quienes quieren:

Esta guía está, todavía, siendo escrita. Así que no vas a encontrar todo lo que busqués acá(por ahora)

En esta guía, planeo ir de a poco delineando todos los conceptos fundamentales que se necesitan para poder armar lo que queramos relacionado al tema: Un "netflix" propio, con nuestros propios medios, un gestor de contraseñas, un "spotify" para la música que "ripeamos" de los CDs que aún tenemos(o que conseguimos de algún otro lado ;) ). La guía va a tener un caracter modular, por lo que podés acceder sólo a la información que necesites para armar lo que querés armar. En esta primera página, introductoria, planeo ir dejando un índice, y varios "caminos" a seguir, dependiendo lo que quieras armar. Si no hay algún link, es que todavía no existe ^^'

Qué necesito para hacer esto?

Un servidor

No hace falta mucho para reclamar, de una forma u otra, nuestra soberanía. Lo más difícil e importante que necesitamos es una computadora. Puede ser la que usamos todos los días, pero no sería lo ideal, ya que para poder acceder a las cosas que vayamos armando, lo ideal sería que sea una computadora que dejamos siempre prendida y conectada a la red de nuestra casa. Este tipo de computadoras se suelen llamar servidores, ya que son computadoras que existen para "servir" contenido a otras computadoras que actúan como "clientes".

Para estos tutoriales, debido a su reputación como sistema operativo de servidores y la baja cantidad de recursos que consume, vamos a estar usando Linux.

Qué tiene de especial un servidor?

En realidad, nada. Es una computadora común, sólo que la dejamos, como menciono antes, siempre prendida y conectada a nuestra red para que esté disponible a "atender" a los clientes que le conectemos. Hay varias computadoras que podemos usar de servidores, pero las más relevantes para quienes lean esto me parece que pueden ser:

En una laptop "vieja" que conseguí, con 8gb de ram y un intel i5 viejo, tengo los siguientes servicios corriendo:

Un dominio

Un dominio no es algo completamente indispensable para un servidor, ya que con conectarse a la IP pública debería alcanzar. Sin embargo, la mayoría de los proveedores de internet no nos dan una IP pública fija, sino que de a ratos, y a criterios sujetos más bien a lo que define cada proveedor, nos la van cambiando. Por esto, lo mejor que podemos hacer es "alquilar"(ya que no se pueden comprar) un dominio que apunte hacia nuestra IP, y mediante procesos automatizados, ir actualizando la IP hacia la que apunta para que siga siendo la nuestra.

Índice de guías

Preparación previa

Lo primero que tenemos que hacer es preparar nuestro futuro servidor. Los pasos a seguir serían:

  1. Instalar Linux y los programas necesarios en dicho servidor
  2. Si queremos hacernos la vida un poco más cómoda, y sí o sí si queremos conectarnos a nuestros servicios desde fuera de casa(por ejemplo para usar nuestro "spotify" en la calle), obtener un dominio público (un dominio público que yo uso, por ejemplo, es "cuquiweb.xyz", donde me leen :) )
  3. Si queremos acceder al servidor desde fuera de casa, vamos a tener que configurar nuestro router

Guías de servicios

Entre las varias cosas que planeo enseñar, podemos:

Proyectos

En este capítulo se reunirán las "hojas de ruta" de varios proyectos, planteados de forma modular.

Proyectos

Armá tu propio "spotify"

Este artículo, por ahora, es sólo un boceto. A medida que vaya armando las notas necesarias, las voy a ir linkeando por acá.

Introducción

Vamos a armar un spotify

Prerequisitos

Como todas las guías acá, vamos a necesitar tener linux instalado y docker y docker compose. También vamos a necesitar python. También, si querés hacerlo accesible desde afuera, vas a necesitar configurar tu router, obtener y configurar un dominio y configurar un reverse proxy. También, si instalamos el LVM cuando instalamos el sistema operativo, nos va a convenir crear un volumen específico en el que guardar nuestra música. Por último, puede ser útil tener instalado cockpit en nuestro servidor como forma simple de subir archivos de música de nuestra computadora, si es que tenemos música ahí para subir.

Hoja de ruta

Optativo

Conseguir música

Administrar música

Abrir el servidor

Acceder mediante aplicaciones

Instalar Navidrome

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:

Configuración del servidor

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).

El router polvoriento que me dio Fibertel


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, 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: Esto se llama hacer "port forwarding".

Al final del camino, esta secuencia de conexiones externas se vería de la siguiente forma:

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:

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.

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.

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:

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 ". 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://. 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

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 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

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.2y192.168.0.255` debería estar bien).

Dejo un tutorial 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.

Configuración del servidor

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.

Esta sección no fue escrita todavía

Configuración del servidor

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:

Esta sección no fue terminada todavía.

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:

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. 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:

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:

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 copies toda la información importante (fotos, videos, documentos) que no quieras perder en algún otro lado (como en tu computadora principal).

Teniendo esto en cuenta, los pasos en sí son muy tranquilos y seguros. Repasemos cuáles son. Ante todo, vamos a necesitar:

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í. 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

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, pero hay varias otras alternativas también. Si no te funciona el Balena, podés encontrar tutoriales con varios programas acá.

El proceso es simple:

  1. Abrimos el programa y seleccionamos "Flash from file" balena_flash_file.png
  2. Seleccionamos la memoria objetivo (en este caso, el USB) balena_target.png

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.

balena_target_seleccionado.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:

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:

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.

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

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

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:

Una vez nos encontramos en el formulario, los datos son los siguientes:

network_datos.jpg

Tené cuidado, los datos pueden variar dependiendo de cómo está configurada tu red

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:

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

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

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.

El siguiente lugar, la sección titulada SSH configuration, es muy importante

En la siguiente sección, vamos a asegurarnos de que la opción de instalar el server OpenSSH (Install OpenSSH server) esté marcada.

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

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

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

Ya estamos! Lo que sigue, ahora, sería ajustar un par de cosas en caso de ser una notebook, y luego, para la mayoría de los proyectos de esta página, al menos, instalar docker y docker compose.

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. También, para una interfaz gráfica más cómoda para alguna gente, podemos instalar cockpit. De todos modos, aprender a manejar ssh sigue siendo algo importante para manejar tu servidor.

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.

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

Es importante usar el comando python3 y no python a la hora de revisar esto.

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

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.

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, 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

Para salir de esta "pantalla" de información, podés apretar q.

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

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!

Configuración del servidor

El Reverse Proxy

Qué es un reverse proxy?

Sinopsis

En el artículo sobre 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í:

Lo que pasaría, entonces:

Guía: Instalar y configurar mi reverse proxy

Qué es Caddy?

Caddy 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í.

Para utilizar caddy, es muy recomendable que hayas ya configurado un dominio para tus servicios

Instalación

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

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:
sudo apt update
sudo apt install caddy

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.

En caso de que no funcione, las instrucciones oficiales indican estos comandos:

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

Para volver a la consola, probá apretar q

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:

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:

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, 80y 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

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.

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

Los subdirectorios están indicados con una barra diagonal / al final del nombre. Si no tiene esta barra diagonal, es un archivo

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:

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í:

import sites-enabled/*

El * en la indicación significa "todo" lo que está en la carpeta sites-enabled

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.

Nótese que, mientras trabajamos en la carpeta /etc/caddy, necesitamos usar sudo cada vez que queremos escribir o modificar 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 cd podemos "entrar" al directorio y ver sus contenidos, pero no podemos modificarlos sin usar sudo.

Configuración del servidor

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:

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

Este comando va a llevar sudo, es decir que lo vamos a ejecutar como administradores. 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.

HandleLidSwitch.png

Para guardar los cambios, primero vamos a apretar Ctrl+O (de "Write Out"), tocamos Enter para guardar con el mismo nombre el archivo y luego Ctrl+Xpara 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

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:

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.

Configuración del servidor

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

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 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 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

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>

Como en todo lo que es linux, es importante prestar atención a las mayúsculas y minúsculas en lo que escribimos. La opción "-L" es con L mayúscula, mientras que la opción "-n" es con n minúscula.

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

Ya creado, podemos verlo usando el comando sudo lvs:

sudo_lvs.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. 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

En este caso, podemos ver que tenemos esas dos opciones:

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

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

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

(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

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

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

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.

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.

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

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

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

Hecho esto, vamos a usar el comando lvremove para eliminar el volúmen:

lvremove_navidrome.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)

Servicios

En este capítulo, vamos a encontrar páginas sobre distintos servicios (programas pensados para ser accedidos por "clientes" y ser utilizados)

Servicios

Navidrome

Qué es Navidrome?

Navidrome es un [servicio] de streaming de música que, esencialmente, lee un directorio o carpetas que le indicamos, recolecta todos los archivos de audio que se encuentran, los organiza por su metadata (la información sobre lx artista, el álbum, el track, etc, que se encuentra dentro del mismo archivo), y nos permite acceder y escuchar nuestra música a través de una interfaz similar a Spotify (con una notable ausencia: las recomendaciones algorítmicas). Soporta un protocolo muy conocido, llamado subSonic, lo que nos permite usar no sólo la interfaz web que el programa trae, sino además varias aplicaciones (de celular o de computadora) para acceder a nuestra librería musical. Si no tenemos [acceso externo] a nuestro servidor, estas aplicaciones muchas veces nos permiten bajar la música que queremos tener a mano, así que también podemos usarlas para llevarnos música para escuchar fuera de casa.

Instalar Navidrome

La instalación de Navidrome es muy simple, ya que la realizamos a través de docker, usando específicamente su plugin docker compose. (Acá podemos ver un desglose básico de cómo funciona el docker compose.)

Crear directorios

Lo primero que vamos a tener que hacer va a ser designar un directorio para muestra música y otra para nuestra data (data, en este caso, refiere a cosas como lxs usuarixs que creemos, las playlist, favoritos, y demás de ellxs, cosas así). El directorio de la música podría ser el que antes definimos a través del lvm (ver en prerrequisitos), o podría ser un directorio nuevo que creemos. Para este ejemplo, vamos a suponer que el directorio para nuestra música se va a encontrar en /mnt/musica, ya que lo creamos para montar un [volumen lógico] específico allí. Nuestro directorio de data lo vamos a crear en nuestro directorio home, en la siguiente dirección: ~/docker/navidrome/data (~ representa el path a nuestro directorio home): mkdir -p docker/navidrome/data

Crear y configurar docker compose

Hechos nuestros directorios de música y data, vamos a crear un archivo llamado docker-compose.yaml. Este archivo lo podemos hacer donde queramos, pero yo normalmente creo un directorio llamado composes en el directorio de docker, y dentro de ese directorio creo directorios con los distintos servicios que voy a subir (ya que el archivo donde vamos a poner el docker compose siempre se va a llamar docker compose):

mkdir -p ~/docker/composes/navidrome
nano ~/docker/composes/navidrome/docker-compose.yaml

Dentro del archivo docker-compose, vamos a copiar lo siguiente:

services:
  navidrome:
    image: deluan/navidrome:latest
    user: 1000:1000 # should be owner of volumes
    ports:
      - "4533:4533"
    restart: unless-stopped
    # environment:
      # Optional: put your config options customization here. Examples:
      # ND_LOGLEVEL: debug
    volumes:
      - "/path/to/data:/data"
      - "/path/to/your/music/folder:/music:ro"

Vamos a tener que prestar atención a dos cosas:

Chequear que lx usuarix sea dueñx de los volúmenes

Para chequear que tengamos acceso a los volúmenes vamos a usar el comando chown, que cambia lx dueñx de un archivo o directorio. Lo vamos a usar con la opción -R para asegurarnos de que ese cambio sea recursivo, es decir que también cambie lx dueñx de los directorios y archivos dentro del directorio que indiquemos. En este ejemplo, nuestros directorios a cambiar son ~/docker/navidrome y /mnt/musica, y lx usuarix que queremos que pase a ser su dueño va a ser juli:

sudo chown -R juli:juli ~/docker/navidrome
sudo chown -R juli:juli /mnt/musica

Podemos ver cómo, por ejemplo, lx usuarix juli figura como dueñx de /mnt/musica:

ls_chown_navidrome.png

Indicar los path hacia los volúmenes

Para esto, simplemente vamos a tener que modificar dos líneas de nuestro archivo docker-compose.yaml:

"/path/to/data:/data": Vamos a tener que cambiar /path/to/data al path de nuestra carpeta de data. Para esto recomiendo que usemos paths absolutos, es decir sin usar ni el ~, ni el .. Entonces, si queremos averiguar cuál es el path absoluto hacia nuestro directorio de data, podemos usar cd para dirijirnos ahí y luego el comando pwdpara ver su path:

cd ~/docker/navidrome/data
pwd

Ahora que vimos el path, podemos cambiar la línea (recordá que para abrirlo, o incluso crearlo, tenés que usar el comando nano docker-compose.yaml desde dentro de la carpeta donde se encuentra el archivo):

"/path/to/data:/data" --> "/home/juli/docker/navidrome/data:/data"

Con /mnt/musica no necesitamos hacer esto, ya que como el path comienza con una barra diagonal, sabemos que es un path absoluto.

"/path/to/your/music/folder:/music:ro" --> "/mnt/musica:/music:ro"

Iniciar el contenedor

Cambiadas estas dos líneas, el docker-compose.yaml nos debería haber quedado así:

services:
  navidrome:
    image: deluan/navidrome:latest
    user: 1000:1000 # should be owner of volumes
    ports:
      - "4533:4533"
    restart: unless-stopped
    # environment:
      # Optional: put your config options customization here. Examples:
      # ND_LOGLEVEL: debug
    volumes:
      - "/home/juli/docker/navidrome/data:/data"
      - "/mnt/musica:/music:ro"

Ahora, lo único que nos queda es arrancar el servicio. Después de guardar los cambios y salir del archivo, ejecutamos (dentro del directorio donde se encuentra el archivo docker-compose.yaml) el comando docker compose up -d (puede que nos haga algún problema, y si es así, deberíamos correrlo con sudo: sudo docker compose up -d):

Acceder al contenedor y crear usuarix Admin

Una vez creado el contenedor, nuestro serivico ya va a estar corriendo! Podemos acceder a él usando la dirección <ip-del-servidor>:4533 en nuestro navegador de internet:

Como podemos ver, lo primero que nos pide va a ser crear un usuarix admin. Este usuarix es quien va a poder crear nuevas cuentas para otra gente y adminisitrar, por lo general, el servicio.

Y ya estamos! Navidrome está corriendo en nuestro servidor. Desde acá, tenemos varios pasos extra que podríamos llevar a cabo:

En principio, ya podés disfrutar de tu spotify casero!

Glosario

Capítulo que va a contener varias definiciones de conceptos teóricos que pueden ser necesarias de aclarar para las distintas cosas a llevar a cabo

Glosario

Direcciones IP

Para este artículo, y por simplicidad del tema, vamos a estar hablando de IPv4, y no de IPv6, ya que esta última no desplazó a IPv4 todavía, y es la que se nos asigna en la mayoría de los casos a quienes usamos computadoras conectadas a internet.

Si no sabés de qué habla lo de arriba, no te preocupes :) Seguí leyendo

Qué son las direcciones IP?

Cuando las computadoras se conectan a internet, o a cualquier red, utilizan una "dirección", como la dirección de tu casa, única que les permite identificarse ante el mundo y compartir información con otras computadoras. Desde ya que las otras computadoras también tienen direcciones como la tuya. Estas direcciones se llaman direcciones IP. Su formato son cuatro números del 0 al 255 separados por puntos, por ejemplo: 155.42.3.23.

El problema con las IPs

Sin embargo, las IP tienen una limitación. Al sólo poder ser estos cuatro números, y al sólo poder ir del 0 al 255, tienen cómo límite 4.300 millones de combinaciones. Esto parece un montón, pero recordemos: Cada "computadora", cada aparato electrónico que se pueda conectar a internet, debería tener una. Esto incluye:

Por esto, y sobre todo desde que se empezaron a crear cada vez más tipo de dispositivos conectados a interent, empezó a crecer la preocupación por que se acaben las direcciones de IP. Para solucionar este problema, se decidió separar una cantidad de rangos de IP que no podrían ser utilizados en el internet, y se reservarían para redes locales.

IPs locales

Como solución, estos rangos de IP sólo podrían ser usados en las redes de cada casa, empresa, o lo que sea, y cuando se conectasen a internet, lo harían con la IP del router. De esta forma, una red de casa que conteniese, por ejemplo, 200 dispositivos conectados, sólo tendría una sóla IP a través de la cual se conectaría a internet. Y el dispositivo encargado de hacerlo(el router), tendría la responsabilidad de, cada vez que una computadora externa se conecte con la IP de la casa, "derivar" a la computadora externa hacia la IP local que le corresponda.

Cómo sabemos si una IP es local o de internet

Como mencioné más arriba, las IPs locales pertenecen a un rango específico. Estos son:

Por lo tanto, por ejemplo, la dirección 192.168.10.46sería una dirección local, igual que 172.20.0.157, mientras que direcciones como 172.40.54.23o 192.170.23.4 no lo serían.

Glosario

Puertos

Los puertos, o ports, en inglés, son esencialmente puntos de conexión de nuestras computadoras hacia otras computadoras. Todas las computadoras se conectan entre sí mediante puertos. Es decir, cualquier conexión que ocurra de una computadora a otra va a ocurrir mediante puertos.

Rango de puertos

Los puertos están numerados: Pueden ser desde el puerto 0 al puerto 65535. Sin embargo, no todos estos puertos son iguales:

Ejemplos de puertos conocidos y usados

Puerto Servicio Descripción
80 http Protocolo de internet
443 https Protocolo de internet(seguro, el candadito
22 ssh Protocolo de "terminal remota" secure shell
21 ftp Protocolo de FTP(File transfer protocol)
25 smtp Protocolo de e-mail
7878 radarr Puerto por defecto utilizado por el programa "radarr"
8096 jellyfin Puerto por defecto de la aplicación "Jellyfin"

Vale destacar que los últimos dos puertos del ejemplo, al ser puertos de la sección de "puertos registrados", pueden llegar a ser usados por otros progamas también. Cuando se instala, por ejemplo, Jellyfin, si el puerto ya está en uso, se puede aclarar al programa que debería utilizar otro.

Glosario

Dominios

Los dominios son las "direcciones legibles por humanos". Son, por ejemplo google.com, que nos dirige a la IP de google. Los dominios están distribuídos a distintas empresas que los alquilan, o a distintos países que hacen igual. Los dominios de máximo nivel (Top Level Domain, o TLD), por ejemplo, ".com.ar" y ".ar", le corresponden al Estado Argentino, y se consiguen en la página "nic.ar". Hay muchos dominios que son vendidos por entidades privadas, como los dominios ".xyz", ".lat", o incluso los ".com". Páginas que normalmente venden dominios incluyen:

Glosario

Permisos en Linux(y UNIX)

Esta página aún no fue escrita

Sinopsis

Permisos

Root

SUDO

Glosario

La Terminal

La terminal (a veces llamada tambíen "consola" o "command line interface"(cli)) es la principal forma de interactuar que vamos a tener con nuestro servidor, especialmente si éste no tiene una interfaz gráfica.

En realidad, todo corre a través de la consola; la interfaz gráfica simplemente nos genera un entorno más "amigable" y, bueno, gráfico, para interactuar con ella, en lugar de "comandos de texto". (Envía dichos comandos de texto por nosotrxs)

Tutorial: conceptos básicos de la consola

Si estás acá es porque ya estamos manejándonos usando la consola como principal forma de interactuar con el server. No paniquees! Es mucho más simple de lo que parece. Ante todo, si querés un tutorial un poco más completo, aunque en inglés, recomiendo este de acá. Si preferís algo más superficial, sigamos!

Qué es la consola?

La consola, simplemente, es un programa que nos permite interactuar con la computadora a través de comandos de texto. Para abrir una, en Linux o Mac, simplemente tenés que buscar el programa "Terminal". En caso de que tengas Windows, la "consola" que tienen ellos se va a llamar la Command Prompt (en español, si no me equivoco, "Símbolo del Sistema", y en ambos idiomas se encuentra como "CMD", también).

IMPORTANTE! En este tutorial, todo lo que veamos va a aplicar a consolas de Linux o macOS (sistemas operativos basados en "UNIX", un sistema operativo abuelito suyo). Si querés seguir el tutorial desde Windows, te recomiendo que busques el "WSL" (Windows Subsystem for Linux), o que lo hagas ya desde una conexión "ssh" con tu servidor.

Si te conectaste por [ssh], felicitaciones! Ya estás usando una terminal.

Lo fundamental

Cuando trabajamos en una terminal (sea con una [conexión remota mediante SSH], o abriendo un "emulador de terminal" (a veces llamado simplemente terminal) o en la consola misma de la computadora, estamos esencialmente usando un programa que espera que corramos "comandos" indicándole qué hacer. Este programa funciona de forma similar al navegador "explorer" de Windows o el "finder" de mac, en un sentido: Los comandos que corramos, va a correrlos en el contexto de una ubicación específica. Cuando recién lo abrimos, esa ubicación suele ser el directorio "home" de nuestro usuario. Por ejemplo, una sesión recién abierta se podría ver así: Captura de pantalla 2025-11-10 a la(s) 12.17.11 a. m..png

Parecen cosas al azar, pero en realidad, la consola nos muestra toda información importante para tener en cuenta:

Qué pasaría si corremos un comando? Probemos con "pwd", que como su nombre indica (path to working directory), nos muestra cúal es el "camino" hacia el directorio de la carpeta en la que estamos trabajando siguiendo la [[estructura jerárquica de directorios]] de Linux. Ingresamos pwd, y tocamos "enter" para enviar el comando, y obtenemos esto: fulando_pwd.png Después de tocar "enter", la computadora nos responde con la dirección al directorio actual (/home/fulano, es decir que desde la carpeta base, conocida como /, entraríamos a la carpeta home, y dentro de ésta estaría la carpeta fulano), y en otra línea nos figura la misma info que antes, simbolizando que nuevamente tenemos control sobre la computadora (y nuevamente está esperando una indicación o comando).

Es importante notar que cuando ingresamos "pwd", no tuvimos que aclarar a dónde era esto, ya que la consola dio por sentado que nos referíamos al directorio en el que nos encontrábamos. Veamos un ejemplo distinto. Si la consola nos mostrase, después de los dos punto, esto: Captura de pantalla 2025-11-10 a la(s) 12.32.44 a. m..png Nos estaría indicando que no estamos trabajando el el directorio "home" de nuestro usuario, sino en el directorio que se encuentra en la ruta /var/log/apt. Si corriésemos el comando pwd, por más redundante que sea, nos mostraría como resultado que, en efecto, ese es el "camino" hacia la carpeta en la que estamos trabajando, y que la consola da por sentado que estamos corriendo el comando desde esa ubicación en los directorios del sistema: Captura de pantalla 2025-11-10 a la(s) 12.33.22 a. m..png.

De la misma forma, y volviendo al directorio "home" (que figura como un ~ en nuestra consola, para abreviar), si usásemos el comando touch, que sirve para crear un archivo vacío, y se utiliza escribiendo touch <nombre del archivo>, el archivo creado lo encontraríamos en el actual directorio: Captura de pantalla 2025-11-10 a la(s) 12.39.21 a. m..png Un par de cosas para notar:

Pero, bancá un segundo. Cómo sabemos que se creó el archivo? Bueno, es que el comando touch sólo crea el archivo, y siguiendo la filosofía Unix de crear herramientas que sólo hagan una cosa y la hagan bien, no hace más nada. Ni siquiera nos muestra el archivo. Para verlo, podemos usar el comando ls, que nos lista los archivos y directorios dentro del directorio en el que nos encontramos: Captura de pantalla 2025-11-10 a la(s) 12.44.51 a. m..png Podemos ver, ahora, que el archivo está en la carpeta en la que estamos (y, de paso, que es el único archivo presente).

Más abajo vamos a ver, entonces, varios comandos que podemos utilizar en la consola para navegarla y modificarla, creando archivos, copiándolos, cambiándoles el nombre y más.

Navegando

Comando cd

Comando ls

Creando archivos y directorios

Comando mkdir

Comando touch

Copiando, moviendo y eliminando

Comando mv

Comando cp

Comando rm

Editando archivos de texto

Comando nano

Glosario

SSH

El SSH (Secure SHell) es un protocolo para acceder al "shell" (la consola o terminal, en pocas palabras) de una computadora de manera remota. Es la principal forma en la que vamos a interactuar con nuestro servidor, ya que es más cómodo por lo general acceder y configurar las cosas desde nuestra computadora de siempre y tener el server guardado en algún recoveco donde no moleste.

Acceder a un servidor a través de SSH

Usar SSH desde una Mac o desde una computadora con Linux es extremadamente simple, ya que el programa para hacerlo suele venir preinstalado en las mismas. En el caso de Windows, si usás Windows 10 u 11 (y los tenés al día), tambíen deberías poder hacer algo parecido. Si no, tendrías que instalar un cliente de SSH, como putty.

En caso de tener ssh instalado, el proceso es simple (y si no lo tenés instalado, dejo en vos googlear como instalar el cliente ssh en tu sistema operativo (el de tu compu de siempre, no el del server):

Abriendo la terminal (o símbolo de sistema/terminal en Windows), ingresamos el siguiente comando:

ssh <usuario>@<ip del servidor>

Al hacerlo, nos va a preguntar si queremos "guardar el fingerprint" del servidor al que accedemos. Indicamos que sí (esto va a pasar únicamente cuando accedemos por primera vez a una computadora nueva), y nos va a pedir la contraseña. Una vez que la ingresemos, vamos a haber accedido a una consola remota del servidor. Desde ahí, vamos a poder hacer todo lo que haríamos sentados frente a una terminal en la misma computadora.

Si no sabés qué hacer acá, y nunca usaste una terminal antes, podés ver los conceptos básicos acá, o leer la guía más completa (y muy buena y didáctica) que recomiendo en esa misma página, acá.

Glosario

Gestor de paquetes (Package manager)

Gestor de paquetes

Qué es un gestor de paquetes?

En la mayoría de las distribuciones de Linux se incluye un "Package manager" o "Gestor de paquetes". Esto es un programa que, esencialmente, se encarga de bajar otros programas por nosotros. Sería el antecesor de lo que hoy son las "App Stores" en los celulares. Al igual que las app stores, además de bajar e instalar paquetes, este programa se utiliza también para actualizar, mantener y eliminar las cosas que instalamos con ellos. En ese sentido, nos simplifica un poco las cosas: En lugar de tener que bajar archivos, instalar drivers y dependencias, y demás, sólo tenemos que bajar un cierto paquete y el programa instala todo lo necesario para que funcione.

apt

apt es el gestor de paquetes instalado por defecto en Ubuntu, y en todos los distros de Linux basados en Debian (como Ubuntu lo es). Vamos a usarlo seguido en nuestro servidor, y frecuentemente, ya que los siguientes dos comandos, apt update y apt upgrade, son los que se encargan de actualizar todos los paquetes (programas) que instalemos a través de este método. Ambos comandos deben ser ejecutados como administrador. El comando normalmente escrito para actualizar sería:

sudo apt update && sudo apt upgrade

(el && significa que, si el primer comando se corrió con éxito, se pueda correr el segundo)

Para instalar los paquetes sin que nos pregunte si aceptamos instalar cada uno, podemos correr en cambio:

sudo apt update && sudo apt upgrade -y

Glosario

Docker

Este artículo todavía no existe :3

Docker

Acá va a ir la definición de Docker

Docker compose

Acá voy a explicar cómo funciona docker compose

ToDo

Delineado de artículos pendientes para la guía


Preparativos

Servicios

Navidrome

Jellyfin

Cockpit

Qué es Cockpit?

Cockpit es una interfaz visual a través de la cual podemos interactuar con nuestro servidor. Nos permite hacer varias cosas, como revisar el estado del mismo (cuánto CPU o RAM está gastando y en qué), o particularmente, subir o bajar archivos al mismo de manera simple.

Instalar Cockpit

La instalación de cockpit es muy simple. Simplemente tenemos que escribir estos dos comandos:

. /etc/os-release
sudo apt install -t ${VERSION_CODENAME}-backports cockpit

Una vez escritos, cockpit estará instalado. Para acceder, tendríamos que escribir la IP de nuestro servidor en un navegador web, seguido por ":9090". Por ejemplo, si la IP es 192.168.0.134, deberíamos acceder a 192.168.0.134:9090 (para lxs curiosxs, el dos puntos indica a través de qué puerto queremos establecer la conexión con el servidor; Cockpit "escucha" conexiones hechas al puerto 9090.

cockpit_login.png

Una vez que escribimos la dirección, nos recibe esta pantalla de login. Para iniciar sesión, vamos a usar nuestro usuario común de linux.

Una vez adentro, vamos a poder hacer las cosas mencionadas arriba, además de actualizar paquetes y más.

Captura de pantalla 2026-01-22 a la(s) 2.06.51 a. m..png

Arreglar bug de conexión a internet

Por cuestiones complejas, suele pasar que cockpit no es capaz de conectarse a internet para bajar paquetes o actualizarlos. La solución a esto consiste en tres pasos:

  1. Crea el archivo /etc/NetworkManager/conf.d/10-globally-managed-devices.conf con el comando: sudo nano /etc/NetworkManager/conf.d/10-globally-managed-devices.conf` y escribí el siguiente contenido:
[keyfile]
unmanaged-devices=none
  1. Escribí el siguiente comando para crear una interfaz de red "de maniquí":
nmcli con add type dummy con-name fake ifname fake0 ip4 1.2.3.4/24 gw4 1.2.3.1
  1. Reiniciá la computadora (con sudo reboot)

Después de estos pasos, no deberías tener más este problema.

Instalar extensión "Files"

"Files" o "Cockpit-Files" es una extensión que nos va a permitir cargar y descargar archivos a y desde nuestro servidor de manera simple y con su interfaz gráfica. Para instalarlo, vamos a tener que correr uno por uno estos comandos:

sudo add-apt-repository ppa:pitti/cockpit-files
sudo apt update
sudo apt install cockpit-files

Una vez instalado, si refresheamos o volvemos a entrar a la interfaz. nos vamos a encontrar con una nueva secciíon llamada "File Browser":

file_browser_cockpit.png

Dentro de esta sección vamos a poder manejar los archivos que encontramos en nuestro servidor.