📡 Mi Servidor Casero: Caso de Estudio Real, Problemas y Soluciones

En artículos anteriores te hemos contado qué es un servidor casero y qué hardware elegir. Ahora toca la parte real: cómo es mi setup actual, qué servicios corro, qué problemas me he encontrado y cómo los solucioné.

Esto no es teoría de manual. Es mi experiencia con errores, parches de madrugada y lecciones aprendidas a base de cagarlas.

🖥️ Mi hardware actual (2025)

Servidor principal: Build custom AMD

  • CPU: AMD Ryzen 7 5700X (8 cores, 16 threads, 65W TDP)
  • Placa base: ASUS TUF Gaming B550-PLUS
  • RAM: 64GB DDR4 3600MHz (4x16GB Crucial Ballistix)
  • Almacenamiento:
    • 1TB NVMe Gen3 (Kingston KC3000) – Sistema y VMs
    • 500GB SATA SSD (Samsung 870 EVO) – Docker volumes críticos
    • 2x 8TB HDD WD Red Plus – Almacenamiento masivo RAID 1
  • Red: 2x Gigabit Ethernet (onboard + tarjeta PCIe)
  • Caja: Fractal Design Meshify 2 (excelente airflow)
  • Fuente: Corsair RM750 80+ Gold modular
  • UPS: APC Back-UPS 1500VA (autonomía ~15min a carga media)

Consumo medido:

  • Idle: 55-65W
  • Media (con VMs activas): 80-100W
  • Pico (todos los contenedores + transcoding): 150W

Coste electricidad: ~7-10€/mes (kWh a 0.15€)

Hardware secundario

  • Raspberry Pi 4 (8GB): Pi-hole + Unbound (DNS local)
  • Laptop viejo (i5-4300U, 8GB): Backup server con rsync automático nocturno
  • Synology DS220+: NAS dedicado (backups críticos + Plex transcoding offload)

🐳 Software: Proxmox + Docker Stack

Sistema base: Proxmox VE 8.1

Proxmox me permite correr VMs (máquinas virtuales completas) y LXC containers (contenedores Linux ligeros) en un mismo host.

¿Por qué Proxmox y no solo Docker?

  • Necesito VMs Windows ocasionalmente (testing, software legacy)
  • Aislamiento total entre servicios críticos
  • Snapshots antes de updates
  • Interfaz web cómoda para gestión remota

VMs que corro actualmente

  1. Ubuntu Server 22.04 LTS «Production» (16GB RAM, 4 cores)
    • Docker stack principal (ver servicios abajo)
    • Nginx Proxy Manager (reverse proxy con SSL automático)
    • Portainer (gestión Docker vía web)
  2. Ubuntu Server «Testing» (8GB RAM, 2 cores)
    • Pruebas antes de desplegar en producción
    • n8n workflows experimentales
  3. Windows 10 LTSC (8GB RAM, 4 cores)
    • Software que no corre en Wine
    • Apagada 95% del tiempo
  4. TrueNAS Scale (8GB RAM, 2 cores, passthrough discos)
    • Gestión RAID 1 de los WD Red
    • Shares SMB/NFS para backups

🚀 Servicios que corro (Docker en VM Production)

Productividad y automatización

  • Nextcloud (AIO) – Nube personal (archivos, calendarios, contactos, notas)
  • n8n – Automatización workflows (publicación blog, scraping, notificaciones)
  • Vaultwarden – Gestor contraseñas autoalojado
  • Paperless-ngx – OCR y gestión documental (facturas, contratos)
  • Linkwarden – Gestor de marcadores (alternativa a Pocket)

Multimedia

  • Jellyfin – Servidor multimedia (películas, series, música)
  • Navidrome – Servidor música (subsonic API)
  • Audiobookshelf – Audiolibros y podcasts
  • Komga – Cómics y mangas
  • Calibre-web – Biblioteca eBooks

