Guía de despliegue

Alojar Nextcloud en VPS: guía completa NC 34 y seguridad

Desplegar en un VPS Cloud →

Tutorial

Alojar Nextcloud en VPS: guía completa NC 34 y seguridad

Autoalojamiento11 min de lectura5 pasos

Nextcloud es una de las aplicaciones más desplegadas en autoalojamiento — y una de las peor configuradas. Entre la instancia que funciona sin Redis (y va lenta), sin TLS forzado (y expone los datos), la actualización de mayo de 2026 que corrige dos vulnerabilidades críticas de elusión del 2FA y, ahora, las regresiones propias de NC 34.0.0 — apps recomendadas ausentes en el primer arranque, restricción duplicada en PostgreSQL que puede provocar una explosión de CPU —, cada versión trae sus propias trampas. Esta guía le lleva de la instalación completa a la verificación de seguridad, cubriendo las correcciones de NC 34.0.2 y los 5 errores más frecuentes.

Contenido· Alerta de seguridad — CVE de elusión del 2FA de mayo de 20261/12
  1. 01Alerta de seguridad — CVE de elusión del 2FA de mayo de 2026
  2. 02NC 34.0.0 — apps recomendadas ausentes en el primer arranque
  3. 03NC 34.0.0 — restricción duplicada en PostgreSQL y explosión de CPU
  4. 04Requisitos previos y dimensionamiento
  5. 05Instalación de Nextcloud con Docker Compose
  6. 06Comprobar si su instancia es vulnerable a las CVE de 2FA
  7. 07Optimizar el rendimiento con Redis y OPcache
  8. 08Los 5 errores frecuentes en una instancia Nextcloud
  9. 09Verificación de la eficacia de Redis con occ
  10. 10Copias de seguridad de Nextcloud — datos, base y configuración
  11. 11Próximos pasos — ir más lejos con su instancia
  12. 12Actualizar Nextcloud en producción

Alerta de seguridad — CVE de elusión del 2FA de mayo de 2026

En mayo de 2026 se divulgaron en Nextcloud dos vulnerabilidades críticas de elusión de la autenticación de dos factores:

CVE-2026-45690 (puntuación CVSS 5.9, divulgada el 15 de mayo de 2026): un atacante que disponga del identificador y de la contraseña de una cuenta puede eludir la verificación 2FA utilizando una conexión HTTP Basic Auth (autenticación básica mediante la cabecera Authorization: Basic base64(user:pass)). En las versiones afectadas, Nextcloud aceptaba HTTP Basic Auth incluso cuando el 2FA estaba activado en la cuenta objetivo, sin exigir la verificación del segundo factor.

CVE-2026-45691 (puntuación CVSS 5.9, divulgada el 13 de mayo de 2026): misma clase de vulnerabilidad, pero explotable mediante un token Bearer DAV — el protocolo WebDAV, utilizado en particular por los clientes de sincronización de escritorio (Nextcloud Desktop, Nautilus, Finder). Un atacante capaz de interceptar o adivinar un token WebDAV puede acceder a la instancia sin 2FA.

Ambas CVE están corregidas en Nextcloud 32.0.9 (rama 32), 33.0.3 (rama 33) y 34.0.2 (rama 34). Compruebe si su instancia es vulnerable (véase la sección dedicada más abajo).

NC 34.0.0 — apps recomendadas ausentes en el primer arranque

Nextcloud 34.0.0 introduce una regresión en el asistente de instalación: las aplicaciones recomendadas (Notes, Calendar, Contacts) no se proponen durante la configuración inicial. La lista de apps sugeridas permanece vacía, sea cual sea el perfil de instalación elegido.

Impacto concreto: una instancia nueva en NC 34.0.0 no dispone de las aplicaciones básicas. Los usuarios que esperan sincronizar su calendario CalDAV o sus contactos CardDAV deben instalarlas manualmente desde la interfaz de administración.

