🖥️ NAS Casera — Guía Completa Paso a Paso


Preparación

Esta guía cubre TODOS los pasos desde cero hasta tener una NAS funcionando con apps, proxy inverso, HTTPS y acceso remoto. Sigue el orden exacto. No te saltes ningún paso.

Requisitos antes de empezar

Hardware:

  • Portátil viejo + HDD 1TB en caddy + dock con 2 discos
  • Cable Ethernet conectado del portátil NAS al router
  • USB de 4GB+ para la instalación
  • Tu PC principal (para controlar todo)

Descargas (en tu PC principal):

⚠️ Usa Balena Etcher para grabar el USB, NO Rufus. Rufus puede modificar la estructura de la ISO y provocar errores de instalación (debootstrap). Balena Etcher graba la ISO tal cual y es lo que recomienda Debian.

Cuentas:


Instalar DEBIAN + OMV

Paso 1 — Crear USB bootable

Dónde: En tu PC principal Herramienta: Balena Etcher

  1. Abrir Balena Etcher
  2. “Flash from file” → seleccionar la ISO de Debian
  3. “Select target” → seleccionar tu USB
  4. “Flash!” → esperar a que termine Y que verifique
  5. Listo, no toques el USB

⚠️ No uses Rufus. Puede causar errores de “debootstrap” al instalar Debian.

Paso 2 — Instalar Debian

⚠️ El portátil debe estar conectado al router por cable Ethernet ANTES de empezar. La instalación necesita internet para descargar paquetes.

Teclas comunes del menú de arranque por marca: HP = F9, Dell = F12, Lenovo = F12, Acer = F2, Asus = F8/ESC

  1. Pinchar el USB en el portátil NAS
  2. Encender → pulsar la tecla del menú de arranque → seleccionar USB
  3. Aparece el instalador de Debian → seleccionar “Install” (no Graphical Install)
  4. Seguir el asistente:
PantallaQué elegir
IdiomaEspañol
UbicaciónEspaña
TecladoEspañol
Hostnamenas (o el nombre que quieras)
Dominio(dejar vacío, pulsar Enter)
Contraseña rootPoner una segura → APUNTARLA
Nombre completo usuarioTu nombre
Nombre de usuarioTu nombre en minúsculas
Contraseña usuarioPoner otra segura → APUNTARLA
Zona horariaMadrid
Particionado”Guiado - utilizar todo el disco”
DiscoSeleccionar el SSD (NO el HDD del caddy)
Esquema”Todos los ficheros en una partición”
Confirmar”Finalizar el particionado y escribir cambios” → Sí
Mirror de redEspaña → deb.debian.org
Proxy(dejar vacío, pulsar Enter)
Participar en encuestaNo
Selección de softwareDESMARCAR TODO excepto: ☑ SSH server ☑ Standard system utilities (NO marcar entorno de escritorio, NO marcar GNOME)
GRUBSí, instalar en el disco principal → seleccionar el SSD

⚠️ En la selección de software: usa la barra espaciadora para marcar/desmarcar. Enter confirma y continúa, NO desmarca. Si le das a Enter sin querer, se instalará con escritorio GNOME y tendrás que reinstalar.

  1. Esperar a que termine → reiniciar → quitar el USB

Paso 3 — Primer login en Debian

  1. Aparece: nas login:
  2. Escribir tu nombre de usuario → Enter
  3. Escribir tu contraseña → Enter (no se ve lo que escribes, es normal)

Paso 4 — El truco del jefe: su vs su -

Tu usuario normal no tiene permisos de administrador. Necesitas cambiar a root:

su -

Te pide la contraseña de root. La escribes → Enter.

Ahora ves: root@nas:~# (la # en vez de $ significa que eres root)

💡 ¿Por qué su - y no su? El guion carga el entorno completo de root. Sin él, muchos comandos no se encontrarán.

Paso 5 — Preparar los permisos (sudo)

usermod -aG sudo TU_USUARIO
reboot

Paso 6 — Instalar OpenMediaVault

su -
wget -O - https://github.com/OpenMediaVault-Plugin-Developers/installScript/raw/master/install | bash

💡 Si el pipe | no funciona por el teclado:

wget https://github.com/OpenMediaVault-Plugin-Developers/installScript/raw/master/install -O install.sh
bash install.sh

⚠️ Es NORMAL ver letras rojas sobre NTP. Ignóralas. Cuando termine verás: Done. rc=0

