¿Por qué un NAS en Docker y no hardware dedicado?

Un servidor NAS casero con Docker ofrece flexibilidad, escalabilidad y reducción de costes frente a soluciones hardware tradicionales. Con contenedores, puedes ejecutar múltiples servicios en un solo dispositivo (incluso en un Raspberry Pi o un mini-PC) sin depender de NAS comerciales como Synology o QNAP. Docker simplifica la implementación de herramientas como Nextcloud para almacenamiento en la nube personal, Plex para streaming multimedia o duplicati para copias de seguridad automáticas. Además, los contenedores aislados evitan conflictos de dependencias y facilitan las actualizaciones. Si buscas un sistema modular y bajo mantenimiento, Docker es la mejor opción para tu homelab.


Requisitos mínimos: hardware y software

Para un NAS funcional con Docker no necesitas un ordenador potente. Un equipo con 4GB de RAM y un procesador de doble núcleo (como un Intel Core i3 o un ARM de 64 bits) es suficiente para servicios ligeros. Si trabajas con archivos grandes (vídeos 4K, bases de datos), apunta a 8GB de RAM y un disco SSD para el sistema. Ejemplos prácticos:

  • Raspberry Pi 4/5: Ideal para servicios básicos (Nextcloud, external mounts de NAS).
  • Mini-PC Intel N100: Equilibrio entre consumo y rendimiento (ej. Beelink EQ12).
  • Servidor x86 reciclado: Desde un Dell Optiplex hasta un HP ProLiant DL380 con Xeon.

Sistema operativo: Ubuntu Server (22.04 LTS o 24.04) o Debian Stable. Evita Windows por su consumo excesivo de recursos. Para Docker, sigue las instrucciones de instalación estándar:

# Ubuntu/Debian
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker  # Aplica cambios sin reiniciar

Configuración inicial: discos y permisos

Montar discos para almacenamiento

  1. Disco de datos externo/internal: Conéctalo y verifica su ubicación con lsblk o sudo fdisk -l.
    lsblk -o NAME,SIZE,TYPE,MOUNTPOINT
    
  2. Formatea en ext4 (evita NTFS por limitaciones de permisos en Linux):
    sudo mkfs.ext4 /dev/sdX1  # Reemplaza X con tu disco
    
  3. Montaje automático: Edita /etc/fstab para que el disco arranque al iniciar el sistema. Ejemplo:
    sudo nano /etc/fstab
    
    Añade la línea:
    /dev/sdX1  /mnt/datos  ext4  defaults,nofail  0  2
    
    • nofail: Evita errores si el disco no está conectado.
  4. Permisos: Asegura que Docker acceda al disco con el comando:
    sudo chown -R 1000:1000 /mnt/datos  # IDs 1000 (usuario por defecto en Docker)
    

Docker Compose: el pilar de tu NAS

Docker Compose permite definir múltiples servicios en un solo archivo YAML. Crea un directorio para tus configuraciones:

mkdir ~/nas-docker && cd ~/nas-docker
sudo nano docker-compose.yml

Ejemplo práctico: Nextcloud + PostgreSQL

version: '3.8'
services:
  nextcloud:
    image: lscr.io/linuxserver/nextcloud:latest
    container_name: nextcloud
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Madrid
    volumes:
      - ./nextcloud/config:/config
      - /mnt/datos/enlaces:/data  # Persistencia en tu disco
    ports:
      - 8080:80
    restart: unless-stopped

  postgres:
    image: postgres:15
    container_name: postgres-nas
    environment:
      - POSTGRES_PASSWORD=tu_contraseña_secreta
    volumes:
      - ./postgres/db:/var/lib/postgresql/data
    restart: unless-stopped

Notas clave:

  • Volúmenes: Reemplaza /mnt/datos/enlaces por tu ruta real.
  • Contraseñas: Usa variables de entorno o un gestor como Bitwarden.
  • Redes: Si necesitas aislar servicios, añade networks a tu YAML.

Servicios imprescindibles para tu NAS