Fuentes: issues de GitHub #61313 y #61611 — corregido en 34.0.2.

Compruebe si sus apps están presentes:

docker compose exec -u www-data app php occ app:list | grep -E 'calendar|contacts|notes'

Si el comando no devuelve nada, las apps no están instaladas. Para añadirlas manualmente:

docker compose exec -u www-data app php occ app:install calendar
docker compose exec -u www-data app php occ app:install contacts
docker compose exec -u www-data app php occ app:install notes

Recomendación: empezar directamente en 34.0.2 o superior en lugar de en 34.0.0. Si su instancia funciona en 34.0.0, la actualización a 34.0.2 restaura el asistente — pero las apps que faltan en la instancia existente deben instalarse igualmente de forma manual.

NC 34.0.0 — restricción duplicada en PostgreSQL y explosión de CPU

En las instancias que utilizan PostgreSQL (en lugar de MariaDB/MySQL), una migración interrumpida de Nextcloud 34.0.0 puede dejar una restricción duplicada en la tabla oc_filecache_extended. Este duplicado pasa desapercibido en el arranque, pero provoca una explosión de CPU y de RAM durante el siguiente escaneo de archivos (files:scan) o un mantenimiento automático.

Síntomas: carga de CPU anormalmente elevada en el contenedor Nextcloud, escaneo de archivos que no termina, errores en los registros del tipo duplicate key value violates unique constraint.

Fuente: issue de GitHub #61597.

Verificación y corrección:

# 1. Limpiar las entradas huérfanas de la caché de archivos
docker compose exec -u www-data app php occ files:cleanup

# 2. Recrear los índices de la tabla problemática
docker compose exec -u www-data app php occ db:add-missing-indices

# 3. Comprobar que no queda ningún índice duplicado
docker compose exec -u www-data app php occ db:add-missing-columns

Si los errores persisten, pase directamente a 34.0.2, que contiene la corrección de migración.

Nota: este problema no afecta a las instancias MariaDB/MySQL. Las instancias PostgreSQL en producción en NC 34.0.0 deben aplicar estos comandos antes del próximo escaneo automático.

Requisitos previos y dimensionamiento

Nextcloud es una aplicación PHP polivalente que puede funcionar de forma ligera en un VPS pequeño o volverse exigente si la utiliza como almacenamiento principal de archivos voluminosos.