Paso 7 — Obtener la IP de la NAS

ip addr show

Busca inet 192.168.X.XXAPÚNTALA

💡 También puedes ver la IP desde el panel del router → dispositivos conectados.

Paso 8 — Configurar que no se apague al cerrar la tapa

⚠️ OBLIGATORIO. Sin esto, al cerrar la tapa la NAS se suspende.

su -
sed -i 's/#HandleLidSwitch=suspend/HandleLidSwitch=ignore/' /etc/systemd/logind.conf
sed -i 's/#HandleLidSwitchDocked=ignore/HandleLidSwitchDocked=ignore/' /etc/systemd/logind.conf
systemctl restart systemd-logind

Paso 9 — Cerrar el portátil y dejarlo trabajando

  1. Cierra la tapa del portátil NAS
  2. Déjalo conectado: Ethernet ✅ Cargador ✅ Dock ✅
  3. A partir de ahora NUNCA MÁS tocas el portátil NAS directamente
  4. Todo lo controlas desde tu PC

Primeras configuraciones en OMV

  1. Cambiar a IP Fija → Panel del router → DHCP estático → 192.168.X.10 (elige tu IP)
  2. Entrar al panel de OMV → cambiar contraseña (usuario: admin / contraseña: openmediavault)
  3. Actualizaciones → Sistema → Gestión de actualizaciones → Instalar todas
  4. Cambiar DNS → Red → Interfaces → “Dirección IP de los servidores DNS” → 1.1.1.1 y activar SSL
  5. Servicios → SMB/CIFS → Activar → Configuración → “Opciones adicionales” → pegar:
vfs objects = fruit streams_xattr
ea support = yes
map acl inherit = yes
smb3 directory leases = no

Discos

Limpiar discos

Almacenamiento → Discos → Borrar (Quick) los 3 discos de datos

Montar disco del caddy

Sistema de archivos → Crear → ext4 → Montar

Instalar OMV Extras

Primero activar _ssh en Usuarios → Usuarios → Editar → Grupos. De paso añadir: adm, sudo, docker, sambashare

💡 Si ya instalaste antes, borra el fingerprint:

ssh-keygen -R TU_IP_NAS
ssh TU_USUARIO@TU_IP_NAS
su -
wget -O - https://github.com/OpenMediaVault-Plugin-Developers/packages/raw/master/install | bash

Hacer que el PC nunca se apague

sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target

Instalar plugin de RAID

Sistema → Plugins → openmediavault-md → Instalar

Crear mirror (RAID 1)

Múltiples Dispositivos → + Crear → RAID1 o ESPEJO

Si no te salen los discos, aplicar por SSH:

ssh TU_USUARIO@TU_IP_NAS
su -
 
# Crear el RAID 1 (Mirror) - Escribe 'y' cuando pregunte
mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdc /dev/sdd
 
# Obligar a OMV a leer la configuración
mdadm --detail --scan >> /etc/mdadm/mdadm.conf
update-initramfs -u

REINICIAR la NAS después.

Montar el mirror

Sistema de Archivos → seleccionar md0 → Montar → ext4


Usuarios

Crear nuevos usuarios si necesitamos (recomendado):

  • Grupos: users
  • Shell: /usr/bin/bash

Carpetas

Añadir en Almacenamiento → Carpetas compartidas

Estructura

DISCO CADDY (lo descargable/reemplazable):
├── Media          ← compartir por SMB
│   ├── Peliculas  ← subcarpeta desde Windows
│   ├── Series
│   └── Musica
├── Descargas      ← compartir por SMB
├── Software       ← compartir por SMB
├── appdata        ← NO compartir (config Docker)
├── compose        ← NO compartir (archivos compose)
├── data           ← NO compartir (datos apps)
└── docker         ← NO compartir (instalación Docker)

DISCO MIRROR (lo que NO puedes perder):
├── Personal       ← compartir por SMB
│   ├── Fotos_Familia
│   ├── Documentos_Familia
│   └── Videos_Familia
├── Profesional    ← compartir por SMB
│   ├── Estudios
│   ├── Certificaciones
│   ├── Scripts
│   └── YouTube
├── Backups        ← compartir por SMB
│   ├── Moviles
│   └── PCs
└── backup         ← NO compartir (backup configs Docker)

Crear permisos