Infraestructura

  • Nginx Proxy Manager – Reverse proxy con SSL automático Let’s Encrypt
  • Portainer – Gestión contenedores Docker
  • Uptime Kuma – Monitorización servicios (alertas si algo cae)
  • Dockge – Editor visual de docker-compose.yml
  • Homepage – Dashboard con todos los servicios

Seguridad y red

  • Wireguard – VPN para acceso remoto seguro
  • Authelia – 2FA para servicios sin autenticación propia
  • Fail2ban – Bloqueo IPs con intentos de acceso sospechosos
  • Crowdsec – IDS colaborativo (detecta ataques)

Desarrollo y testing

  • Gitea – Git server privado (repos propios)
  • Code-server – VSCode en navegador (programar desde tablet)
  • PostgreSQL + Redis – Bases de datos para proyectos

Otros

  • FreshRSS – Lector RSS (feeds blogs/noticias)
  • Stirling-PDF – Herramientas PDF (merge, split, OCR)
  • Excalidraw – Diagramas y bocetos colaborativos
  • Actual Budget – Gestor finanzas personales

Total contenedores Docker activos: 35-40 simultáneos

🌐 Acceso desde internet: Mi setup de red

Dominio y DNS

  • Dominio: Registrado en Cloudflare (~10€/año)
  • DNS: Cloudflare con proxy desactivado (nube gris) para servicios autoalojados
  • Subdominios: nextcloud.midominio.com, n8n.midominio.com, etc.

Router y firewall

  • Port forwarding: Solo 80 y 443 hacia Nginx Proxy Manager
  • Todo el resto: Acceso vía VPN Wireguard (puerto 51820)

Seguridad en capas

  1. Cloudflare: Protección DDoS básica (aunque con proxy desactivado)
  2. Nginx Proxy Manager: SSL automático, access lists, rate limiting
  3. Authelia: 2FA (TOTP) para servicios sensibles
  4. Fail2ban + Crowdsec: Bloqueo IPs maliciosas automático
  5. VPN: Servicios administrativos (Portainer, Proxmox) SOLO vía VPN

⚠️ Problemas que me encontré y cómo los solucioné

Problema 1: Corrupción de contenedores Docker por apagones

Síntoma: Después de un apagón eléctrico, varios contenedores no arrancaban (bases de datos PostgreSQL corruptas, volúmenes Docker dañados).

Causa: Escrituras en disco no sincronizadas cuando se fue la luz.

Solución:

  1. Compré UPS (APC 1500VA) para autonomía de 15 minutos
  2. Configuré NUT (Network UPS Tools) para apagado automático ordenado si batería <20%
  3. Script que detiene contenedores Docker antes de apagar Proxmox:
# /etc/nut/upssched.conf
CMDSCRIPT /usr/local/bin/upssched-cmd

# /usr/local/bin/upssched-cmd
case $1 in
    onbatt)
        logger "UPS on battery"
        ;;
    lowbatt)
        logger "UPS battery low - shutting down"
        pct exec 100 -- docker stop $(docker ps -q)  # Detener Docker en VM ID 100
        sleep 10
        shutdown -h now
        ;;
esac

Resultado: Cero corrupciones desde entonces.

Problema 2: Rendimiento de Nextcloud pésimo

Síntoma: Subir/bajar archivos en Nextcloud era dolorosamente lento (500KB/s en red Gigabit).

Causa: Configuración PHP por defecto muy conservadora + Redis no configurado.

Solución:

  1. Activé Redis para caché de sesiones y archivos:
# En Nextcloud AIO ya viene con Redis, solo ajusté config.php
'memcache.local' => '\OC\Memcache\APCu',
'memcache.distributed' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => [
  'host' => 'nextcloud-aio-redis',
  'port' => 6379,
],
  1. Aumenté límites PHP en docker-compose.yml:
environment:
  - PHP_MEMORY_LIMIT=2G
  - PHP_UPLOAD_LIMIT=10G

Resultado: Velocidad subió a ~80MB/s (límite de mi red 1Gbps compartida).

Problema 3: n8n workflows fallaban aleatoriamente

Síntoma: Workflows de n8n se colgaban o devolvían errores de timeout sin razón aparente.

Causa: n8n en Docker con recursos limitados (1GB RAM asignada, CPU throttling).

Solución:

  1. Aumenté RAM del contenedor a 4GB
  2. Configuré N8N_EXECUTION_TIMEOUT a 300 (5 min en lugar de 60s)
  3. Separé n8n en VM propia (en lugar de compartir con otros servicios)
version: "3.7"
services:
  n8n:
    image: n8nio/n8n:latest
    restart: unless-stopped
    environment:
      - N8N_EXECUTION_TIMEOUT=300
      - N8N_LOG_LEVEL=debug
    deploy:
      resources:
        limits:
          memory: 4G
        reservations:
          memory: 2G

Resultado: Workflows pesados (scraping con Playwright) ahora funcionan sin problemas.

Problema 4: Disco NVMe lleno constantemente

Síntoma: Proxmox avisaba de disco lleno cada 2-3 semanas.

Causa: Logs de Docker sin rotación + snapshots de VMs acumulándose + imágenes Docker viejas.

Solución:

  1. Configuré rotación de logs Docker:
# /etc/docker/daemon.json
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}
  1. Script cron para limpieza automática:
#!/bin/bash
# /usr/local/bin/docker-cleanup.sh

# Borrar imágenes sin usar
docker image prune -a -f --filter "until=720h"  # Más de 30 días

# Borrar volúmenes huérfanos
docker volume prune -f

# Borrar build cache
docker builder prune -a -f --filter "until=168h"  # Más de 7 días

# Logs Proxmox
journalctl --vacuum-time=7d
# Crontab (cada domingo 3am)
0 3 * * 0 /usr/local/bin/docker-cleanup.sh >> /var/log/docker-cleanup.log 2>&1
  1. Borré snapshots viejos manualmente (ahora uso max 2 snapshots por VM)

Resultado: Espacio libre estable en ~30-40% del disco.

Problema 5: Jellyfin tartamudeaba con archivos 4K

Síntoma: Reproducir películas 4K HEVC causaba buffering constante.

Causa: Jellyfin transcodificando por CPU (muy lento).

Solución:

  1. Pasé transcoding a Synology DS220+ (tiene Intel Quick Sync)
  2. Configuré Jellyfin para usar hardware acceleration:
Dashboard → Playback → Hardware Acceleration:
- VA-API (en Synology con Docker)
- Device: /dev/dri/renderD128
  1. Monté /dev/dri en contenedor Docker:
services:
  jellyfin:
    devices:
      - /dev/dri:/dev/dri
    group_add:
      - "989"  # Grupo 'render'

Resultado: 4K HEVC → 1080p H.264 transcoding en tiempo real sin buffering.

📊 Costes reales (2025)

Hardware (inversión inicial)

  • Servidor custom: ~1100€
  • UPS: 150€
  • Raspberry Pi 4 8GB kit: 110€
  • Synology DS220+: 280€ (comprado usado)
  • Discos 2x 8TB WD Red Plus: 320€

Total hardware: ~1960€ (amortizado en 3 años = 55€/mes)

Costes recurrentes

  • Electricidad: ~9€/mes
  • Dominio: ~10€/año (~1€/mes)
  • Cloudflare: Gratis (plan free)
  • Let’s Encrypt SSL: Gratis

Total mensual: ~10€/mes (sin contar amortización hardware)

Comparativa con cloud equivalente

Si contratara servicios cloud equivalentes:

  • Nextcloud 1TB: ~10€/mes (Hetzner Storage Share)
  • n8n Cloud Pro: ~50€/mes
  • Bitwarden Premium: ~10€/año
  • Plex Pass: ~5€/mes
  • VPS 8GB RAM: ~20€/mes

