Nextcloud: cómo montar tu propio “Google Fotos” privado (TrueNAS + Tailscale + Nginx + Pi‑hole)

Guía paso a paso para montar sin cuotas y con privacidad total un sistema de subida automática de fotos desde el móvil usando Nextcloud. Infraestructura: TrueNAS para almacenamiento, una VM con Nginx como reverse proxy, acceso remoto seguro con Tailscale y resolución local con Pi‑hole.

Índice rápido

¿Qué es Nextcloud?
Arquitectura (en 60 segundos)
Requisitos
Pasos de despliegue
App móvil: subida automática de fotos
Una sola URL dentro y fuera de casa
FAQ
Resumen

¿Qué es Nextcloud?

Nextcloud es una plataforma open‑source que te permite tener tu propio “Drive/Photos” en casa o en tu servidor. Puedes crear cuentas para cada persona, subir fotos automáticamente, compartir álbumes y visualizar desde web o app móvil, con el control total de tus datos.

Arquitectura (en 60 segundos)

📱 Móvil / PC
   ├─ LAN (Wi‑Fi, sin VPN)           → proxy Nginx (VM)
   └─ VPN Tailscale (remoto seguro)  → proxy Nginx (VM)
                         └──► Nextcloud (TrueNAS, HTTP backend)
DNS local (Pi‑hole): <FQDN_PROXY> → <PROXY_LAN_IP> en LAN
Cert TLS (Tailscale): HTTPS válido para <FQDN_PROXY>

Requisitos

  • TrueNAS con la app de Nextcloud funcionando (backend HTTP interno).
  • Proxmox con una VM Debian/Ubuntu ligera (~1 vCPU, 1‑2 GB RAM) para Nginx (IP estática en LAN).
  • Cuenta de Tailscale y el agent instalado en la VM proxy.
  • Pi‑hole (o DNS del router) para resolver el FQDN del proxy a su IP LAN.

Pasos de despliegue

1) Nextcloud en TrueNAS (dataset + app)

  • Crea datasets para fotos, por ejemplo: /Datos/FOTOS/<usuario>.
  • Despliega la app Nextcloud (Postgres + Redis) y configura el almacenamiento de datos y permisos (UID 33:33).
  • Añade usuarios (p. ej. “Angie”, “Mamá”) y activa la app External storage si vas a mapear rutas específicas.

2) VM proxy en Proxmox (Nginx)

# IP fija con NetworkManager
nmcli con mod "Wired connection 1" ipv4.addresses <PROXY_LAN_IP>/24
nmcli con mod "Wired connection 1" ipv4.gateway <LAN_GATEWAY_IP>
nmcli con mod "Wired connection 1" ipv4.dns "1.1.1.1 8.8.8.8"
nmcli con mod "Wired connection 1" ipv4.method manual
nmcli con up "Wired connection 1"

# Instalar Nginx
apt update && apt -y install nginx-full

3) Conectar la VM a Tailscale y emitir certificado

curl -fsSL https://tailscale.com/install.sh | sh
tailscale up   # autoriza la máquina en el panel

# Emitir el certificado para tu FQDN de Tailscale (de la VM)
mkdir -p /etc/nginx/tailscale
tailscale cert <FQDN_PROXY>  # genera .crt y .key en /etc/nginx/tailscale

4) Nginx como reverse proxy

Crea /etc/nginx/sites-available/nextcloud.conf y enlázalo a sites-enabled:

ln -s /etc/nginx/sites-available/nextcloud.conf /etc/nginx/sites-enabled/nextcloud.conf
nginx -t && systemctl reload nginx

Contenido recomendado (ajusta FQDN/IPs):

# HTTP SOLO LAN (fallback opcional)
server {
  listen 80;
  listen [::]:80;
  server_name <FQDN_PROXY>;
  allow <PROXY_LAN_SUBNET>;  # p. ej. 192.168.1.0/24
  deny all;
  client_max_body_size 4G;
  proxy_read_timeout 300;
  location / {
    proxy_pass http://<TRUENAS_LAN_IP>:<NEXTCLOUD_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 http;
  }
}

# HTTPS (cert de Tailscale)
server {
  listen 443 ssl;
  listen [::]:443 ssl;
  server_name <FQDN_PROXY>;
  ssl_certificate     /etc/nginx/tailscale/<FQDN_PROXY>.crt;
  ssl_certificate_key /etc/nginx/tailscale/<FQDN_PROXY>.key;
  client_max_body_size 4G;
  proxy_read_timeout 300;
  location / {
    proxy_pass http://<TRUENAS_LAN_IP>:<NEXTCLOUD_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 https;
  }
}

5) Nextcloud: confiar en el proxy y el hostname

'trusted_domains' => array(
  '<TRUENAS_LAN_IP>',
  '<FQDN_PROXY>',
),

'trusted_proxies' => array(
  '<PROXY_LAN_IP>',
  '127.0.0.1',
),

'overwritehost' => '<FQDN_PROXY>',
'overwriteprotocol' => 'https',
'overwrite.cli.url' => 'https://<FQDN_PROXY>',

6) DNS local con Pi‑hole

Añade un registro local: <FQDN_PROXY> → <PROXY_LAN_IP>. Así, la misma URL funciona en LAN (sin VPN) y fuera (con Tailscale).

App móvil: subida automática de fotos

  • Instala la app oficial de Nextcloud (Android/iOS).
  • Servidor: https://<FQDN_PROXY>/ (si da error tras cambios, borra caché/datos y reconfigura).
  • Activa “Subidas automáticas” y elige carpetas destino por usuario (p. ej. /FOTOS/<usuario>).
  • Opcional: programa escaneo de carpetas cada 15 min desde la app o el cron interno.

Una sola URL dentro y fuera de casa

En LAN: DNS local resuelve <FQDN_PROXY> → <PROXY_LAN_IP>. Acceso por HTTP/HTTPS a Nginx.
Fuera (VPN): mismo FQDN vía Tailscale con certificado válido. La app funciona igual.

FAQ

¿Puedo usarlo sin VPN fuera de casa?
Sí, si expones el proxy públicamente (no recomendado) o activas Tailscale Funnel. En esta guía, el acceso externo es solo por VPN.

¿Puedo tener HTTPS en LAN también?
Sí: usa el mismo cert de Tailscale (suele valer) o genera un cert local alternativo y haz SNI por el mismo FQDN.

Resumen

Con Nextcloud sobre TrueNAS, un proxy Nginx, Tailscale y DNS local consigues tu propio “Google Fotos” privado: subida automática desde el móvil, multiusuario, cifrado y control total de tus datos. Una inversión perfecta para homelab y para aprender infraestructura moderna.

 

Todos los derechos reservados © | Política de Privacidad | Política de Cookies
Scroll al inicio