Fa uns dies vaig llegir un article on l’autor repassava, un per un, tots els serveis que té funcionant a casa, quins ha descartat i per què. M’agradà prou, i em va fer pensar que jo també tinc un homelab que ha anat creixent sense massa planificació… i que mai no he explicat ací. Així que, com qui no vol la cosa, ací va la meua versió.
La cosa començà fa uns anys amb el Home Assistant i quatre contenidors per a la domòtica. Després vingué el controlador de la xarxa UniFi, després el Pi-hole, i este estiu, en un parell de setmanes, el servidor multimèdia, tota la cadena de descàrregues, una aplicació de finances i una aplicació de receptes que m’he fet jo. Com sempre passa: un servei en porta un altre, i quan te n’adones, tens un repositori de git amb deu carpetes i una llista de ports que ja no recordes.
Les normes (més o menys)
L’autor de l’article original té unes normes molt clares: res exposat a internet, binaris natius sempre que es puga, i res de Docker. En la primera coincidim; en les altres dues… faig quasi el contrari. Estes són les meues:
- Tot és Docker Compose, i tot està en git. Cada servei (o grup de serveis) té la seua carpeta amb un
docker-compose.ymli, si fa falta, unREADME.mdexplicant com està muntat. Si demà se’m crema el servidor, la idea és que tornar a aixecar-ho tot siga ungit clonei uns quantsdocker compose up -d. No és tan elegant com un binari de Go, però és el mateix patró per a tot, i això també té el seu valor. - Les dades, fora dels contenidors. Res de volums amb nom: tot va a
/srv/volumes/<servei>, així sé sempre on està cada cosa i fer còpies de seguretat és copiar directoris. - El contingut multimèdia, al NAS. Tinc un Synology que fa de magatzem, muntat per NFS al servidor. (Ací hi ha una història de bloquejos de fitxers que no acaba bé, més avall.)
- Res de casa exposat a internet. Tot és local. Si vull accedir a alguna cosa des de fora, passe per Tailscale. I el que necessite tindre accessible des de qualsevol lloc, sense VPN, no viu a casa: viu en un VPS (més avall).
- Documentar mentre ho faig. Cada vegada més, quan munte alguna cosa, deixe escrit en el README què he fet i, sobretot, per què. El Xavi d’ací a sis mesos m’ho agrairà. O això espere.
El maquinari
Tot el que conte en este article funciona en un mini PC xicotet, amb un Intel N97 i 16 GB de RAM. Res de l’altre món, però per a sorpresa meua, dona per a molt més del que esperava.
Hi corre Proxmox, dividit en dues màquines virtuals:
- Una amb Home Assistant OS, que va a la seua i que prefereix no compartir casa amb ningú.
- Una altra que fa d’amfitrió de Docker, on viuen tots els serveis que explique més avall.
Com que una imatge val més que mil paraules (i este article en té moltes més), ací va com queda tot plegat:

Al costat hi ha un NAS Synology que fa de magatzem per a tot el multimèdia (i per a moltes altres coses), l’electrònica de xarxa d’UniFi, i un coordinador Zigbee SMLight SLZB-06M, connectat per xarxa, per parlar amb tots els aparells de la casa.
El Synology té ja 12 anys. Dotze. Ha complit de sobra, però li toca jubilar-se. I el mini PC, amb 16 GB, comença a anar just: per exemple, no té marge per a una tercera VM per a UniFi OS Server (més avall ho explique).
La segona iteració
Per això tinc preparada la segona versió del homelab, que substituirà alhora el mini PC i el Synology. Està basada, bàsicament, en este vídeo:
- Una caixa Jonsbo N4 (negra), que té lloc per a discos durs i per a una placa xicoteta.
- Un Intel N305 amb 16 GB de RAM.
- Tres discos WD de 12 TB.
La idea era muntar-ho tot durant la baixa de paternitat recent. Tenia temps, tenia les peces, tenia ganes… El que no tenia en compte és que durant una baixa de paternitat, mira tu per on, cal cuidar un bebé. Així que la majoria de components continuen dins les seues caixes, precintats, mirant-me cada vegada que passe pel costat.
Quan estiga muntada, ja en faré un article. Algun dia.
Els serveis
Per ordre alfabètic, com en l’original.
Home Assistant
El motiu pel qual tot això existeix. Home Assistant és el centre de tota la domòtica de casa: llums, persianes, sensors, escenes… i ara, també, la campana extractora de la cuina (vegeu Zigbee2MQTT, que la història s’ho val). No m’imagine fent el mateix amb Google Home o Alexa, ni tampoc vull.
Home Assistant OS, en la seua pròpia VM de Proxmox.
Jellyfin
El meu «Netflix» casolà. Jellyfin servix les pel·lícules i les sèries que tinc al NAS, i també alguns vídeos personals (sí, el de la boda també està ací). Funciona bé a la tele, al mòbil i al navegador, i no hi ha cap «potser també t’agradarà» ni cap capítol que comença sol.
Jellyseerr
Si Jellyfin és el Netflix, Jellyseerr és el botó de «vull vore açò». Busques una pel·lícula o una sèrie, la demanes, i la resta de la cadena (Radarr/Sonarr) s’encarrega de la resta. Ideal per a la gent de casa que no vol saber res de com funciona per dins.
Mosquitto
El broker MQTT. Mosquitto és d’eixes peces avorrides que funcionen i ja està: Zigbee2MQTT publica, Home Assistant escolta, i jo no m’hi he hagut de barallar mai.
Nginx Proxy Manager
El reverse proxy. Nginx Proxy Manager s’encarrega de donar a cada servei el seu subdomini, amb certificat de Let’s Encrypt i HTTPS. Es configura des d’una interfície web, que no és tan «infraestructura com a codi» com voldria, però per a afegir un servei nou en dos minuts és imbatible.
El truc és tindre un domini propi on els subdominis apunten a IPs de la xarxa local: casa.<el-meu-domini> per al Home Assistant, dns.<el-meu-domini> per al Pi-hole, i així amb tot. Des de fora de casa no porten enlloc (llevat que estiga connectat per Tailscale), però des de dins són noms fàcils de recordar en lloc d’una IP i un port. I els certificats? Let’s Encrypt no pot connectar amb un servidor que no és accessible des d’internet, així que Nginx Proxy Manager fa servir l’API de Hetzner per a crear els registres DNS del repte i demostrar que el domini és meu. Resultat: HTTPS de veritat, sense avisos del navegador, per a serveis que mai no han estat exposats.
Un petit avís per al Xavi del futur (i per a qui vinga de l’altre projecte que es diu quasi igual): este no llig les variables VIRTUAL_HOST. Això és jwilder/nginx-proxy. Ho he hagut d’apuntar en més d’un README.
Pi-hole
DNS de casa i bloquejador de publicitat. Pi-hole filtra la publicitat i els rastrejadors de tota la xarxa, i a més té el seu propi contenidor de Tailscale al costat, així que quan estic fora de casa continue usant el mateix DNS.
Efecte secundari: els anuncis de Google no responen quan els cliques… cosa que la targeta de crèdit agraïx.
Prowlarr, Radarr, Sonarr i qBittorrent (l’*arr stack)
Ací és on més em distancie de l’article original. L’autor diu que l’*arr stack li sembla «un desgavell que consumix molts recursos i que es trenca sovint». Jo el vaig muntar este estiu i… de moment, cap problema. Bé, un sí: els bloquejos d’NFS.
Resulta que Radarr i Sonarr fan un flock() quan escriuen a la carpeta de pel·lícules o sèries. Si el NAS està muntat per NFS sense més, eixe bloqueig s’envia al servei de bloquejos del Synology, que no sempre contesta… i la petició es queda penjada per sempre. Tot penjat, cap error clar, i un dmesg ple de lockd: server not responding, still trying. La solució és muntar-lo amb local_lock=all. Dues paraules. Unes quantes hores.
- Prowlarr gestiona els indexadors.
- Radarr s’encarrega de les pel·lícules.
- Sonarr s’encarrega de les sèries.
- qBittorrent fa la feina bruta.
Receptes
L’única aplicació d’esta llista que m’he fet jo, i de la que estic més content. És un gestor de receptes per a tota la família: les pots escriure a mà, enganxar l’enllaç d’una web o fer-li una foto a la pàgina d’un llibre de cuina, i un model de llenguatge n’extrau els ingredients i els passos (que sempre pots revisar abans de guardar). Després, a la cuina, té un mode pas a pas a pantalla completa, que no deixa que s’apague la pantalla del mòbil i que escala les quantitats segons els comensals.
I, per descomptat, en català primer (i també en castellà i anglés). Els ingredients es tradueixen automàticament amb el traductor de Softcatalà.
Fastify, React i SQLite, en un sol contenidor. De moment, el codi no és públic.
Sure
Finances personals. Sure és la bifurcació comunitària de Maybe, que va deixar de mantindre’s. Serveix per a portar el control de comptes, despeses i pressupostos. O això diuen: de moment encara està en mode «prova», i no m’he decidit a abocar-hi totes les meues finances.
Ací també desobeïsc l’article original, que deia que si un servei només ve amb un Docker Compose que vol MySQL, Redis i tres contenidors més, ja està buscant alternatives. Sure vol una web, un worker, PostgreSQL i Redis. I un cinqué contenidor que fa còpies de seguretat de la base de dades cada nit, perquè són dades financeres i no vull jugar-me-la.
Tailscale
La VPN. Tailscale fa de subnet router per a tota la xarxa de casa i de node de sortida, així que des de qualsevol lloc puc accedir a tot com si estiguera a casa, i quan estic en una wifi pública dubtosa puc fer passar tot el trànsit per casa. Abans tenia un WireGuard muntat a mà; Tailscale ha fet que no haja de tornar a pensar-hi.
UniFi Network Application
El controlador de la xarxa (punts d’accés, switches…). Ubiquiti està deixant de banda esta aplicació en favor d’UniFi OS Server, i el controlador no para de recordar-m’ho. Però UniFi OS Server no es pot executar en un contenidor, necessita la seua pròpia VM, i ara mateix el servidor no té marge per a això. Així que la decisió, conscient i documentada, és quedar-me on estic fins que Ubiquiti retire els paquets i LinuxServer.io deixe de mantindre la imatge. Mentrestant: còpies .unf automàtiques i a esperar (o que la segona iteració isca de les caixes, el que passe abans).
L’altre deute tècnic d’ací és el MongoDB 4.4, que fa temps que no té suport. Actualitzar-lo vol dir passar per 5.0, 6.0 i 7.0 un per un. Una vesprada tranquil·la ho faré. Un dia.
Zigbee2MQTT
El pont entre els dispositius Zigbee i MQTT. Zigbee2MQTT és el que fa que puga comprar sensors i interruptors de qualsevol marca i que tots acaben a Home Assistant.
La història més recent: la campana extractora de la cuina només es pot controlar amb un comandament d’infrarojos (no té cap botó!), i els comandaments de recanvi són cars. Així que vaig posar un emissor d’infrarojos Zigbee, vaig capturar els codis del comandament (NEC, 38 kHz, per als curiosos) i ho vaig connectar tot a Home Assistant. Tot funcionava perfectament… excepte la campana, que només responia de tant en tant.
Després de revisar capa per capa MQTT, Zigbee2MQTT i Home Assistant, de comprovar amb la càmera del mòbil que l’emissor sí que emetia, i fins i tot d’obrir l’emissor per descobrir que no és omnidireccional, la conclusió va ser… que el comandament original també funcionava només de tant en tant. Així que la culpa havia de ser del receptor de la campana, que està just al mig del flux d’aire de l’extracció. Segur que estava ple de greix.
I sí, ho estava. Però no era només això: les piles del comandament original també estaven quasi esgotades. Un comandament amb poca força apuntant a un receptor cobert de greix… normal que la campana fera el que li donava la gana.
Tota una nit de depuració i una placa desmuntada per acabar netejant un receptor i canviant unes piles. 🤣
I els xicotets
- DNS dinàmic: un contenidor xicotet que actualitza un registre DNS a Hetzner cada vegada que canvia la IP de casa. Tenia tot el sentit quan usava WireGuard; ara, amb Tailscale, sobreviu més per inèrcia que per necessitat.
I fora de casa: un VPS
Hi ha serveis que vull tindre accessibles des de qualsevol lloc i des de qualsevol dispositiu, sense haver d’activar cap VPN. Com que la norma és no obrir res de casa a internet, eixos viuen en un VPS personal:
- Vaultwarden: el gestor de contrasenyes, compatible amb els clients oficials de Bitwarden.
- Joplin Server: per a sincronitzar les notes de Joplin entre tots els dispositius.
- Uptime Kuma: per a saber si alguna cosa ha caigut abans que algú de casa m’ho diga.
I ara què?
Com sempre amb estes coses, la llista no està mai acabada.
El primer, evidentment, és muntar la segona iteració i migrar-ho tot (i jubilar el Synology amb els honors que es mereix).
Després, vull provar Immich per a deixar de dependre de Google Fotos, i afegir un lector d’RSS, que ja toca.
Però, de moment, tot funciona. I quan alguna cosa deixa de funcionar, almenys sé on mirar. O això crec, no?
0 comentaris a «El meu homelab, v1»