Usuarios → Seleccionar user → Permisos de carpeta compartida → Dar permiso a los usuarios para cada carpeta que se desee


Compartir en red (SMB)

Activar SMB

Servicios → SMB/CIFS → Configuración → Habilitado Habilitar ACL y Permisos heredados

Compartir carpetas

Servicios → SMB/CIFS → Compartidos → Crear → seleccionar carpeta → Añadir Heredar ACL y Permisos

REINICIAR después de configurar.


Conectar desde Windows

\\TU_IP_NAS\CARPETA

💡 Si no te entra:

net use * /delete /y
net stop lanmanworkstation /y
net start lanmanworkstation

Docker y Compose (La Base)

Preparar Docker

Sistema → OMV-Extras → Activar Docker → pulsar Apt Clean

Compose

Sistema → Plugins → buscar compose → Instalar

En Usuarios → Usuarios → Editar → Grupos → En el usuario admin → Primero activar.

Servicios → Compose → Configuración:

  • Carpeta compartida: compose (Poner de propietario a tu usuario y grupo users)
  • Datos: appdata
  • Respaldo: backup
  • Propietario: tu usuario → Grupo: users / permisos lectura y escritura propietario y grupo

Las carpetas Docker:

  • Compose: Los planos de nuestras apps
  • AppData: El corazón y configuración de las apps
  • Backup: Una copia de seguridad de nuestros planos, alojada en el RAID 1 para máxima seguridad
  • Docker: Donde va instalado Docker

Instalar apps desde Compose

Servicios → Compose → Archivos → Crear o importar desde ejemplos

Para cada app editar 3 cosas:

  1. Rutas (Volumes): reemplazar /CHANGE/ME por tus rutas absolutas. Las encuentras en Almacenamiento → Carpetas Compartidas → columna “Ruta absoluta”. Cópialas en un bloc de notas.
  2. Permisos (PUID/PGID): verificar en Usuarios → UID y GID (normalmente 1000 y 100).
  3. Puerto: que no esté en uso por otra app.

Herramientas de Gestión (Local)

FileBrowser

YAML

services:
  filebrowser:
    image: filebrowser/filebrowser:latest
    container_name: filebrowser
    user: 1000:100
    environment:
      - PUID=1000
      - PGID=100
      - UMASK=000
    ports:
      - "8080:80"
    volumes:
      # Carpetas del CADDY (cambia el UUID por el tuyo)
      - /srv/dev-disk-by-uuid-TU_UUID_CADDY/Media:/srv/Media
      - /srv/dev-disk-by-uuid-TU_UUID_CADDY/Descargas:/srv/Descargas
      - /srv/dev-disk-by-uuid-TU_UUID_CADDY/Software:/srv/Software
      - /srv/dev-disk-by-uuid-TU_UUID_CADDY/appdata:/srv/appdata
      # Carpetas del MIRROR (cambia el UUID por el tuyo)
      - /srv/dev-disk-by-uuid-TU_UUID_MIRROR/Personal:/srv/Personal
      - /srv/dev-disk-by-uuid-TU_UUID_MIRROR/Profesional:/srv/Profesional
      - /srv/dev-disk-by-uuid-TU_UUID_MIRROR/Backups:/srv/Backups
      # Config de FileBrowser
      - /srv/dev-disk-by-uuid-TU_UUID_CADDY/appdata/filebrowser/database:/database
      - /srv/dev-disk-by-uuid-TU_UUID_CADDY/appdata/filebrowser/config:/config
    restart: always

Acceder: Usuarios → permisos → dar permisos a tu usuario. Abrir: http://TU_IP_NAS:8080 La contraseña la primera vez → seleccionar filebrowser → herramientas → logs → cambiar la pass una vez logueado.

💡 Falta de Permisos: Si no te entra por falta de permisos, prueba en Carpetas compartidas → seleccionar appdata → poner como propietario al usuario → dar permisos y ACL → y después quitar. A veces el server lo crea como root y hay que forzar. Si no funciona, por SSH:

sudo chown -R 1000:100 /srv/dev-disk-by-uuid-TU_UUID_CADDY/appdata/

Lo que verás en FileBrowser

/
├── Media/
├── Descargas/
├── Software/
├── appdata/
├── Personal/
├── Profesional/
└── Backups/

Infraestructura de Red y Proxy

Cambiar puerto de OMV (Crucial antes de NPM)

