Aventuras Con Un Servidor Propio
We run things, things don’t run we
– Miley Cyrus, probablemente hablando de su propio servidor
Hace un tiempo que vengo corriendo varios servicios en un servidorcito local en casa, y la verdad que, si tenés los conocimientos técnicos, lo recomiendo.
Todo arrancó con Amazon
Resulta que Amazon me tenía podrido. Tengo un Kindle, y la verdad que cero quejas con el hardware, pero el software no me gusta. Para empezar, es poco personalizable. Además, me muestra publicidad. No, no me refiero a en el lockscreen, me refiero a las “recomendaciones” que te tira. Y no soporta epub. Bueno, ahora parece que Amazon está empezando a soportar epub un poco más. Pero la última vez que probé, si querías usar epub, lo tenías que mandar a un servicio de ellos, y te lo convierten a su formato horrible y te lo mandan al Kindle. Una cagada.
Así que me quería sacar de arriba a Amazon. La solución: jailbreak e instalar Koreader. Y dejar de comprarle libros a Amazon, obviamente. El tema es, si salgo de la conveniencia del software de Amazon, cómo mando los libros al dispositivo.
Calibre
La solución estándar para manejar una colección de libros electrónicos es Calibre. Tenía una biblioteca en Calibre, sólo tenía que agregar los libros en el último tiempo. El problema es que, lamentablemente, Calibre no se adaptaba del todo a lo que yo quería. Calibre está diseñado para tener una biblioteca centralizada, y correr en una única computadora. Compartir la biblioteca de Calibre entre varias computadoras corriendo a la vez es una Muy Mala Idea. Lo intenté, no funcionó.
Pero ese fue mi primer paso: la biblioteca de Calibre en un disco de red, y corro Calibre cuando necesito hacer algo. No lo puedo tener corriendo contínuo, porque ahí no puedo acceder desde distintas computadoras. Pero bueno, necesito agregar un libro, abro Calibre, agrego libro, cierro Calibre. Necesito cargar un libro al Kindle, abro Calibre, me conecto con Koreader, bajo libro, cierro Calibre. Engorroso, pero funciona.
Calibre-web
“Engorroso” significa “quiero otra solución ya”. Calibre-web fue esa solución. Calibre-web es una app web que lee tu biblioteca de Calibre, y te da una interfaz web relativamente bonita. Te permite bajar libros, o leerlos derecho desde el navegador, y, lo importante para mi caso, tiene un servidor OPDS, al que puedo entrar con Koreader y bajar los libros de ahí.
La biblioteca ya la tenía en un disco de red (un disco duro conectado por USB al router, nada muy cheto), y ya tenía Calibre en mi computadora para agregar y administrar libros. Lo que me faltaba era instalar Calibre-web en algún lado y que accediera a ese disco de red.
El hardware
Así que me fui a revisar el cajón donde tengo tiradas las Raspberry Pi viejas, y ver si puedo instalar algo ahí. Nuevo problema: las raspberry pi que tenía son muy viejas, y de 32 bits. Y bueno, muy pocos recursos.
Así que salí a comprar una nueva. Sí, sí, ya sé, la empresa que las hace es una mierda, pero la realidad es que las alternativas no se consiguen fácil en Uruguay, y hay días que se me mete un proyecto en la cabeza y lo quiero hacer ya, así que compré una rpi 5. Y un disco duro, porque resultó que tampoco tenía un disco duro para enchufarle (no, el disco de red lo quería mantener ahí). Y un cargador especial, porque como ya dije, la empresa que hace las rpi es una mierda, y entre sus muchas cagadas, está el que si querés más de cierto amperaje no podés usar un cargador estándar USB-C, tiene que ser el de ellos, y sin ese amperaje no levantaba el disco duro. O, más bien, levantaba, y al principio todo bien, pero algo que aprendí temprano en esta experiencia es que si tenés un disco SSD, consume más cuanto más cosas le ponés. Entonces si en tu disco de dos teras le metés tres o cuatro gigas, no pasa nada, a la rpi con cargador normal le da bien, pero donde te pases de ponele 100 gigas, ahí de repente el disco hace pum y deja de andar. Nada grave las veces que me pasó, sólo reiniciar y se “arregla”, pero empieza a fallar al azar. Obviamente no quería dejar eso así, así que bueno, a poner plata para el cargador especial.
Y ya que estamos…
El tema es que una vez que tenés la infrastructura de hardware, y tenés un servicio andando, agregar otro servicio es fácil. Lo que hice fue un docker-compose.yml gigantesco, un servicio para que lo levante, y listo. Ya que tengo Calibre-web corriendo ahí, puedo entrar a poner otras cosas, y bueno, ahí es donde empiezan a correr las posibilidades.
Lo que tengo corriendo
Calibre-web
- Qué es: Un servicio para bajar y ver tu biblioteca de libros de Calibre.
- Qué reemplaza: Amazon
- Link: https://github.com/janeczku/calibre-web/
nginx-proxy y acme-companion
- Qué son: un reverse proxy y un servicio que genera certificados SSL usando Let’s Encrypt.
- Link:
Esto es esencialmente la infraestructura que permite meter varios servicios en el mismo docker-compose y que todo ande sin complicarse la cabeza.
Authelia
- Qué es: Un servicio de autenticación
- Link: https://www.authelia.com/
Authelia me permite usar el mismo usuario y contraseña para (casi) todos los servicios. Dependiendo del servicio, podés autenticar con Oauth, o con un encabezado, o si no soporta autenticación, directamente podés ponerle Authelia “adelante” y que deje pasar (o no) a un usuario.
LLDAP
- Qué es: Un directorio de usuarios
- Link: https://github.com/lldap/lldap
Authelia autentica, pero los usuarios los manejo con LLDAP. Hay otras opciones, pero bueno, por alguna razón perdida en la niebla de los tiempos llegué a esta.
Forgejo
- Qué es: Un “software forge”
- Link: https://forgejo.org/
- Qué reemplaza: Github
Es esencialmente Github pero lo controlás vos. Tenés repos públicos y privados, actions, deploy keys, y todos los chiches que podés extrañar de Github. El primer repositorio que le metí es el que tiene el docker-compose y las configuraciones de todos los servicios estos.
Además del container con Forgejo, tengo también otro con un runner para las acciones.
Wallabag
- Qué es: Un servicio para guardar links para “leer después”
- Link: https://wallabag.org/
- Qué reemplaza: Pocket o similares (si usabas de esos), o, en mi caso, tener un montón de tabs abiertos que me prometo a mí mismo que algún día voy a mirar.
Wallabag no se puede, hasta donde sé, hacer andar con Authelia, lo que lo hace el único servicio que me queda corriendo con sus propios usuarios. El tema es que lo uso, y me rinde, sobre todo con el plugin para Koreader, me bajo versiones epub de los artículos que tengo pendiente leer, y los voy leyendo en la pausa entre dos libros.
FreshRSS
- Qué es: Un lector de RSS
- Link: https://github.com/FreshRSS/FreshRSS
- Qué reemplaza: Al viejo y querido Google Reader, o, más cerca en el tiempo, Feedly, que aparte de querer venderme su cuenta pro me tenía podrido con sus avisos para que use la IA generativa pedorra que le metieron.
O, si querés, también reemplaza la necesidad de seguir cuentas en redes sociales para enterarte de lo que publica alguien en su blog, o webcomic, o lo que sea que tenga un feed RSS.
RSS es una maravilla de la vieja internet.
Backrest
- Qué es: Un servicio de backups incrementales
- Link: https://github.com/garethgeorge/backrest
Backrest me maneja los backups, y me olvido del tema. Hasta ahora, sólo tuve que recuperar del backup una o dos veces, y fue todo por culpa del problema de la corriente del disco duro que mencioné más arriba, pero nunca se puede tener suficientes backups. Si vas a tener tu propio servidor, y lo vas a usar para cualquier cosa que no sea simplemente jugar, necesitás backups.
Nextcloud
- Qué es: “Tu propia nube”
- Link: https://nextcloud.com/
- Qué reemplaza: Google Drive y (con Collabora) la suite de software de oficina de Google.
Nextcloud tiene también un montón de plugins para hacer un montón de cosas, muchas que sólo tienen sentido si tenés bastantes más usuarios que yo (que soy yo, y el resto de mi familia cuando no les dejo otra opción).
msmtpd
- Qué es: Un servidor SMTP chiquitito
- Link: https://marlam.de/msmtp/msmtp.html
En lugar de configurarle a cada servicio acceso a enviar emails por un servidor externo (uso ForwardEmail, tengo msmtpd corriendo en un container con la configuración para mandar el email hacia afuera, y sin ningún puerto abierto al exterior, y a todos los demás servicios les digo que manden a msmtpd a través de la red interna de Docker. Menos lío para configurar.
Mealie
- Qué es: Un repositorio de recetas y planificador de comidas.
- Link: https://mealie.io/
La verdad es que no estoy 100% feliz con Mealie, pero es el menos malo de los que probé para este objetivo. Me permite guardar recetas, y armarme un plan para la semana, y armar una lista de compras en base a ese plan. Es útil, lo uso, pero no me convence del todo el software en sí.
Searxng
- Qué es: Un “metabuscador”: busca en varios buscadores, y te compila una lista de resultados.
- Link: https://github.com/searxng/searxng
- Qué reemplaza: Google, más o menos
La verdad es que no reemplaza Google del todo, porque al final está también llamando a Google atrás para darte los resultados, así que no es una independencia real. Pero al menos me saca toda la publicidad sin tener que usar adblocker (que igual uso, obviamente), y me combina con resultados de otros buscadores. Esto último da una cuota de humor cuando me aparece un resultado de Bing, porque inevitablemente es algo que no tiene nada que ver con nada.
Como nota al margen, Searxng debe ser el servicio que tengo con la configuración más compleja de Authelia. No es que sea tan complicado tampoco, pero si entro desde mi red local, no necesito usuario y contraseña, pero si entro desde afuera de la red, entonces sí.
PiHole
- Qué es: Un bloqueador de publicidad a nivel DNS
- Link: https://github.com/pi-hole/pi-hole
- Qué reemplaza: No reemplaza, pero complementa a un buen adblocker a nivel navegador.
Postgresql
- Qué es: Un motor de base de datos
- Link: https://www.postgresql.org/
Lo uso como almacenamiento de datos para varios servicios, y también a veces para jugar. También tengo PGAdmin para entrar a mirar.
Grist
- Qué es: Una especie rara de hoja de cálculo
- Link: https://www.getgrist.com/
- Qué reemplaza: Google Spreadsheets
Básicamente, es una hoja de cálculo en la que cada columna tiene un tipo definido (ok, es una base de datos, pero con interfaz de hoja de cálculo), y donde las fórmulas pueden incluir funciones en Python.
La contra: no escala muy bien. Si tu base de datos es muy grande, recalcular empieza a tomar su tiempo. Igual para mis casos de uso, estoy más que sobrado. Y supongo que si estás usando Google Spreadsheets, no estás hablando de millones de registros vos tampoco.
Mathesar
- Qué es: Un visualizador/manejador de bases de datos Postgres
- Link: https://mathesar.org/
La verdad todavía no le encontré un uso. Lo tengo por chivear.
Kanboard
- Qué es: Un gestor de proyectos tipo Kanban
- Link: https://kanboard.org/
Lo uso para planificar cosas mías, como materias en la facultad, me creo tareas para los temas y prácticos, y bueno, me ayuda a organizarme un poco. Es feo pero sencillo de usar.
La verdad es que después de tantas apps con mucho chiche visual, es refrescante una que simplemente funciona, es casi todo html, y no me quiere vender nada.
Home Assistant y ESPhome
Estos merecen un post aparte, lo prometo para algún momento del 2026. Pero cortita: “internet of things” y automatizaciones.
Node-red
- Qué es: Una herramienta para armar y automatizar procesamiento de datos
- Link: https://nodered.org/
- Qué reemplaza: Bash y cron, un poco
Es un poco un juguete. Podés armar un workflow visualmente enganchando pasos que se van tirando los datos de uno a otro.
Yo qué sé, no tiene mucha ventaja sobre bash+cron si sabés lo que estás haciendo. Podría haber hecho un container con cron y leyendo de un repositorio con los trabajos en bash, pero quería jugar.
Igual al final para lo único que lo uso es para leer mis datos de BGG y pasarlos a Grist.
Paperless
- Qué es: Un manejador de documentos
- Link: https://github.com/paperless-ngx/paperless-ngx
Es para guardar documentos. Escaneás algo, lo subís en PDF, y te hace un OCR y te reconoce varios datos. Incluso después de que tenés varios, te los clasifica automáticamente. Por ejemplo, ayer subí la cédula de mi hija, que me faltaba, y como se parece a la mía y a la de mi otra hija, me la clasificó automáticamente como cédula. Todavía insiste en decir que la fecha de creación es la fecha de nacimiento (y no la de expedición), pero bueno, detalles (es editable, igual, y al editar fechas te sugiere de otras que reconoce en el documento).
Otras cosas
Tengo también algunas cosas “de soporte”. Por ejemplo, un servicio que es un script que cada un minuto chequea mi IP pública y actualiza un registro DNS con la api de dnsimple (así no dependo de esos servicios de dyndns). También tengo un servicio para poder conectarme a la consola via web (con seguridad apropiada, obviamente). Y también un servicio que verifica que todos los otros containers estén andando bien, y si alguno está mal, lo reinicia.
Qué no tengo
Bueno, el universo de las cosas que no tengo en el servidor es obviamente enorme. Pero de lo que estaría bueno tener, lo más notorio es un servidor de correo. El tema es que mantener un servidor de correo andando bien, y sin que te filtren todos los correos, hoy en día, tiene bastantes vueltas, y no sé si me animo todavía. Así que, por el momento, sigo un poco preso de GMail. Pero todo a su debido tiempo.
También en algún momento intenté poner un servicio de videollamadas, pero también tuve dramas. Algún día voy a volver a intentar.
Para terminar
La verdad es que es un ejercicio interesante empezar a sacarse de arriba todas las boludeces de las empresas tecnológicas. Estamos cada vez más dependiendo de servicios externos, con un montón de consecuencias en las que no nos detenemos a pensar ni un ratito. Es más conveniente usar Google, y Amazon, y todo eso, sí. Pero a veces está bueno ir por lo menos conveniente.
Y se siente bien aprender cosas nuevas.