Configuración mínima recomendada:
- VPS con 2 GB de RAM (4 GB si gestiona más de 5 usuarios activos).
- SSD obligatorio: Nextcloud realiza numerosas operaciones de archivos y de miniaturas. Un disco HDD vuelve la interfaz muy lenta.
- 20 GB de espacio como mínimo para la instalación, más el espacio para sus datos (prevea 2× el tamaño de sus archivos para las miniaturas y las versiones).
- Ubuntu 22.04 o Debian 12.
- Docker Engine ≥ 24 y Docker Compose V2.
- Un nombre de dominio y un certificado TLS (Let's Encrypt mediante Certbot).
- Los puertos 80 y 443 abiertos en su firewall.

Instalación de Nextcloud con Docker Compose

  1. Paso 1 — Crear la estructura del proyecto

    mkdir -p /opt/nextcloud && cd /opt/nextcloud

    Cree el archivo docker-compose.yml:

    version: '3.8'
    services:
      db:
        image: mariadb:10.11
        restart: unless-stopped
        environment:
          MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
          MYSQL_DATABASE: nextcloud
          MYSQL_USER: nextcloud
          MYSQL_PASSWORD: ${MYSQL_PASSWORD}
        volumes:
          - db:/var/lib/mysql
    
      redis:
        image: redis:7-alpine
        restart: unless-stopped
        command: redis-server --requirepass ${REDIS_PASSWORD}
        volumes:
          - redis:/data
    
      app:
        image: nextcloud:34.0.2-apache
        restart: unless-stopped
        ports:
          - '127.0.0.1:8080:80'
        environment:
          MYSQL_HOST: db
          MYSQL_DATABASE: nextcloud
          MYSQL_USER: nextcloud
          MYSQL_PASSWORD: ${MYSQL_PASSWORD}
          NEXTCLOUD_ADMIN_USER: ${NEXTCLOUD_ADMIN_USER}
          NEXTCLOUD_ADMIN_PASSWORD: ${NEXTCLOUD_ADMIN_PASSWORD}
          NEXTCLOUD_TRUSTED_DOMAINS: ${NEXTCLOUD_DOMAIN}
          REDIS_HOST: redis
          REDIS_HOST_PASSWORD: ${REDIS_PASSWORD}
        volumes:
          - nextcloud:/var/www/html
        depends_on:
          - db
          - redis
    
    volumes:
      db:
      redis:
      nextcloud:
  2. Paso 2 — Crear el archivo de entorno

    cat > /opt/nextcloud/.env << 'EOF'
    MYSQL_ROOT_PASSWORD=root_password_fort
    MYSQL_PASSWORD=nextcloud_password_fort
    REDIS_PASSWORD=redis_password_fort
    NEXTCLOUD_ADMIN_USER=admin
    NEXTCLOUD_ADMIN_PASSWORD=admin_password_fort
    NEXTCLOUD_DOMAIN=cloud.votredomaine.com
    EOF
  3. Paso 3 — Iniciar los contenedores

    docker compose up -d

    El primer arranque tarda de 2 a 4 minutos: Nextcloud instala y configura la aplicación, crea las tablas de la base de datos y configura Redis. Siga el progreso con:

    docker compose logs -f app

    Espere el mensaje Nextcloud was successfully installed antes de continuar.

  4. Paso 4 — Configurar Nginx con TLS

    apt install -y nginx certbot python3-certbot-nginx
    
    cat > /etc/nginx/sites-available/nextcloud << 'EOF'
    server {
        server_name cloud.votredomaine.com;
        client_max_body_size 10G;
        location / {
            proxy_pass http://127.0.0.1:8080;
            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_read_timeout 3600s;
        }
    }
    EOF
    
    ln -s /etc/nginx/sites-available/nextcloud /etc/nginx/sites-enabled/
    certbot --nginx -d cloud.votredomaine.com
    nginx -t && systemctl reload nginx
  5. Paso 5 — Configurar la URL de confianza en Nextcloud

    Tras la instalación, Nextcloud debe conocer su dominio público para generar enlaces correctos y aceptar las conexiones.

    Edite config.php en el contenedor:

    docker compose exec -u www-data app php occ config:system:set trusted_domains 0 \
      --value=cloud.votredomaine.com
    docker compose exec -u www-data app php occ config:system:set overwrite.cli.url \
      --value=https://cloud.votredomaine.com
    docker compose exec -u www-data app php occ config:system:set htaccess.RewriteBase --value='/'
    docker compose exec -u www-data app php occ maintenance:update:htaccess

Comprobar si su instancia es vulnerable a las CVE de 2FA

Si su instancia Nextcloud funciona con una versión anterior a 32.0.9, 33.0.3 o 34.0.2 (y tiene el 2FA activado), así es como comprobar su exposición y corregirla.

Comprobar la versión actual:

docker compose exec -u www-data app php occ status
# Muestra: Nextcloud version: 32.0.X, 33.0.X o 34.0.X

Versiones vulnerables: todas las versiones Nextcloud 32.x < 32.0.9, 33.x < 33.0.3 y 34.x < 34.0.2.

Prueba de vulnerabilidad (únicamente sobre su propia instancia):

# Compruebe si HTTP Basic Auth elude el 2FA
curl -u utilisateur:motdepasse -X PROPFIND \
  https://cloud.votredomaine.com/remote.php/dav/files/utilisateur/ \
  -H "Depth: 0" -s -o /dev/null -w "%{http_code}"

Si el comando devuelve 207 Multi-Status sin que se solicite el código 2FA, su instancia es vulnerable a CVE-2026-45690.

Actualizar a 34.0.2:

# Modificar docker-compose.yml: cambiar la etiqueta de la imagen
sed -i 's|nextcloud:[0-9.]*-apache|nextcloud:34.0.2-apache|g' docker-compose.yml
docker compose pull app
docker compose up -d app
docker compose exec -u www-data app php occ upgrade

Optimizar el rendimiento con Redis y OPcache

Una Nextcloud sin Redis es una Nextcloud lenta. Redis desempeña dos papeles críticos: caché de sesiones (evita las lecturas y escrituras en disco en cada petición autenticada) y bloqueo distribuido (file locking), que impide los conflictos durante sincronizaciones simultáneas.

Compruebe que Redis está correctamente conectado:

docker compose exec -u www-data app php occ config:system:get redis
# Debe mostrar una tabla con host, port, password

Si no aparece nada, añádalo manualmente en el config.php del volumen Nextcloud:

'memcache.distributed' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => [
    'host' => 'redis',
    'port' => 6379,
    'password' => 'VOTRE_REDIS_PASSWORD',
],

OPcache PHP. La imagen Docker oficial de Nextcloud incluye OPcache preconfigurado. Compruebe que está activo:

docker compose exec app php -r "echo opcache_get_status()['opcache_enabled'] ? 'OPcache actif' : 'OPcache inactif';"

Resultado esperado: la interfaz de Nextcloud debe resultar notablemente más reactiva con Redis. La diferencia se percibe desde la primera navegación: las peticiones que leían el disco en cada acceso se apoyan ahora en la caché en memoria.

Los 5 errores frecuentes en una instancia Nextcloud

Error 1 — Redis sin configurar. La interfaz es lenta y las sincronizaciones simultáneas crean conflictos. Solución: comprobar y configurar Redis tal como se describe más arriba.

Error 2 — overwrite.cli.url apuntando a http:// en lugar de https://. Los enlaces de compartición, las notificaciones por correo electrónico y los enlaces OIDC generan URL HTTP no seguras. Solución: php occ config:system:set overwrite.cli.url --value=https://votre-domaine.com.

Error 3 — trusted_domains mal configurado. Acceso denegado con el error «You are accessing the server from an untrusted domain». Solución: añadir su dominio con php occ config:system:set trusted_domains 0 --value=votre-domaine.com.

Error 4 — Tamaño máximo de los archivos subidos limitado a 2 MB. El valor por defecto de PHP es demasiado bajo para archivos reales. Solución: en Nginx, añadir client_max_body_size 10G; y, en el contenedor PHP, configurar upload_max_filesize=10G y post_max_size=10G en un archivo .ini montado.

Error 5 — Actualización omitida e instancia vulnerable. Nextcloud publica actualizaciones de seguridad con regularidad. Sin vigilancia de las CVE y sin actualización automática, la instancia se vuelve vulnerable. Solución: configurar las notificaciones de actualización en la interfaz de administración y planificar actualizaciones periódicas.

Verificación de la eficacia de Redis con occ

Nextcloud ofrece una herramienta de diagnóstico integrada para comprobar que su caché Redis se utiliza efectivamente:

# Comprobar el estado general de la instancia
docker compose exec -u www-data app php occ status

# Comprobar las advertencias de configuración (memcache, Redis, HTTPS…)
docker compose exec -u www-data app php occ check

# Mostrar la configuración Redis actual
docker compose exec -u www-data app php occ config:system:get redis

El comando occ check enumera todos los problemas de configuración detectados: Redis ausente, HTTPS no forzado, servidor de correo sin configurar, archivos de datos en el directorio web (riesgo de seguridad), etc. Es el primer diagnóstico que hay que lanzar sobre cualquier instancia Nextcloud existente antes de declararla limpia.

Copias de seguridad de Nextcloud — datos, base y configuración

Nextcloud almacena sus datos en tres lugares distintos, y una copia de seguridad completa debe cubrir los tres:

1. La base de datos MariaDB: contiene los metadatos de los archivos, los usuarios, los recursos compartidos, las aplicaciones instaladas y su configuración.
2. El volumen nextcloud (datos de la aplicación): contiene el código PHP de Nextcloud, las aplicaciones instaladas y config/config.php — el archivo de configuración principal.
3. Los archivos de los usuarios: por defecto en el volumen Docker o en una ruta externa definida por datadirectory en config.php.

#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_DIR=/opt/nextcloud/backups
mkdir -p $BACKUP_DIR

# 1. Activar el modo mantenimiento para garantizar la coherencia
docker compose exec -u www-data app php occ maintenance:mode --on

# 2. Copia de seguridad de la base de datos
docker compose exec -T db \
  mysqldump -u nextcloud -p${MYSQL_PASSWORD} nextcloud | gzip > $BACKUP_DIR/db-$DATE.sql.gz

# 3. Copia de seguridad de config.php
docker compose cp app:/var/www/html/config/config.php $BACKUP_DIR/config-$DATE.php

# 4. Desactivar el modo mantenimiento
docker compose exec -u www-data app php occ maintenance:mode --off

Próximos pasos — ir más lejos con su instancia

Una vez instalado y asegurado Nextcloud, puede ir más lejos:

Activar Talk (videoconferencia): instale la aplicación Nextcloud Talk desde la interfaz de administración. Para las reuniones de más de 4–5 participantes se requiere un servidor TURN (Coturn en un VPS dedicado).

Activar OnlyOffice o Collabora Online (edición de documentos en línea): estas aplicaciones necesitan su propio contenedor Docker y una configuración de Nextcloud Office. Permiten crear y modificar archivos .docx, .xlsx y .pptx directamente en la interfaz web.

Monitorización de la instancia: configure las alertas en Administración → Monitorización para recibir notificaciones por correo electrónico si Nextcloud detecta errores de configuración, actualizaciones de seguridad o problemas de cuota.

Actualizar Nextcloud en producción

La actualización de Nextcloud debe pasar siempre por el modo mantenimiento para evitar corrupciones de datos mientras hay clientes sincronizando:

# 1. Activar el modo mantenimiento
docker compose exec -u www-data app php occ maintenance:mode --on

# 2. Copia de seguridad de la base de datos
docker compose exec -T db mysqldump -u nextcloud -p${MYSQL_PASSWORD} nextcloud \
  | gzip > /opt/nextcloud/backups/pre-update-db.sql.gz

# 3. Cambiar la versión en docker-compose.yml (ej.: 34.0.2-apache)
sed -i 's|nextcloud:[0-9.]*-apache|nextcloud:34.0.2-apache|g' docker-compose.yml

# 4. Descargar la nueva imagen y reiniciar
docker compose pull app
docker compose up -d app

# 5. Ejecutar las migraciones
docker compose exec -u www-data app php occ upgrade

# 6. Desactivar el modo mantenimiento
docker compose exec -u www-data app php occ maintenance:mode --off

Compruebe los registros después de la actualización (docker compose logs app) y pruebe un acceso de usuario antes de dar la actualización por buena.

Un VPS fiable para su instancia Nextcloud

Nextcloud necesita un VPS SSD con buen ancho de banda para que la sincronización de archivos sea fluida. Nuestros planes VPS Cloud parten de 2 GB de RAM con snapshots diarios — exactamente lo que necesita una instancia Nextcloud sin sobresaltos.

¿Necesita ayuda?

Consulte nuestro centro de ayuda y nuestra FAQ, o contacte con nuestro equipo: llamada, WhatsApp o correo electrónico. Soporte en francés, inglés y árabe.

Escribir por WhatsAppse abre en una pestaña nueva