Desde el panel de OMV:

  • Sistema → Área de trabajo → Puerto → cambiar de 80 a 8888
  • Guardar → Aplicar cambios

⚠️ Perderás la conexión. Espera 30 segundos y entra con: http://TU_IP_NAS:8888

Abrir puertos en el router

Panel del router → Internet → Redirección de puertos:

ServicioPuerto públicoPuerto LANIP destinoProtocolo
NAS-HTTP8080TU_IP_NASTCP
NAS-HTTPS443443TU_IP_NASTCP

APLICAR CAMBIOS

⚠️ SOLO estos 2 puertos. NADA más.

DuckDNS

Crear cuenta y dominio

Ir a https://www.duckdns.org → crear cuenta → crear dominio → copiar token.

Configurar script para sincronizar IP automáticamente

ssh TU_USUARIO@TU_IP_NAS
su -
mkdir -p ~/duckdns
apt install curl -y
nano ~/duckdns/duck.sh

Pegar esto en el archivo (cambia TU_DOMINIO y TU_TOKEN):

#!/bin/bash
# Script para actualizar DuckDNS
 
DOMAIN="TU_DOMINIO.duckdns.org"    # Cambia por tu dominio
TOKEN="TU_TOKEN_AQUI"              # Cambia por tu token real
 
curl -k -s "https://www.duckdns.org/update?domains=${DOMAIN}&token=${TOKEN}&ip=" > ~/duckdns/duck.log
cat ~/duckdns/duck.log

Guardar (Ctrl+O → Enter → Ctrl+X) y ejecutar:

chmod 700 ~/duckdns/duck.sh
./duckdns/duck.sh
cat ~/duckdns/duck.log

¿Dice OK? → Automatizar:

crontab -e

(Si pregunta qué editor, elige 1 para nano). Añadir al final:

*/5 * * * * ~/duckdns/duck.sh >/dev/null 2>&1

Guardar (Ctrl+O → Enter → Ctrl+X → exit dos veces).

Nginx Proxy Manager (NPM)

YAML

Servicios → Compose → Archivos → Crear → Levantar servicio

services:
  npm:
    image: jc21/nginx-proxy-manager:latest
    container_name: nginx-proxy-manager
    ports:
      - "80:80"
      - "443:443"
      - "81:81"
    volumes:
      - /srv/dev-disk-by-uuid-TU_UUID_CADDY/appdata/npm:/data
      - /srv/dev-disk-by-uuid-TU_UUID_CADDY/appdata/npm-letsencrypt:/etc/letsencrypt
    restart: unless-stopped

Después para y arranca Nginx Proxy Manager:

  • Servicios → Compose → selecciona nginx-proxy-manager → ⬛ Down → ▶ Up

Acceder: Abrir: http://TU_IP_NAS:81 Login: admin@example.com / changeme → Te obliga a cambiar email y contraseña.

Certificado HTTPS (Wildcard)

