¿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
- Disco de datos externo/internal: Conéctalo y verifica su ubicación con
lsblkosudo fdisk -l.lsblk -o NAME,SIZE,TYPE,MOUNTPOINT - Formatea en ext4 (evita NTFS por limitaciones de permisos en Linux):
sudo mkfs.ext4 /dev/sdX1 # Reemplaza X con tu disco - Montaje automático: Edita
/etc/fstabpara que el disco arranque al iniciar el sistema. Ejemplo:Añade la línea:sudo nano /etc/fstab/dev/sdX1 /mnt/datos ext4 defaults,nofail 0 2nofail: Evita errores si el disco no está conectado.
- 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/enlacespor tu ruta real. - Contraseñas: Usa variables de entorno o un gestor como Bitwarden.
- Redes: Si necesitas aislar servicios, añade
networksa 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:8200y define backup desde/hacia Google Drive, SFTP o otro NAS.
Seguridad básica sin complicaciones
- 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
- 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:
- Documentar tus configuraciones (usa Markdown o un cuaderno).
- Monitorear recursos con
htopy Docker Stats (docker stats). - 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!