Hace un tiempo descubrí el mundo del selfhosting gracias a CasaOS, y desde entonces no he dejado de montar servicios propios con Docker para reemplazar las dependencias que tenía en plataformas de terceros. En este post quiero compartir el stack que he armado, los problemas que resolví en el camino y cómo terminé exponiendo algunos de estos servicios a internet sin tener una IP pública.

Mi primera prueba seria fue con Jellyfin, y fue todo un descubrimiento. Por fin tenía un lugar centralizado para todas las películas que había ido recolectando con el tiempo, disponibles desde cualquier dispositivo y, sobre todo, con la posibilidad de compartirlas con amigos sin depender de un servicio de streaming.

Lo que empezó como un servidor de películas terminó creciendo: hoy también uso Jellyfin para organizar mi música y mis series, todo desde el mismo lugar.

Cambiar de navegador y darme cuenta de que mi historial de bookmarks podía perderse o quedar inconsistente en la migración fue la señal de alarma que necesitaba. Eso me llevó a buscar una forma de almacenar mis links de forma independiente del navegador que estuviera usando, así que ahora los gestiono en mi propio servidor en lugar de depender de los favoritos de Chrome o Firefox.

También tengo mi propia instancia personal de Bitwarden usando Vaulwarden, lo que me permite gestionar todas mis contraseñas sin depender de los servidores de un tercero. Es uno de los servicios que más tranquilidad me da, porque mis credenciales quedan bajo mi propio control.

Tener un solo lugar para ver Hacker News, videos de YouTube, el clima y feeds RSS ha sido sorprendentemente útil. Glance se convirtió en mi punto de entrada diario para mantenerme al tanto de lo último en tecnología sin tener que saltar entre diez pestañas distintas.

Con todos los cambios cuestionables que ha tenido GitHub últimamente, me interesaba tener algo propio donde alojar mis repositorios. Gitea me permite tener una especie de GitHub personal, y de paso lo uso también para correr mis pipelines de CI/CD.

Para notas relacionadas con programación uso Memos, funcionando como una especie de Gist personal: fragmentos de código, comandos que siempre olvido, configuraciones puntuales, todo en un solo lugar.

Sure me ha resultado muy útil para llevar el control de mis finanzas, tanto que hasta mis padres la usan ahora.

Este es uno de los proyectos que más disfruté construir: un organizador de música propio. Subo el archivo y el sistema se encarga de clasificarlo, ordenarlo y buscar las letras (lyrics) automáticamente, usando búsquedas en paralelo para que el proceso sea rápido. Esto en combinación con Jellyfin ha sido extremadamente útil, ahora lo único que me falta es tiempo para escuchar tanta música.

En mi casa imprimir documentos era complicado porque la impresora (Epson L220) solo funcionaba conectada por cable a un único equipo. Usando CUPS logré convertirla en una impresora inalámbrica accesible desde cualquier dispositivo de la red, sin tener que comprar una impresora nueva.

Aquí llegó la parte más interesante (y más complicada) de todo el proceso. El problema: estoy detrás de una red CG-NAT, lo que significa que no tengo una IP pública propia. Podría conseguir una contratando un servicio adicional con mi proveedor, pero por ahora no me interesa pagar por eso.
La solución que encontré fue usar una imagen Docker de Cloudflare Tunnel, que me permite exponer mis servicios a internet sin necesidad de abrir puertos ni tener una IP pública.

Para todo lo demás —como administrar mi servidor por SSH o acceder a servicios que no tienen autenticación incorporada, como Glance— uso Tailscale. Esto me da una red privada para gestión remota.
Este stack sigue creciendo. El selfhosting no solo me dio control sobre mis datos, también me convirtió en una persona que entiende mucho mejor cómo funciona la infraestructura que antes daba por sentada en servicios de terceros.