Total cloud: ~85€/mes = 1020€/año

Mi setup se paga solo en ~2 años comparado con cloud, y luego es profit.

📈 Monitorización: Cómo sé que todo funciona

Uptime Kuma

Monitoriza todos los servicios cada 60s. Si algo cae:

  • Notificación push vía Telegram Bot
  • Email de alerta

Servicios monitorizados:

  • Checks HTTP (Nextcloud, n8n, Jellyfin, etc.)
  • Docker containers (vía Docker socket)
  • Proxmox API (estado VMs)
  • Pi-hole DNS

Grafana + Prometheus (intenté y abandoné)

Monté Grafana con Prometheus para métricas detalladas… pero era overkill para mis necesidades. Uptime Kuma + logs de Proxmox son suficientes para mi escala.

🔄 Backups: La parte más importante

Regla 3-2-1:

  • 3 copias de datos importantes
  • 2 tipos de almacenamiento diferentes
  • 1 copia offsite (fuera de casa)

Mi estrategia actual

  1. Datos críticos (Nextcloud, Vaultwarden, Paperless):
    • Backup diario automático a Synology (rsync)
    • Backup semanal a disco USB externo (rotado mensualmente)
    • Backup mensual cifrado a Backblaze B2 (~5€/mes por 100GB)
  2. Configuraciones (docker-compose, scripts):
    • Git privado en Gitea
    • Sincronizado a GitHub privado como backup offsite
  3. Multimedia (Jellyfin):
    • NO hago backup (puedo re-descargar si se pierde)
    • Metadata y configuración sí (Jellyfin database)
  4. VMs Proxmox:
    • Snapshot semanal antes de updates
    • Máximo 2 snapshots por VM (espacio limitado)

Script de backup crítico

#!/bin/bash
# Backup diario Nextcloud, Vaultwarden, Paperless a Synology

BACKUP_DIR="/mnt/synology/backups/$(date +%Y-%m-%d)"
mkdir -p $BACKUP_DIR

# Nextcloud (parar contenedor, backup, reiniciar)
docker exec nextcloud-aio-nextcloud php occ maintenance:mode --on
rsync -avz /var/lib/docker/volumes/nextcloud_data/ $BACKUP_DIR/nextcloud/
docker exec nextcloud-aio-nextcloud php occ maintenance:mode --off

# Vaultwarden (backup SQLite + attachments)
docker exec vaultwarden sqlite3 /data/db.sqlite3 ".backup '/data/db-backup.sqlite3'"
rsync -avz /var/lib/docker/volumes/vaultwarden_data/ $BACKUP_DIR/vaultwarden/

# Paperless (export vía comando propio)
docker exec paperless document_exporter /tmp/export
rsync -avz /var/lib/docker/volumes/paperless_export/ $BACKUP_DIR/paperless/

# Borrar backups >30 días
find /mnt/synology/backups/ -type d -mtime +30 -exec rm -rf {} \;

# Notificar éxito
curl -X POST "https://ntfy.sh/miserver" -d "Backup completado $(date)"

Ejecutado vía cron cada noche a las 3am.

💡 Lecciones aprendidas

1. Empieza simple, escala después

Mi primer server fue una Raspberry Pi 3 con Pi-hole y Nextcloud. No montes Kubernetes en el primer día.

2. Documenta TODO

Cuando algo se rompe a las 2am, tu yo del futuro agradecerá tener un README.md con comandos y configuraciones.

3. Backups automáticos o no existen

Si el backup requiere acordarte manualmente, eventualmente olvidarás hacerlo justo antes del desastre.

4. No expongas servicios innecesariamente

Portainer, Proxmox, bases de datos: SOLO accesibles vía VPN. Nunca directamente a internet.

5. Monitoriza con alertas

