Como instalar Nextcloud con Nginx y Let's Encrypt SSL en Debian11

Cómo Instalar Nextcloud con Nginx y Let’s Encrypt en Debian (Guía Completa 2026)

📘 Este artículo forma parte de nuestra Guía Completa de Servidores y Virtualización y complementa a nuestra Guía Completa de Ciberseguridad. Si buscas alternativas, consulta nuestra Guía de ownCloud y nuestra Guía de Samba.

Introducción

Nextcloud es la plataforma de nube auto-hospedada más popular del mundo. Con +400.000 instalaciones activas y +400 apps, es la alternativa open source a Google Drive, Dropbox, OneDrive, iCloud y Microsoft 365.

En 2026, Nextcloud es la elección por defecto para:

  • Empresas que quieren control total sobre sus datos.
  • Particulares preocupados por la privacidad.
  • Equipos que colaboran en documentos.
  • Organizaciones con compliance estricto (RGPD, ISO 27001).
  • Administradores que quieren una solución completa.

Diferencias con ownCloud:

AspectoNextcloudownCloud
ComunidadMayorMenor
Plugins+400Menos
Talk (videollamadas)✅❌
Groupware (calendario/contactos)✅✅
Office integrado✅ (OnlyOffice, Collabora)✅
Marketplace✅Limitado
ActualizacionesFrecuentesMenos frecuentes

Conclusión: Nextcloud es la opción más popular y completa en 2026.

En esta guía completa vas a aprender:

  • Qué es Nextcloud y por qué usarlo.
  • Requisitos de hardware y software.
  • Instalación en Debian 12.
  • Configuración de MariaDB (o PostgreSQL).
  • Configuración de PHP-FPM.
  • Configuración de Nginx + SSL.
  • Redis para caché.
  • Configuración inicial.
  • Apps esenciales.
  • Seguridad y hardening.
  • Backups automáticos.
  • Clientes (Windows, macOS, Linux, móvil).
  • Integración con Office.
  • Actualizaciones y migraciones.
  • Troubleshooting.
  • FAQ.

Si aún no tienes un servidor funcional, consulta nuestra Guía Completa de Servidores. Si prefieres ownCloud, nuestra Guía de ownCloud.


Índice de contenidos

  1. ¿Qué es Nextcloud?
  2. Requisitos
  3. Instalación de dependencias
  4. Configuración de MariaDB
  5. Descarga de Nextcloud
  6. Configuración de PHP-FPM
  7. Configuración de Nginx
  8. SSL con Let’s Encrypt
  9. Instalación web (asistente)
  10. Configuración avanzada
  11. Redis para caché
  12. Apps esenciales
  13. Seguridad y hardening
  14. Backups automáticos
  15. Clientes: Windows, macOS, Linux, móvil
  16. Integración con Office
  17. Actualizaciones
  18. Troubleshooting
  19. FAQ
  20. Conclusión

1. ¿Qué es Nextcloud?

Nextcloud es una suite de colaboración y almacenamiento en la nube auto-hospedada, escrita en PHP y publicada bajo licencia AGPL.

1.1 Componentes

ComponenteFunción
Nextcloud ServerNúcleo (PHP)
Base de datosMariaDB, MySQL, PostgreSQL, SQLite
Servidor webNginx, Apache
PHP-FPMBackend
RedisCaché y locking
Cliente desktopSincronización
Cliente móviliOS, Android

1.2 Características principales

  • Almacenamiento de archivos (hasta petabytes).
  • Sincronización entre dispositivos.
  • Compartición con usuarios, grupos, enlaces.
  • Calendario y contactos (CalDAV, CardDAV).
  • Videollamadas (Nextcloud Talk).
  • Edición de documentos (OnlyOffice, Collabora).
  • Correo (Nextcloud Mail).
  • Tareas (Deck, Tasks).
  • Notas (Notes).
  • Passwords (Passwords).
  • Fotos con reconocimiento facial.
  • Encriptación extremo a extremo.
  • 2FA integrado.
  • LDAP/AD integrado.

1.3 Casos de uso

  • Alternativa a Google Drive/Dropbox.
  • Suite ofimática colaborativa.
  • Sincronización de equipos.
  • Gestión documental.
  • Compartición con clientes.
  • Backup personal.
  • Fotos y vídeos.
  • Correo corporativo.

1.4 Versiones

  • Nextcloud 28 (2023-2024).
  • Nextcloud 29 (2024).
  • Nextcloud 30 (2025-2026) — versión actual.
  • Nextcloud Enterprise — versión comercial.

Recomendación: usa la última versión estable (30.x).

1.5 Nextcloud vs ownCloud

Nextcloud es un fork de ownCloud (2016). Diferencias principales:

  • Nextcloud: comunidad, más apps, actualizaciones frecuentes.
  • ownCloud: enfoque enterprise, integración Microsoft 365.

