Un Mac mini de 2012 rescatado de la chatarra electrónica sirve de servidor casero
El equipo, con Ubuntu Server 24.04, aloja Nextcloud, Immich, Paperless-ngx y AdGuard Home en Docker, sin abrir un solo puerto al exterior.

Un Mac mini de finales de 2012 que alguien había tirado a un montón de chatarra electrónica es hoy el servidor doméstico de su dueño. Él mismo ha publicado el inventario completo de lo que corre en la máquina y de cómo se mueven los datos entre las piezas. Cuando Apple dejó de dar soporte a macOS en ese hardware, le instaló Ubuntu Server 24.04 y ahí sigue.
Por debajo hay un Intel i5-3210M con dos núcleos y cuatro hilos, 16 GB de RAM tras una ampliación, un SSD de 250 GB para el sistema y 1 TB para archivos, más dos discos de 8 TB: uno para fotos y archivo, otro para copias locales. Las automatizaciones de casa no viven ahí, sino en un Home Assistant Green aparte, para que no se caigan si el servidor se cae.
Qué corre dentro
Buena parte del stack es sustitución de servicios de pago. Nextcloud hace de Google Drive y Dropbox; Immich, de Google Photos; Paperless-ngx, de archivador, con un escáner con alimentador que va dejando los documentos en la carpeta que vigila. Stirling PDF cubre lo que antes resolvía con iLovePDF y Smallpdf, y SplitPro sustituye a Splitwise después de que este metiera funciones detrás de un muro de pago. AdGuard Home ocupa el sitio de Pi-hole y NextDNS, PriceBuddy el de CamelCamelCamel, y Uptime Kuma el de UptimeRobot. Kopia se encarga de las copias locales versionadas y de una copia cifrada fuera de casa. A eso se suma un planificador de comidas escrito por él, con una extensión de Chrome que mete la lista de la compra en el carrito del supermercado, y BirdNET con un micrófono USB en la ventana que identifica aves por su canto.
Casi todo va en Docker. La parte de las aves vive en un contenedor LXD, y no por capricho.
Lo que le mordió
No hay puertos reenviados. Lo poco que tiene que ser público sale por un túnel de Cloudflare, parte detrás de Cloudflare Access, y el resto solo es accesible por Tailscale.
El procesador tiene AVX pero no AVX2. Las ruedas actuales de tflite-runtime mueren al instante con un "Illegal instruction"; con tflite-runtime 2.14 y numpy 1.26 funciona. El instalador de BirdNET, además, asume que es dueño de la máquina: reinicia al terminar, actualiza paquetes y añade reglas sudo amplias, de ahí que acabara encerrado en LXD. Después de un reinicio el micrófono USB apareció con otro número de tarjeta ALSA y el contenedor se quedó con la tarjeta de sonido interna: grabó silencio durante unas 20 horas mientras la interfaz web se veía perfectamente sana. Ahora un temporizador revisa el micrófono cada 2 minutos. El primer micrófono era un receptor inalámbrico con techo de 8 kHz, así que las aves agudas no aparecían nunca; un lavalier USB alámbrico barato lo arregló.
El interés de este montaje no está en el hardware, que es reciclado y modesto, sino en el catálogo de trampas que deja escrito: la instrucción que falta, el instalador invasivo, el dispositivo que cambia de nombre tras un reinicio y miente desde la interfaz. Cualquiera que mantenga un servidor casero con contenedores se va a cruzar con alguna.