Si no sabes que algo está roto hasta que intentas usarlo, llegas tarde. Uptime Kuma + notificaciones push salvan vidas.

6. UPS no es opcional

Aprendí por las malas. Perdí 3 días de trabajo por una corrupción de PostgreSQL. 150€ en UPS los recuperé en paz mental.

7. Snapshots antes de updates

Siempre. Siempre. Siempre. Proxmox hace snapshots en segundos. Úsalos.

8. La comunidad es oro

Reddit (r/selfhosted, r/homelab), foros de Proxmox, Discord de servicios específicos. Alguien ya tuvo tu problema y lo solucionó.

❓ FAQs sobre mi setup

¿Por qué Proxmox y no solo Docker en Ubuntu?

Proxmox me da:

  • Snapshots de VMs completas antes de updates
  • Aislamiento total (una VM comprometida no afecta al resto)
  • Posibilidad de correr Windows cuando lo necesito
  • Interfaz web para gestión remota sin SSH

¿Cuánto tiempo dedicas al mantenimiento?

~2-3 horas al mes:

  • Updates de Proxmox y VMs: 1h/mes
  • Updates de contenedores Docker (Watchtower automático)
  • Revisar logs de Uptime Kuma: 30min/mes
  • Experimentar con servicios nuevos: 1-2h/mes (hobby)

¿Qué haría diferente si empezara de cero?

  1. Comprar UPS desde día 1
  2. Usar solo Docker Compose (evitar docker run manual)
  3. Documentar configuraciones en Git desde el inicio
  4. Empezar con 32GB RAM (amplié de 16GB a 64GB, hubiera ahorrado 32GB intermedios)
  5. Elegir caja con mejor acceso a discos (cambiar HDD es un coñazo en mi Meshify 2)

¿Merece la pena vs pagar cloud?

si:

  • Te gusta trastear y aprender
  • Valoras privacidad y control total
  • Usarás múltiples servicios (no solo 1-2)
  • Tienes internet estable con buen upload

No si:

  • Solo quieres una web/blog (usa Webempresa o similar)
  • No tienes tiempo para mantenimiento ocasional
  • Vives en sitio con cortes de luz frecuentes sin UPS
  • Tu internet es inestable

¿Tuviste problemas con el ISP por tráfico?

No. Mi ISP (Movistar Fibra 600Mbps) no tiene límites de datos ni me han dicho nada por tráfico. Uso ~2-3TB/mes subida+bajada.

¿Cómo manejas actualizaciones sin downtime?

No las manejo. 😄 Mi servidor es para uso personal, acepto 15-30min de downtime mensual para updates.

Si necesitara alta disponibilidad, montaría cluster Proxmox con 3 nodos (migración de VMs en vivo).

¿Qué harías si se te rompe el servidor?

  1. Bootear laptop de backup con Ubuntu live
  2. Restaurar backup de Synology a disco USB
  3. Correr servicios críticos (Nextcloud, Vaultwarden) en Docker directo
  4. Ordenar componente de reemplazo (24-48h)

Con backups 3-2-1, perder hardware es molesto pero no catastrófico.

🎸 Resumen punk

Mi servidor casero NO es perfecto. Ha tenido caídas, corrupciones, y noches arreglando cosas a las 2am. Pero me ha enseñado más sobre Linux, redes, virtualización y Docker que cualquier curso online.

Y lo más importante: Controlo mis datos. Google/Microsoft no tienen mis archivos, contraseñas ni emails. Cuando mi internet falla, sigo teniendo mi nube local funcionando.

Si estás pensando en montar tu homelab: hazlo. Empieza con algo simple (Pi-hole en Raspberry Pi), aprende, rompe cosas, arregla, y escala.

La comunidad r/selfhosted está esperándote con memes, ayuda y demasiadas ideas de servicios para instalar. 🚀

Por ziru

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x
El Diario IA
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.