Recomendación: Nextcloud para uso general. Consulta Guía de ownCloud si prefieres enterprise.


2. Requisitos

2.1 Hardware

ComponenteMínimoRecomendado
CPU2 cores4+ cores
RAM2 GB4-8 GB
Disco20 GB100+ GB SSD
Red100 Mbps1 Gbps

Para +50 usuarios: 8-16 GB RAM, disco NVMe.

2.2 Software

  • Debian 12 (Bookworm) — recomendado.
  • Debian 11 (Bullseye) — funciona.
  • Nginx 1.22+.
  • MariaDB 10.11+ o PostgreSQL 15+.
  • PHP 8.2+ con extensiones.

2.3 Extensiones PHP requeridas

ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring,
openssl, posix, session, simplexml, xml, xmlreader, xmlwriter, zip, zlib

Además (recomendadas):

  • imagick (imágenes).
  • redis (caché).
  • apcu (caché local).
  • bcmath, gmp (cálculos).
  • ldap (AD/LDAP).

2.4 Puertos

PuertoServicio
80, 443HTTP/HTTPS
3306MariaDB (local)
6379Redis (local)

2.5 Preparación

sudo apt update
sudo apt full-upgrade -y
sudo hostnamectl set-hostname cloud.tudominio.com
sudo timedatectl set-timezone Europe/Madrid

Consulta Guía Completa de Linux.


3. Instalación de dependencias

3.1 Nginx

sudo apt install -y nginx
sudo systemctl enable nginx

3.2 MariaDB

sudo apt install -y mariadb-server
sudo mysql_secure_installation

Recomendaciones:

  • Contraseña root: robusta.
  • Eliminar usuarios anónimos: sí.
  • Eliminar DB test: sí.
  • Deshabilitar root remoto: sí.
  • Recargar permisos: sí.

Consulta Cómo instalar MariaDB.

3.3 PHP-FPM y extensiones

sudo apt install -y \
    php8.2-fpm php8.2-cli php8.2-common \
    php8.2-curl php8.2-gd php8.2-intl php8.2-json \
    php8.2-mbstring php8.2-mysql php8.2-xml php8.2-zip \
    php8.2-imagick php8.2-ldap php8.2-bcmath php8.2-gmp \
    php8.2-apcu php8.2-redis php8.2-smbclient php8.2-bz2

3.4 Redis

sudo apt install -y redis-server php-redis
sudo systemctl enable --now redis-server

3.5 Herramientas adicionales

sudo apt install -y wget unzip tar bzip2 certbot python3-certbot-nginx

3.6 Verificar instalación

php -m | grep -E 'gd|imagick|intl|mbstring|mysql|zip|redis|apcu|bcmath|gmp|ldap|smbclient'

Deberías ver todas las extensiones.


4. Configuración de MariaDB

4.1 Crear base de datos y usuario

sudo mysql -u root -p
CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY 'PasswordNextcloud123!';
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Explicación:

  • utf8mb4: charset obligatorio (soporta emojis).
  • PasswordNextcloud123!: cambia por una contraseña robusta.

4.2 Configuración de rendimiento

Edita /etc/mysql/mariadb.conf.d/50-server.cnf:

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

Añade en la sección [mysqld]:

# Rendimiento para Nextcloud
innodb_buffer_pool_size = 1G
innodb_log_file_size = 128M
innodb_file_per_table = 1
innodb_flush_method = O_DIRECT
innodb_flush_log_at_trx_commit = 2
query_cache_type = 0
query_cache_size = 0
tmp_table_size = 64M
max_heap_table_size = 64M
transaction_isolation = READ-COMMITTED
binlog_format = ROW

Reiniciar:

sudo systemctl restart mariadb

Consulta Guía Completa de Servidores.


5. Descarga de Nextcloud

5.1 Descargar la última versión

cd /tmp
wget https://download.nextcloud.com/server/releases/latest.zip
unzip latest.zip

5.2 Mover a /var/www/

sudo mv nextcloud /var/www/
sudo chown -R www-data:www-data /var/www/nextcloud
sudo chmod -R 750 /var/www/nextcloud

5.3 Crear directorio de datos

sudo mkdir -p /var/www/nextcloud-data
sudo chown -R www-data:www-data /var/www/nextcloud-data
sudo chmod 750 /var/www/nextcloud-data

⚠️ Importante: el directorio de datos NO debe estar dentro de la raíz web por seguridad.

5.4 Verificar

ls -la /var/www/nextcloud/

Deberías ver:

apps/  config/  core/  index.php  version.php  ...

6. Configuración de PHP-FPM

6.1 Configuración principal

Edita /etc/php/8.2/fpm/php.ini:

sudo nano /etc/php/8.2/fpm/php.ini

Ajustes clave:

memory_limit = 512M
upload_max_filesize = 16G
post_max_size = 16G
max_execution_time = 3600
max_input_time = 3600
max_input_vars = 5000
date.timezone = Europe/Madrid

; OPcache
opcache.enable = 1
opcache.enable_cli = 1
opcache.memory_consumption = 256
opcache.interned_strings_buffer = 32
opcache.max_accelerated_files = 10000
opcache.revalidate_freq = 2
opcache.save_comments = 1
opcache.jit = 1255
opcache.jit_buffer_size = 128M

6.2 Configuración del pool

Edita /etc/php/8.2/fpm/pool.d/www.conf:

sudo nano /etc/php/8.2/fpm/pool.d/www.conf

Ajustes:

pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500

; Variables de entorno para Nextcloud
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[php_value_max_execution_time] = 3600

6.3 Reiniciar PHP-FPM

sudo systemctl restart php8.2-fpm
sudo systemctl status php8.2-fpm

Consulta Optimización de servidores Linux.


7. Configuración de Nginx

7.1 Crear configuración

Crea /etc/nginx/sites-available/nextcloud:

sudo nano /etc/nginx/sites-available/nextcloud

Contenido:

upstream php-handler {
    server unix:/run/php/php8.2-fpm.sock;
}

# Redirigir HTTP a HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name cloud.tudominio.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name cloud.tudominio.com;

    # SSL (Certbot rellenará)
    ssl_certificate /etc/letsencrypt/live/cloud.tudominio.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/cloud.tudominio.com/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;

    # Seguridad
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-XSS-Protection "1; mode=block" always;
    add_header Referrer-Policy "strict-origin-when-cross-origin" always;

    # Tamaño máximo de subida
    client_max_body_size 16G;
    client_body_timeout 300s;
    fastcgi_buffers 64 4K;

    # Gzip
    gzip on;
    gzip_vary on;
    gzip_comp_level 4;
    gzip_min_length 256;
    gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
    gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;

    # Root
    root /var/www/nextcloud;

    # Logs
    access_log /var/log/nginx/nextcloud.access.log;
    error_log /var/log/nginx/nextcloud.error.log;

    # Reglas principales
    location / {
        try_files $uri $uri/ /index.php$request_uri;
    }

    # Well-known
    location ^~ /.well-known {
        # Reglas según documentación oficial
        location = /.well-known/carddav { return 301 $scheme://$host/remote.php/dav; }
        location = /.well-known/caldav { return 301 $scheme://$host/remote.php/dav; }
        location = /.well-known/webfinger { return 301 $scheme://$host/index.php$request_uri; }
        location = /.well-known/nodeinfo { return 301 $scheme://$host/index.php$request_uri; }
        try_files $uri $uri/ =404;
    }

    # Favicon y robots
    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    # Bloquear archivos sensibles
    location ~ ^/(?:\.htaccess|data|config|db_structure\.xml|README) {
        deny all;
    }

    # Front controller
    location ~ ^\/(?:build|tests|config|lib|3rdparty|templates|data) {
        deny all;
    }

    location ~ ^\/(?:\.|autotest|occ|issue|indie|db_|console) {
        deny all;
    }

    # PHP-FPM
    location ~ \.php(?:$|/) {
        fastcgi_split_path_info ^(.+?\.php)(/.*)$;
        set $path_info $fastcgi_path_info;

        try_files $fastcgi_script_name =404;

        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $path_info;
        fastcgi_param HTTPS on;

        fastcgi_param modHeadersAvailable true;
        fastcgi_param front_controller_active true;
        fastcgi_pass php-handler;

        fastcgi_intercept_errors on;
        fastcgi_request_buffering off;
    }

    # Assets estáticos
    location ~* \.(?:css|js|mjs|svg|gif|png|html|ttf|woff2?|ico|jpg|jpeg|map|webm|mp4|mp3|ogg|wav)$ {
        try_files $uri /index.php$request_uri;
        add_header Cache-Control "public, max-age=15778463, immutable";
        access_log off;
    }
}

Nota: esta configuración está basada en la documentación oficial de Nextcloud. Puedes consultarla en https://docs.nextcloud.com/server/latest/admin_manual/installation/nginx.html

7.2 Activar el sitio

sudo ln -s /etc/nginx/sites-available/nextcloud /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default  # opcional
sudo nginx -t
sudo systemctl reload nginx

Consulta Guía de Nginx.


8. SSL con Let’s Encrypt

8.1 Obtener certificado

sudo certbot --nginx -d cloud.tudominio.com

Certbot:

  1. Verifica el dominio.
  2. Genera el certificado.
  3. Modifica la configuración de Nginx automáticamente.
  4. Programa la renovación automática.

Accede ahora a: https://cloud.tudominio.com

8.2 Verificar renovación

sudo certbot renew --dry-run

8.3 Diffie-Hellman (opcional)

sudo openssl dhparam -out /etc/nginx/dhparam.pem 4096

Añade en la config de Nginx:

ssl_dhparam /etc/nginx/dhparam.pem;

Consulta Guía completa para configurar SSL en Nginx y Cómo implementar el protocolo HTTPS correctamente.


9. Instalación web (asistente)

9.1 Acceder al asistente

Abre en el navegador:

https://cloud.tudominio.com

9.2 Configurar

  1. Usuario admin: tu nombre.
  2. Contraseña: robusta.
  3. Data folder: /var/www/nextcloud-data.
  4. Base de datos:
    • Tipo: MySQL/MariaDB.
    • Usuario: nextcloud.
    • Contraseña: la que pusiste.
    • Base: nextcloud.
    • Host: localhost.
  5. Instalar.

Este paso tarda 1-3 minutos.

9.3 Post-instalación

Tras la instalación:

  1. Instalar apps recomendadas (el asistente te lo sugiere).
  2. Configurar zona horaria.
  3. Cambiar contraseña de admin.
  4. Configurar email (opcional).

Consulta Buenas prácticas en contraseñas y 2FA.


10. Configuración avanzada

10.1 Config.php

Edita /var/www/nextcloud/config/config.php:

sudo nano /var/www/nextcloud/config/config.php

Ajustes recomendados:

<?php
$CONFIG = array (
  'instanceid' => '...',
  'passwordsalt' => '...',
  'secret' => '...',
  'trusted_domains' => [
    0 => 'cloud.tudominio.com',
    1 => 'IP_DEL_SERVIDOR',
  ],
  'datadirectory' => '/var/www/nextcloud-data',
  'dbtype' => 'mysql',
  'version' => '30.0.0.0',
  'overwrite.cli.url' => 'https://cloud.tudominio.com',
  'overwriteprotocol' => 'https',
  'htaccess.RewriteBase' => '/',
  'dbname' => 'nextcloud',
  'dbhost' => 'localhost',
  'dbport' => '',
  'dbtableprefix' => 'oc_',
  'mysql.utf8mb4' => true,
  'dbuser' => 'nextcloud',
  'dbpassword' => 'PasswordNextcloud123!',
  'installed' => true,

  // Caché
  'memcache.local' => '\\OC\\Memcache\\APCu',
  'memcache.distributed' => '\\OC\\Memcache\\Redis',
  'memcache.locking' => '\\OC\\Memcache\\Redis',
  'redis' => [
    'host' => 'localhost',
    'port' => 6379,
    'timeout' => 0.0,
  ],

  // Seguridad
  'twofactor_enforced' => 'true',
  'twofactor_enforced_groups' => ['admin'],

  // Rendimiento
  'default_phone_region' => 'ES',
  'enable_previews' => true,
  'preview_max_x' => 2048,
  'preview_max_y' => 2048,

  // Logs
  'loglevel' => 2,
  'log_type' => 'file',
  'logfile' => '/var/www/nextcloud-data/nextcloud.log',
  'log_rotate_size' => 104857600,
);

10.2 Permisos correctos

sudo chown -R www-data:www-data /var/www/nextcloud
sudo chown -R www-data:www-data /var/www/nextcloud-data
sudo chmod -R 750 /var/www/nextcloud
sudo chmod -R 750 /var/www/nextcloud-data

10.3 Cron en lugar de AJAX

Editar crontab de www-data:

sudo crontab -u www-data -e

Añade:

*/5 * * * * php -f /var/www/nextcloud/cron.php

Configurar en Nextcloud:

  1. Ajustes → Administración → Información básica.
  2. Background jobs: Cron.

Consulta Cómo automatizar tareas con cron.

10.4 Ejecutar occ (Nextcloud CLI)

sudo -u www-data php /var/www/nextcloud/occ

Comandos útiles:

# Estado
sudo -u www-data php /var/www/nextcloud/occ status

# Modo mantenimiento
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --on
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --off

# Reparar
sudo -u www-data php /var/www/nextcloud/occ maintenance:repair

# Actualizar apps
sudo -u www-data php /var/www/nextcloud/occ app:update --all

# Listar usuarios
sudo -u www-data php /var/www/nextcloud/occ user:list

# Añadir usuario
sudo -u www-data php /var/www/nextcloud/occ user:add usuario

# Resetear contraseña
sudo -u www-data php /var/www/nextcloud/occ user:resetpassword usuario

11. Redis para caché

Ya configuramos Redis en PHP y en config.php. Vamos a verificar y optimizar.

11.1 Verificar Redis

sudo systemctl status redis-server
redis-cli ping

Debería responder PONG.

11.2 Optimizar Redis

Edita /etc/redis/redis.conf:

sudo nano /etc/redis/redis.conf

Ajustes:

maxmemory 512mb
maxmemory-policy allkeys-lru
save 900 1
save 300 10
save 60 10000
appendonly no

Reiniciar:

sudo systemctl restart redis-server

11.3 Contraseña para Redis (opcional pero recomendado)

En /etc/redis/redis.conf:

requirepass PasswordRedis123!

Y en config.php:

'redis' => [
    'host' => 'localhost',
    'port' => 6379,
    'password' => 'PasswordRedis123!',
    'timeout' => 0.0,
],

11.4 Verificar caché

En Nextcloud → Ajustes → Administración → Información básica:

Debería decir:

Memcache local: APCu
Memcache distribuida: Redis
Memcache locking: Redis

Consulta Optimización de servidores Linux.


12. Apps esenciales

Nextcloud incluye muchas apps por defecto, pero estas son imprescindibles:

12.1 App Store

Ajustes → Apps → Tu App Store:

  • Collabora Online o OnlyOffice — ofimática.
  • Talk — videollamadas y chat.
  • Calendar — calendario.
  • Contacts — contactos.
  • Mail — cliente de correo.
  • Notes — notas.
  • Tasks — tareas.
  • Deck — gestión tipo Kanban.
  • Photos — fotos con reconocimiento.
  • Passwords — gestor de contraseñas.
  • Bookmarks — marcadores.
  • News — lector RSS.
  • Maps — mapas.

12.2 Instalar apps por CLI

sudo -u www-data php /var/www/nextcloud/occ app:install calendar
sudo -u www-data php /var/www/nextcloud/occ app:install contacts
sudo -u www-data php /var/www/nextcloud/occ app:install mail
sudo -u www-data php /var/www/nextcloud/occ app:install notes
sudo -u www-data php /var/www/nextcloud/occ app:install tasks
sudo -u www-data php /var/www/nextcloud/occ app:install deck

12.3 App recomendada por categoría

Ofimática:

  • OnlyOffice (recomendado).
  • Collabora Online (alternativa).

Comunicación:

  • Talk (videollamadas).
  • Mail (correo).

Productividad:

  • Calendar (calendario).
  • Contacts (contactos).
  • Tasks (tareas).
  • Deck (Kanban).
  • Notes (notas).

Media:

  • Photos (fotos).
  • Music (música).
  • Video (vídeos).

Seguridad:

  • Passwords (gestor).
  • Two Factor TOTP (2FA).

Otros:

  • Bookmarks.
  • News.
  • Maps.
  • Forms (formularios).

Consulta Protección contra malware: herramientas y estrategias.


13. Seguridad y hardening

13.1 Checklist

  1. HTTPS obligatorio.
  2. Contraseña admin robusta.
  3. 2FA obligatorio para admins.
  4. Cifrado SMB/Redis.
  5. Firewall restrictivo.
  6. Fail2ban.
  7. Actualizaciones al día.
  8. Backups regulares.
  9. No exponer a internet sin protección.
  10. Monitorización.

13.2 2FA con TOTP

sudo -u www-data php /var/www/nextcloud/occ app:install twofactor_totp
sudo -u www-data php /var/www/nextcloud/occ app:enable twofactor_totp

Forzar para admins:

En config.php:

'twofactor_enforced' => 'true',
'twofactor_enforced_groups' => ['admin'],

13.3 Cifrado del servidor

Encriptación en reposo:

sudo -u www-data php /var/www/nextcloud/occ app:enable encryption
sudo -u www-data php /var/www/nextcloud/occ encryption:enable
sudo -u www-data php /var/www/nextcloud/occ encryption:encrypt-all

⚠️ Guarda la clave de cifrado en un lugar seguro.

13.4 HTTPS obligatorio

Ya configurado con Certbot.

Añadir HSTS:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

13.5 Firewall

sudo ufw default deny incoming
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

13.6 Fail2ban

sudo apt install -y fail2ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Crea /etc/fail2ban/filter.d/nextcloud.conf:

[Definition]
_groupsre = (?:(?:,?\s*"\w+":(?:"[^"]+"|\w+))*)
failregex = ^\{%(_groupsre)s,?\s*"remoteAddr":"<HOST>"%(_groupsre)s,?\s*"message":"Login failed:
            ^\{%(_groupsre)s,?\s*"remoteAddr":"<HOST>"%(_groupsre)s,?\s*"message":"Trusted domain error.
ignoreregex =

Crea /etc/fail2ban/jail.d/nextcloud.conf:

[nextcloud]
enabled = true
port = http,https
filter = nextcloud
logpath = /var/www/nextcloud-data/nextcloud.log
maxretry = 5
bantime = 86400
findtime = 3600
sudo systemctl restart fail2ban
sudo fail2ban-client status nextcloud

Consulta Cómo configurar y usar Fail2ban.

13.7 Limitar acceso por IP (opcional)

En Nginx:

location / {
    allow 192.168.1.0/24;
    allow 200.100.50.25;
    deny all;
    try_files $uri $uri/ /index.php$request_uri;
}

13.8 VPN para acceso remoto

Recomendado si es para uso privado:

  • WireGuard.
  • Tailscale.
  • Cloudflare Tunnel.

Consulta Cómo montar tu propio servidor de VPN y Zero Trust.

13.9 Auditoría de seguridad

En Nextcloud → Ajustes → Administración → Resumen de seguridad:

Te muestra:

  • HTTPS configurado.
  • 2FA habilitado.
  • Contraseñas débiles.
  • Apps sin actualizar.
  • Errores en logs.

Corrige todas las advertencias.

13.10 Actualizar regularmente

sudo -u www-data php /var/www/nextcloud/updater/updater.phar

Consulta la sección 17.


14. Backups automáticos

14.1 Qué respaldar

  • Base de datos (nextcloud).
  • Configuración (/var/www/nextcloud/config/).
  • Apps personalizadas.
  • Datos (/var/www/nextcloud-data/) — opcional si usas almacenamiento externo.

14.2 Script de backup

sudo nano /usr/local/bin/backup-nextcloud.sh
#!/bin/bash
set -e

FECHA=$(date +%Y-%m-%d_%H-%M)
BACKUP_DIR="/backup/nextcloud"
NEXTCLOUD_DIR="/var/www/nextcloud"

mkdir -p "$BACKUP_DIR"

# Modo mantenimiento
sudo -u www-data php $NEXTCLOUD_DIR/occ maintenance:mode --on

# Backup BD
mysqldump --single-transaction -u nextcloud -pPASSWORD nextcloud | gzip > "$BACKUP_DIR/nextcloud-db-$FECHA.sql.gz"

# Backup configuración
tar -czf "$BACKUP_DIR/nextcloud-config-$FECHA.tar.gz" \
    -C "$NEXTCLOUD_DIR" config apps

# Backup datos (opcional)
# rsync -av --delete /var/www/nextcloud-data/ "$BACKUP_DIR/data/"

# Modo normal
sudo -u www-data php $NEXTCLOUD_DIR/occ maintenance:mode --off

# Retención 30 días
find "$BACKUP_DIR" -name "*.gz" -mtime +30 -delete

echo "Backup completado: $FECHA"
sudo chmod +x /usr/local/bin/backup-nextcloud.sh

14.3 Programar con cron

sudo crontab -e
0 3 * * * /usr/local/bin/backup-nextcloud.sh >> /var/log/backup-nextcloud.log 2>&1

14.4 Probar restauración

Esencial. Un backup no probado no es un backup.

Consulta La importancia de los backups y Cómo hacer un backup seguro en Linux.


15. Clientes: Windows, macOS, Linux, móvil

15.1 Cliente de escritorio

Descargar: https://nextcloud.com/install/#install-clients

Disponible para:

  • Windows (10, 11).
  • macOS (Intel, Apple Silicon).
  • Linux (AppImage, deb, rpm, Flatpak).

Configuración:

  1. Instalar.
  2. Introducir URL: https://cloud.tudominio.com.
  3. Credenciales.
  4. Elegir carpetas a sincronizar.

15.2 Cliente móvil

iOS: App Store → «Nextcloud»
Android: Google Play / F-Droid → «Nextcloud»

Funciones:

  • Sincronización automática de fotos.
  • Acceso a archivos.
  • Compartir enlaces.
  • Edición de documentos.
  • Chat y videollamadas (Talk).

15.3 Cliente web

Accede directamente a https://cloud.tudominio.com.

15.4 WebDAV

Acceso por WebDAV:

https://cloud.tudominio.com/remote.php/dav/files/USUARIO/

Ejemplo con rclone:

rclone config
# Tipo: webdav
# URL: https://cloud.tudominio.com/remote.php/dav/files/USUARIO/
# Vendor: nextcloud
# Usuario: tu-usuario
# Contraseña: tu-password

15.5 Sincronización con otros servicios

  • rclone para sincronizar con Google Drive, Dropbox, S3.
  • Nextcloud Desktop para sincronización continua.

Consulta Cómo usar Python y pandas para análisis de datos si integras con scripts.


16. Integración con Office

16.1 OnlyOffice

Recomendado. Alternativa open source a Microsoft Office.

Instalación:

Opción 1: Docker (recomendado):

docker run -i -t -d -p 8080:80 --restart=always \
    -v /app/onlyoffice/DocumentServer/logs:/var/log/onlyoffice \
    -v /app/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data \
    onlyoffice/documentserver

Opción 2: Instalación nativa:

Consulta https://helpcenter.onlyoffice.com/

Configurar en Nextcloud:

  1. Ajustes → Apps → OnlyOffice.
  2. Instalar y habilitar.
  3. Configurar URL: http://IP_DEL_SERVIDOR:8080/.

16.2 Collabora Online

Alternativa. También open source.

Instalación:

docker run -t -d -p 9980:9980 \
    -e "domain=cloud\\.tudominio\\.com" \
    -e "extra_params=--o:ssl.enable=false" \
    --restart always \
    collabora/code

Configurar en Nextcloud con la app Collabora Online.

16.3 Comparativa

AspectoOnlyOfficeCollabora
Compatible MS Office✅ Excelente✅ Buena
InterfazModernaClásica
RecursosMásMenos
InstalaciónFácil (Docker)Fácil (Docker)
Recomendación✅ Para uso generalPara recursos limitados

Consulta Qué es Docker.


17. Actualizaciones

17.1 Backup antes de actualizar

sudo /usr/local/bin/backup-nextcloud.sh

17.2 Actualizar con el updater

sudo -u www-data php /var/www/nextcloud/updater/updater.phar

El updater:

  1. Verifica la versión actual.
  2. Descarga la nueva.
  3. Reemplaza archivos.
  4. Actualiza la base de datos.
  5. Reinicia.

17.3 Actualización mayor

Para saltos de versión (ej: 28 → 30):

  1. Backup completo.
  2. Modo mantenimiento:
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --on
  1. Actualizar paso a paso (no saltar versiones mayores).
  2. Modo normal:
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --off

⚠️ Nextcloud solo permite saltos de una versión mayor a la siguiente. Ej: 28 → 29 → 30, no 28 → 30 directamente.

17.4 Actualizar apps

sudo -u www-data php /var/www/nextcloud/occ app:update --all

17.5 Verificar

sudo -u www-data php /var/www/nextcloud/occ status

Consulta Guía Completa de Linux.


18. Troubleshooting

18.1 Página en blanco

Diagnóstico:

sudo tail -f /var/log/nginx/nextcloud.error.log
sudo tail -f /var/www/nextcloud-data/nextcloud.log
sudo tail -f /var/log/php8.2-fpm.log

Causas:

  • Falta extensión PHP.
  • Permisos incorrectos.
  • Configuración de BD incorrecta.

Solución:

sudo chown -R www-data:www-data /var/www/nextcloud
sudo chmod -R 750 /var/www/nextcloud
sudo -u www-data php /var/www/nextcloud/occ maintenance:repair

18.2 «Trusted domain error»

Solución: añade el dominio a trusted_domains en config.php.

18.3 «Internal Server Error»

Diagnóstico:

sudo tail -f /var/log/nginx/nextcloud.error.log

Causas comunes:

  • Permisos.
  • Falta extensión.
  • .htaccess (si usas Apache).

18.4 No puedo subir archivos grandes

Ajustar:

  • php.ini: upload_max_filesize, post_max_size.
  • Nginx: client_max_body_size.
  • config.php: max_filesize.

18.5 Sincronización lenta

Causas:

  • Servidor saturado.
  • Disco lento.
  • PHP-FPM mal configurado.

Solución:

  • Aumentar pm.max_children.
  • SSD NVMe.
  • Redis para caché.

18.6 Redis no funciona

Diagnóstico:

redis-cli ping
sudo systemctl status redis-server

Causas:

  • Redis no arranca.
  • Contraseña incorrecta.
  • Configuración de config.php con errores.

18.7 Base de datos llena

Solución:

sudo du -sh /var/lib/mysql/nextcloud/

Limpiar versiones antiguas:

sudo -u www-data php /var/www/nextcloud/occ versions:cleanup

18.8 Errores tras actualización

Solución:

sudo -u www-data php /var/www/nextcloud/occ maintenance:repair
sudo -u www-data php /var/www/nextcloud/occ upgrade

18.9 SSL no funciona

sudo certbot renew
sudo nginx -t
sudo systemctl reload nginx

18.10 Ver logs

# Nextcloud
sudo tail -f /var/www/nextcloud-data/nextcloud.log

# Nginx
sudo tail -f /var/log/nginx/nextcloud.error.log

# PHP-FPM
sudo tail -f /var/log/php8.2-fpm.log

# MariaDB
sudo tail -f /var/log/mysql/error.log

Consulta Análisis de registros en Linux.


19. FAQ

¿Qué es Nextcloud?

Nextcloud es una plataforma de almacenamiento y colaboración en la nube auto-hospedada. Alternativa a Google Drive, Dropbox, OneDrive.

Precursor: fork de ownCloud (2016).

¿Nextcloud es gratis?

Sí, en su versión Community Edition.

Nextcloud Enterprise es de pago (soporte, features adicionales).

¿Nextcloud o ownCloud?

  • Nextcloud: más popular, más apps, actualizaciones frecuentes.
  • ownCloud: enfoque enterprise, integración Microsoft 365.

Recomendación: Nextcloud para uso general.

Consulta Guía de ownCloud.

¿Necesito un servidor potente?

No para empezar:

  • <10 usuarios: 2 GB RAM.
  • 10-50 usuarios: 4-8 GB RAM.
  • 50+ usuarios: 8+ GB RAM.

El disco es lo que más crece.

¿Cuánto disco necesito?

Depende del uso:

  • Uso personal: 100 GB – 1 TB.
  • PyME: 1-5 TB.
  • Empresa: 5+ TB.

Consejo: usa almacenamiento externo (NAS, S3) para los datos.

¿Cómo migro desde Google Drive?

Con rclone:

rclone config
# Configurar Google Drive como origen
# Configurar Nextcloud como destino
rclone copy gdrive: nextcloud:

¿Cómo añado usuarios?

Desde el panel admin:

  1. Usuarios → Añadir.
  2. Nombre, email, contraseña.

O con occ:

sudo -u www-data php /var/www/nextcloud/occ user:add usuario

¿Cómo comparto archivos?

  • Con usuarios: compartir con usuarios/grupos.
  • Enlace público: con o sin contraseña.
  • Federación: con otras instancias Nextcloud.

¿Cómo cifro los datos?

Server-side encryption:

sudo -u www-data php /var/www/nextcloud/occ encryption:enable

End-to-end encryption (solo para carpetas específicas):

  • Instalar app End-to-End Encryption.

¿Nextcloud soporta 2FA?

Sí. Instala twofactor_totp:

sudo -u www-data php /var/www/nextcloud/occ app:install twofactor_totp

Consulta la sección 13.2.

¿Cómo hago backup?

Consulta la sección 14.

Lo importante: backup de BD + archivos + configuración.

¿Cómo actualizo?

sudo -u www-data php /var/www/nextcloud/updater/updater.phar

Backup antes.

¿Nextcloud afecta al SEO?

No, si lo usas como nube privada.

Consejo: márcalo noindex si es cloud.tudominio.com.

¿Puedo usar Nextcloud para sincronizar código?

Sí, pero no es ideal. Para código usa Git (GitLab, Gitea).

¿Nextcloud soporta Office?

Sí, con OnlyOffice o Collabora. Consulta la sección 16.

¿Puedo migrar a Nextcloud desde otro servicio?

Sí:

  • Desde Google Drive: con rclone.
  • Desde ownCloud: herramienta de migración.
  • Desde Dropbox: con rclone.

¿Cuánto cuesta Nextcloud Enterprise?

Según tamaño. Para 50 usuarios, ~3.000-5.000 €/año.

Community Edition: gratis.

¿Nextcloud funciona con Docker?

Sí. Imagen oficial:

docker pull nextcloud

Consulta Qué es Docker.

¿Nextcloud soporta LDAP/AD?

Sí. Instala la app user_ldap y configura en el panel.

Consulta Gestión de identidades y accesos (IAM).

¿Cómo añado almacenamiento externo?

Apps compatibles:

  • S3, SMB, NFS, FTP, WebDAV.
  • Google Drive, Dropbox, OneDrive.

Ajustes → Almacenamiento externo.

¿Nextcloud soporta cuotas?

Sí. En el panel de usuarios.

sudo -u www-data php /var/www/nextcloud/occ user:setting usuario files quota 10GB

¿Nextcloud es seguro?

Sí, si lo configuras bien:

  • HTTPS.
  • 2FA.
  • Fail2ban.
  • Cifrado.
  • Actualizaciones.

Consulta Guía Completa de Ciberseguridad.

¿Cómo hago streaming de vídeo?

Nextcloud puede servir vídeos, pero para streaming profesional mejor Jellyfin o Plex.

¿Nextcloud tiene API?

Sí. API REST completa.

Documentación: https://docs.nextcloud.com/server/latest/developer_manual/client_apis/

¿Nextcloud soporta Kubernetes?

Sí. Helm chart oficial.

Consulta Qué es Kubernetes.


20. Conclusión

Nextcloud es la plataforma de nube auto-hospedada más popular del mundo. Con +400.000 instalaciones y +400 apps, es la alternativa open source más completa a Google Drive, Dropbox y Microsoft 365.

Puntos clave:

  1. Instalación completa con Nginx + MariaDB + PHP-FPM.
  2. SSL obligatorio con Let’s Encrypt.
  3. Redis para caché y locking.
  4. Configuración segura con 2FA, Fail2ban, cifrado.
  5. Apps esenciales (Talk, Office, Calendar, Mail…).
  6. Integración con OnlyOffice/Collabora.
  7. Clientes para Windows, macOS, Linux, móvil.
  8. Backups automáticos.
  9. Actualizaciones fáciles.
  10. Troubleshooting extenso.

Si quieres seguir aprendiendo:

Deja un comentario