1. Almacenamiento en la nube: Nextcloud + OnlyOffice

# Añade al docker-compose.yml
  onlyoffice:
    image: onlyoffice/documentserver:latest
    container_name: onlyoffice
    ports:
      - 8082:80
    restart: unless-stopped
  • Configuración: En Nextcloud, ve a Apps > OnlyOffice y añade la URL http://ip_servidor:8082.

2. Streaming multimedia: Plex

  plex:
    image: lscr.io/linuxserver/plex:latest
    container_name: plex
    environment:
      - PUID=1000
      - PGID=1000
    volumes:
      - ./plex/config:/config
      - /mnt/datos/series:/media/series  # Rutas de tus archivos
      - /mnt/datos/peliculas:/media/peliculas
    ports:
      - 32400:32400
    restart: unless-stopped
  • Importante: Configura las rutas de las carpetas en la interfaz de Plex (ajusta los nombres de volumen según el ejemplo).

3. Copias de seguridad automatizadas: Duplicati

  duplicati:
    image: duplicati/duplicati:latest
    container_name: duplicati
    ports:
      - 8200:8200
    volumes:
      - ./duplicati/config:/config
    restart: unless-stopped
  • Configuración: Accede a http://ip_servidor:8200 y define backup desde/hacia Google Drive, SFTP o otro NAS.

Seguridad básica sin complicaciones

  1. Contraseñas robustas: Usa Vaultwarden (alternativa a Bitwarden) para gestionarlas.
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    ports:
      - 8081:80
    volumes:
      - ./vaultwarden/data:/data
    restart: unless-stopped
  1. Acceso remoto seguro: Configura NGINX + Nginx Proxy Manager para proxies inversos y SSL (Let’s Encrypt).
  nginx-proxy:
    image: jc21/nginx-proxy-manager:latest
    container_name: nginx-proxy
    ports:
      - 80:80
      - 443:443
      - 81:81  # Interfaz web
    volumes:
      - ./proxy/data:/data
    restart: unless-stopped
  • Dominio: Usa un subdominio como nas.tudominio.esy configura el DNS a tu IP pública (o a través de Cloudflare Tunnels si no tienes IP fija).

Backup y mantenimiento: no lo olvides

Backups automáticos con BorgBase

  borgbase:
    image: fractalidevops/borgbase:latest
    container_name: borgbase
    volumes:
      - /mnt/datos/backups:/backups
    environment:
      - BACKUP_PASSWORD=tu_contraseña_borg
    restart: unless-stopped
  • Frecuencia: Configura un cronjob en tu host:
    0 3 * * * docker exec borgbase borg create /backups/nas-$(date +\%F)::%C
    

Limpieza de contenedores e imágenes

docker system prune -f --volumes
  • Cuidado: Este comando elimina volúmenes no usados. Revisa antes con docker system df.

Solución de problemas comunes

Problema Causa Solución
Permisos denegados en Nextcloud El usuario PUID/PGID no coincide con el de los volúmenes Verifica id $USER en el host y ajusta los valores en el YAML.
Plex no detecta archivos La ruta en volumes es incorrecta Usa ls -l /mnt/datos para confirmar la ruta absoluta.
Docker no arranca tras un reinicio Problemas con /etc/fstab o Docker Revisa logs con journalctl -u docker -n 50.

Conclusión: tu NAS listo para producción

Con Docker, tu NAS casero será escalable, económico y fácil de mantener. Empieza con servicios básicos (Nextcloud + PostgreSQL para datos) y añade herramientas como Plex, duplicati o vaultwarden según necesites. La clave está en:

  1. Documentar tus configuraciones (usa Markdown o un cuaderno).
  2. Monitorear recursos con htop y Docker Stats (docker stats).
  3. Actualizar regularmente (docker-compose pull && docker-compose up -d).

Prueba primero en un entorno local y, cuando todo funcione, configura el acceso remoto con seguridad robusta. ¡Tu homelab en Docker está listo para almacenar, sincronizar y proteger tus datos!