En Nginx Proxy Manager (http://TU_IP_NAS:81):

  1. SSL Certificates → Add SSL Certificate → Let’s Encrypt
  2. Domain Names (añadir los dos, pulsar Enter después de cada uno):
    • TU_DOMINIO.duckdns.org
    • *.TU_DOMINIO.duckdns.org
  3. Activar “Use a DNS Challenge”
  4. DNS Provider: DuckDNS
  5. En dns_duckdns_token= → pegar tu token de DuckDNS
  6. Aceptar términos → Save

💡 Si no lo crea, poner 120 o más segundos de propagación para que le de tiempo.


Instalación de Aplicaciones

Jellyfin

Preparar

Crear carpetas Peliculas, Series, Musica dentro de Media (desde Windows o FileBrowser).

YAML

Servicios → Compose → Crear → Levantar servicio

services:
  jellyfin:
    image: jellyfin/jellyfin:latest
    container_name: jellyfin
    user: "1000:100"
    environment:
      - PUID=1000
      - PGID=100
      - TZ=Europe/Madrid
    ports:
      - "8096:8096"
    volumes:
      - /srv/dev-disk-by-uuid-TU_UUID_CADDY/appdata/jellyfin:/config
      - /srv/dev-disk-by-uuid-TU_UUID_CADDY/Media/Peliculas:/media/peliculas
      - /srv/dev-disk-by-uuid-TU_UUID_CADDY/Media/Series:/media/series
      - /srv/dev-disk-by-uuid-TU_UUID_CADDY/Media/Musica:/media/musica
    restart: unless-stopped

Acceder: Abrir: http://TU_IP_NAS:8096 Configurar idioma, crear usuario, añadir bibliotecas. Cuando añadas pelis → Panel de control → Bibliotecas → Escanear todo.

💡 Problema de permisos en Jellyfin: Si no te entra por falta de permisos, prueba en Carpetas compartidas → seleccionar appdata → poner como propietario al usuario → dar permisos y ACL → y después quitar. Si aún así no entra, ir por SSH:

sudo chown -R 1000:1000 /srv/dev-disk-by-uuid-TU_UUID_CADDY/appdata/*
sudo chmod -R 775 /srv/dev-disk-by-uuid-TU_UUID_CADDY/appdata/*

Conectar Jellyfin desde fuera de la red local

En Nginx Proxy Manager → Proxy HostsAdd Proxy Host:

CampoValor
Domain Namesjellyfin.TU_DOMINIO.duckdns.org
Forward Hostname/IPTU_IP_NAS
Forward Port8096
Pestaña SSLSeleccionar certificado wildcard → Force SSL

En la pestaña Advanced pegar:

client_max_body_size 512M;

location / {
    proxy_pass $forward_scheme://$server:$port;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Protocol $scheme;
    proxy_set_header X-Forwarded-Host $http_host;

    # Buffering off es vital para streaming de vídeo (Jellyfin)
    proxy_buffering off;
}

Nextcloud

YAML

Servicios → Compose → Añadir → Levantar servicio

services:
  nextcloud-db:
    image: mariadb:10.11
    container_name: nextcloud-db
    environment:
      MYSQL_ROOT_PASSWORD: TU_ROOT_PASSWORD_SEGURA
      MYSQL_DATABASE: nextcloud
      MYSQL_USER: nextcloud
      MYSQL_PASSWORD: TU_PASSWORD_NEXTCLOUD
    volumes:
      - /srv/dev-disk-by-uuid-TU_UUID_CADDY/appdata/nextcloud-db:/var/lib/mysql
    restart: unless-stopped
 
  nextcloud:
    image: nextcloud:latest
    container_name: nextcloud
    ports:
      - "8082:80"
    environment:
      MYSQL_HOST: nextcloud-db
      MYSQL_DATABASE: nextcloud
      MYSQL_USER: nextcloud
      MYSQL_PASSWORD: TU_PASSWORD_NEXTCLOUD
    volumes:
      - /srv/dev-disk-by-uuid-TU_UUID_CADDY/appdata/nextcloud:/var/www/html
      - /srv/dev-disk-by-uuid-TU_UUID_CADDY/Media:/mnt/Media:rw
      - /srv/dev-disk-by-uuid-TU_UUID_CADDY/Descargas:/mnt/Descargas:rw
      - /srv/dev-disk-by-uuid-TU_UUID_MIRROR/Personal:/mnt/Personal:rw
      - /srv/dev-disk-by-uuid-TU_UUID_MIRROR/Profesional:/mnt/Profesional:rw
    restart: unless-stopped

⚠️ Cambia las contraseñas por unas reales (sin arrobas ni caracteres raros). Tienen que ser diferentes entre sí.

Lo que hace cada volumen:

  • Personal → tus fotos y docs familia (mirror, protegido)
  • Profesional → tus proyectos y estudios (mirror, protegido)
  • Media y Descargas → contenido descargable (caddy)
  • appdata/nextcloud → configuración de Nextcloud (caddy)
  • appdata/nextcloud-db → base de datos MariaDB (caddy)

SI NO TE CONECTA!!

  1. Sino te conecta haz esto por SSH
nano /etc/docker/daemon.json
  1. Copia y pega exactamente esto (pon tu UIID de Disco):
{
  "data-root": "/srv/dev-disk-by-uuid-TU_UUID_CADDY/docker",
  "log-driver": "json-file",
  "log-opts": {
    "max-file": "3",
    "max-size": "50m"
  },
  "storage-driver": "overlay2",
  "dns": ["8.8.8.8", "1.1.1.1"],
  "ipv6": false,
  "iptables": false,
  "ip6tables": false,
  "registry-mirrors": ["https://mirror.gcr.io", "https://dockerhub.azk8s.cn"]
}

Guarda (Ctrl+O → Enter → Ctrl+X).

  1. Aplica los cambios:
systemctl restart docker
sleep 10
docker pull hello-world

Si el hello-world te ha cargado ya puedes volver a levantar desde OMV nextcloud

Permisos para Nextcloud (MUY IMPORTANTE)

💡 La imagen oficial de Nextcloud usa el usuario interno www-data (UID 33 y GID 33). El servidor a veces crea las carpetas como root, por lo que hay que forzar los permisos si falla el acceso.

1. Permisos para Nextcloud (Archivos y Sistema):

sudo chown -R 33:33 /srv/dev-disk-by-uuid-TU_UUID_CADDY/appdata/nextcloud
sudo chmod -R 775 /srv/dev-disk-by-uuid-TU_UUID_CADDY/appdata/nextcloud

2. Permisos para la Base de Datos (MariaDB):

sudo chown -R 999:999 /srv/dev-disk-by-uuid-TU_UUID_CADDY/appdata/nextcloud-db
sudo chmod -R 775 /srv/dev-disk-by-uuid-TU_UUID_CADDY/appdata/nextcloud-db

Acceder localmente: Abrir: http://TU_IP_NAS:8082

Si no te Entra a APPS en Nextcloud

Si no te entra a Apps hay que limpiar las caches, pon éstos 2 comandos por SSH

docker exec --user www-data -it nextcloud php occ config:system:set appstoreenabled --value false --type boolean

docker restart nextcloud

Configuración de Nextcloud - Estructura de Carpetas

Objetivo: Hacer que Nextcloud muestre exactamente la misma estructura de carpetas que vemos en FileBrowser y en Windows.

Paso 1: Instalar External Storage Support

  1. En Nextcloud, haz clic en tu avatar (arriba a la derecha).
  2. Selecciona Apps.
  3. Ve a la pestaña Deshabilitadas.
  4. Busca External storage support.
  5. Haz clic en Habilitar.

Paso 2: Configurar External Storages

  1. Haz clic en tu avatarConfiguración.
  2. En el menú izquierdo selecciona External storages.
  3. Haz clic en + Añadir almacenamiento externo, selecciona Local y rellena:
Nombre de carpetaTipoRuta en el contenedorDisponible paraSolo lectura
MediaLocal/mnt/MediaTodos los usuarios✅ Sí
DescargasLocal/mnt/DescargasTodos los usuarios❌ No
PersonalLocal/mnt/Personaltu usuario + familia❌ No
ProfesionalLocal/mnt/Profesionaltu usuario❌ No

💡 Notas importantes sobre External Storage:

  • No se duplica contenido: Nextcloud solo crea un enlace a las carpetas reales del NAS.
  • Las carpetas marcadas como “Solo lectura” evitan borrados accidentales desde la nube.
  • Si subes o borras archivos desde Nextcloud en carpetas de lectura/escritura, se reflejarán en FileBrowser y Windows (y viceversa).

Verificación: Ve al inicio de Nextcloud. Deberías ver las carpetas Media, Personal, Profesional, etc. en la raíz y poder navegar en ellas viendo el contenido real.

Comandos para arreglar permisos en Carpetas Externas

Dado que Nextcloud funciona con el usuario 33:33 (www-data), las carpetas externas del NAS necesitan ser accesibles para él.

Arreglar permisos generales (ejemplo con “Media”): Cambia ‘Media’ por cada uina de las carpetas que quieras sincronizar así no tendrás problemas de permisos y podrás subir desde cualquier dispositivo lo que quieras, si no lo haces tendrás problemas de permisos

sudo chown -R 33:33 /srv/dev-disk-by-uuid-TU_UUID_CADDY/Media
sudo chmod -R 775 /srv/dev-disk-by-uuid-TU_UUID_CADDY/Media

Configuración importante dentro de Nextcloud: Para que lo que subas desde Nextcloud se pueda modificar después desde Windows:

docker exec --user www-data -it nextcloud php occ config:system:set localstorage.umask --value 0002 --type integer
docker restart nextcloud

Reglas de Proxy para Nextcloud

En Nginx Proxy Manager → Proxy HostsAdd Proxy Host:

CampoValor
Domain Namescloud.TU_DOMINIO.duckdns.org
Forward Hostname/IPTU_IP_NAS
Forward Port8082
Pestaña SSLMismo certificado wildcard → Force SSL
WebSocket SupportACTIVADO

En la pestaña Advanced pegar:

client_max_body_size 512M;

location / {
    proxy_pass $forward_scheme://$server:$port;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Protocol $scheme;
    proxy_set_header X-Forwarded-Host $http_host;
    proxy_buffering off;
}

Configuración de Dominios de Confianza

Si al entrar por tu dominio web Nextcloud te bloquea con el mensaje “Acceso a través de un dominio no confiable”, aplica estos comandos por SSH:

# Añadir tu dominio a la lista de confianza
docker exec --user www-data nextcloud php occ config:system:set trusted_domains 1 --value="cloud.TU_DOMINIO.duckdns.org"
 
# Añadir la IP local
docker exec --user www-data nextcloud php occ config:system:set trusted_domains 2 --value="TU_IP_NAS"
 
# Forzar HTTPS
docker exec --user www-data nextcloud php occ config:system:set overwriteprotocol --value="https"
 
# Reiniciar
docker restart nextcloud

💡 El Bypass del Router (Archivo Hosts en Windows): A veces el dominio no se ve desde dentro de casa porque el Router intercepta la comunicación (falta de NAT Loopback). Editamos el archivo de Windows:

  • Ruta: C:\Windows\System32\drivers\etc\hosts
  • Línea añadida: TU_IP_NAS cloud.TU_DOMINIO.duckdns.org (Esto permite que tu PC vaya directo al NAS sin pasar por el filtro del router).

Pruebas, Solución de Problemas y Conexión

Test desde fuera

  1. Coge tu móvil → desactiva el WiFi (usa solo datos)
  2. Abre el navegador:
    • https://jellyfin.TU_DOMINIO.duckdns.org → ¿Carga con candado HTTPS? ✅
    • https://cloud.TU_DOMINIO.duckdns.org → ¿Carga con candado HTTPS? ✅

Configurar apps del móvil

Jellyfin app:

  1. Play Store → “Jellyfin” → instalar
  2. Servidor: https://jellyfin.TU_DOMINIO.duckdns.org
  3. Login con tu usuario de Jellyfin

Nextcloud app:

  1. Play Store → “Nextcloud” → instalar
  2. Servidor: https://cloud.TU_DOMINIO.duckdns.org
  3. Login con tu usuario de Nextcloud
  4. Ajustes → Subida automática → Activar

Resolución de Errores Comunes

ErrorCausa ProbableSolución
403 ForbiddenError en Nginx Proxy ManagerCambia el Forward Port a 80 (no el 8082).
Página del RouterFalta de NAT LoopbackPrueba con datos móviles fuera de la red Wi-Fi local. O usa el Bypass del archivo Hosts en Windows.
Certificado no válidoSSL mal configurado en NPMEdita el Proxy Host y marca Force SSL y HTTP/2 Support.
SSH no conectaVPN activa o usuario sin grupo _sshCerrar VPN o activar “LAN sharing”. Verificar grupo _ssh en Usuarios.
Contraseña OMV no funcionaCuenta bloqueadaSSH → su -omv-firstaid → opción 5 + opción 4
Error cpupowerFalta paquetesudo apt-get install linux-cpupower && sudo omv-salt deploy run cpupower
Discos del dock no aparecenOMV no muestra discos USBCrear mirror por SSH con mdadm
FileBrowser da 403Permisos incorrectossudo chown -R 1000:100 /srv/dev-disk-by-uuid-TU_UUID/appdata/
WARNING: REMOTE HOSTClave SSH cambióssh-keygen -R TU_IP_NAS

Resúmenes y Credenciales

Resumen de URLs

Dentro de casa:

ServicioURL
Panel OMVhttp://TU_IP_NAS:8888
FileBrowserhttp://TU_IP_NAS:8080
Jellyfinhttp://TU_IP_NAS:8096
Nextcloudhttp://TU_IP_NAS:8082
Nginx Proxy Managerhttp://TU_IP_NAS:81
Carpetas Windows\\TU_IP_NAS
SSHssh TU_USUARIO@TU_IP_NAS

Desde fuera:

ServicioURL
Jellyfinhttps://jellyfin.TU_DOMINIO.duckdns.org
Nextcloudhttps://cloud.TU_DOMINIO.duckdns.org

⚠️ SEGURIDAD: Panel OMV, FileBrowser y Nginx Proxy Manager NUNCA accesibles desde fuera.


Software utilizado (todo gratuito)