Servidores

Cómo instalar Nextcloud en Ubuntu 22.04: guía completa 2026

Tu propia nube privada, en tu servidor Linux, sin cederle tus datos a Google ni a Dropbox. Esta guía te lleva desde un Ubuntu limpio hasta un Nextcloud accesible por HTTPS, con backup automatizado y endurecimiento básico.


TL;DR — Lo que vas a tener al final

  • Tiempo de setup: 30 minutos para instalación, 1-2 horas para upgrade in-place.
  • Requisitos: Backup de /home, conexión a internet, 20+ GB libres.
  • Resultado: Sistema actualizado con soporte extendido, drivers funcionando.
  • Troubleshooting: dnf distro-sync, akmods para NVIDIA, journalctl -p err.

¿Por qué instalar Nextcloud en tu propio servidor?

Si alguna vez te preguntaste qué pasa con los archivos que subes a Google Drive, Dropbox o OneDrive, la respuesta corta es: dejas de controlarlos. Los términos de servicio de esas plataformas les otorgan licencias sobre tu contenido, los escanean para entrenar modelos de IA, y pueden cancelar tu cuenta cuando quieran.

Nextcloud es la alternativa libre. Es software open source bajo AGPLv3 que te da:

  • Almacenamiento y sincronización de archivos entre dispositivos (móvil, escritorio, web).
  • Calendario y contactos que sincronizan con tu teléfono.
  • Colaboración en línea: edición de documentos con Collabora o OnlyOffice.
  • Galería de fotos con reconocimiento facial y mapa (opcional).
  • Videollamadas con Nextcloud Talk (sin límite de tiempo, sin telemetría).
  • Extensiones para montar una Intranet completa (gestión de proyectos, formularios, encuestas).

La instalación no es trivial pero tampoco es rocket science. Con Ubuntu 22.04 LTS, Docker y esta guía, la tendrás funcionando en menos de 90 minutos.


Lo que necesitas antes de empezar

Hardware mínimo recomendado

Recurso Mínimo Recomendado para 5+ usuarios
CPU 1 vCore 2+ vCores
RAM 2 GB 4 GB
Disco 20 GB SSD 80+ GB SSD
Sistema Ubuntu 22.04 LTS x64 Ubuntu 22.04 o 24.04 LTS

Consejo: en producción, no uses almacenamiento en red (NFS/SMB) para la carpeta de datos de Nextcloud. PostgreSQL y los archivos se beneficiarán del I/O local de un SSD. Si necesitas más espacio, agrega otro disco a la máquina.

Lo que debes tener listo

1. Un servidor Ubuntu 22.04 LTS con acceso sudo. Puede ser: – Una VM en Hetzner, DigitalOcean o Contabo (desde $4/mes). – Una Raspberry Pi 4/5 con Ubuntu Server. – Tu propio hardware en casa con IP pública estática o detrás de un VPN (Tailscale funciona perfecto). 2. Un dominio propio apuntando a la IP del servidor (registros A o AAAA). Usaremos cloud.tudominio.com en los ejemplos. 3. Acceso a los puertos 80 y 443 desde internet (para SSL con Let’s Encrypt). 4. Conocimientos básicos de terminal Linux: navegar directorios, editar archivos con nano o vim, entender qué es un proceso.


Paso 1: Preparar Ubuntu 22.04

Conéctate por SSH a tu servidor. Lo primero es actualizar los paquetes y configurar el firewall.

sudo apt update && sudo apt upgrade -y
sudo apt install -y ufw curl wget git nano

Configurar el firewall

sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status

Deberías ver algo así:

Status: active
To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443/tcp                    ALLOW       Anywhere

Crear un usuario dedicado (recomendado)

Ejecutar todo como root es mala práctica. Crea un usuario específico para Nextcloud:

sudo adduser nextcloud
sudo usermod -aG sudo nextcloud
sudo usermod -aG docker nextcloud  # lo agregaremos al grupo docker más adelante

A partir de aquí puedes hacer sudo -iu nextcloud para trabajar como ese usuario.


Paso 2: Instalar Docker y Docker Compose

Nextcloud corre dentro de contenedores. Esto te da tres ventajas enormes: actualizaciones limpias, portabilidad total y rollback inmediato si algo se rompe.

# Instalar Docker oficial
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# Agregar tu usuario al grupo docker
sudo usermod -aG docker $USER
# Verificar
docker --version
docker compose version

Importante: si instalaste Docker con la versión vieja docker-compose (con guion), desinstálala. El comando moderno es docker compose (espacio, sin guion) y lo trae Docker 20.10+.


Paso 3: Elegir la base de datos: MariaDB o PostgreSQL

Nextcloud soporta oficialmente MariaDB/MySQL y PostgreSQL. Para uso personal o de equipo pequeño, MariaDB es la opción más simple. Para instalaciones grandes con muchos archivos pequeños, PostgreSQL rinde mejor.

En esta guía usaremos PostgreSQL porque escala mejor con muchos archivos pequeños y soporta transacciones más estrictas. Si prefieres MariaDB, el ajuste en el docker-compose.yml es mínimo. Si prefieres MariaDB, el docker-compose.yml está casi idéntico, solo cambia el servicio db.


Paso 4: Crear el archivo docker-compose.yml

Vamos a poner todos los servicios en un directorio dedicado:

mkdir -p ~/nextcloud && cd ~/nextcloud

Crea el archivo docker-compose.yml:

nano docker-compose.yml

Pega este contenido (ajusta POSTGRES_PASSWORD con una contraseña fuerte):

services:
  db:
    image: postgres:16-alpine
    container_name: nextcloud-db
    restart: always
    environment:
      POSTGRES_DB: nextcloud
      POSTGRES_USER: nextcloud
      POSTGRES_PASSWORD: CAMBIA_ESTA_CONTRASEÑA
    volumes:
      - db_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U nextcloud"]
      interval: 30s
      timeout: 10s
      retries: 5
  app:
    image: nextcloud:30-apache  # NC29 es EOL desde 2026-08; usa NC30 (LTS) o espera NC31 en sep 2026
    container_name: nextcloud-app
    restart: always
    depends_on:
      db:
        condition: service_healthy
    ports:
      - "8080:80"
    environment:
      POSTGRES_HOST: db
      POSTGRES_DB: nextcloud
      POSTGRES_USER: nextcloud
      POSTGRES_PASSWORD: CAMBIA_ESTA_CONTRASEÑA
      NEXTCLOUD_TRUSTED_DOMAINS: cloud.tudominio.com
      NEXTCLOUD_OVERWRITEPROTOCOL: https
      NEXTCLOUD_OVERWRITEHOST: cloud.tudominio.com
    volumes:
      - nc_data:/var/www/html
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost/"]
      interval: 30s
      timeout: 10s
      retries: 5
volumes:
  db_data:
  nc_data:

Por qué expongo el puerto 8080 y no el 80 directamente: vamos a poner Nginx delante como reverse proxy para gestionar el SSL y el rendimiento. Nextcloud mismo escucha solo en localhost:8080, lo que reduce superficie de ataque.


Paso 5: Arrancar Nextcloud por primera vez

docker compose up -d
docker compose logs -f app

Verás los logs del primer arranque. Espera hasta ver líneas como:

nextcloud-app  | AH00558: apache2: Could not reliably determine the server's fully qualified domain name
nextcloud-app  | New nextcloud instance installed, please use the web installer or the occ command to finish the setup.

Ctrl+C para salir de los logs (los contenedores siguen corriendo).

Verifica que ambos contenedores están healthy:

docker compose ps

Deberías ver nextcloud-db y nextcloud-app con estado Up (healthy).


Paso 6: Completar la instalación desde el navegador

Abre http://TU_IP:8080 en tu navegador (todavía sin HTTPS, lo arreglamos en el siguiente paso).

Nextcloud te pedirá:

1. Crear cuenta de administrador: usa un nombre seguro y una contraseña de al menos 16 caracteres. Guárdala en un gestor de contraseñas (KeePassXC, Bitwarden). 2. Storage & database: como ya está todo conectado vía variables de entorno, verás el formulario prellenado con PostgreSQL. Solo haz clic en Install. 3. Apps recomendadas: deja las marcadas por defecto. Puedes agregar más después desde la tienda de apps.

Espera 1-2 minutos mientras instala las tablas y datos iniciales. Verás un mensaje “Nextcloud is installed”.


Paso 7: Reverse proxy con Nginx + Let’s Encrypt

Ahora vamos a poner Nginx delante de Nextcloud para servir HTTPS y mejorar el rendimiento.

7.1 Instalar Nginx y Certbot

sudo apt install -y nginx certbot python3-certbot-nginx

7.2 Crear el archivo de configuración

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

Contenido:

# Redirigir HTTP a HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name cloud.tudominio.com;
    return 301 https://$host$request_uri;
}
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name cloud.tudominio.com;
    # Certificados (Certbot los rellena)
    ssl_certificate /etc/letsencrypt/live/cloud.tudominio.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/cloud.tudominio.com/privkey.pem;
    # HSTS
    add_header Strict-Transport-Security "max-age=63072000" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header Referrer-Policy "no-referrer-when-downgrade" always;
    # Buffers ajustados para archivos grandes
    client_max_body_size 0;
    proxy_max_temp_file_size 0;
    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 https;
        proxy_set_header X-Forwarded-Host $host;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 3600s;
    }
}

Activa el sitio y verifica la sintaxis:

sudo ln -s /etc/nginx/sites-available/nextcloud /etc/nginx/sites-enabled/
sudo nginx -t

7.3 Obtener el certificado SSL

Antes de aplicar el certificado, asegúrate de que cloud.tudominio.com ya resuelve a la IP del servidor (dig cloud.tudominio.com). Si acabas de cambiar el DNS, espera unos minutos a que propague.

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

Certbot detecta tu archivo de configuración de Nginx y rellena las rutas del certificado automáticamente. Responde Yes cuando pregunte si quieres redirigir HTTP a HTTPS (ya está en la config, pero Certbot lo gestiona mejor).

7.4 Recargar Nginx

sudo systemctl reload nginx

Ahora abre https://cloud.tudominio.com en tu navegador. Deberías ver la pantalla de login de Nextcloud con el candado verde.


Paso 8: Hardening básico (no te lo saltes)

Una instalación por defecto funciona, pero deja la puerta abierta a varios vectores de ataque. Aplica estos cambios mínimos.

8.1 Configurar dominios de confianza correctamente

A veces Nextcloud detecta mal el dominio detrás del proxy. Verifica en Configuración → Sistema → Resumen:

Si dice “Está conectado a internet desde un dominio no confiable”, edita la configuración:

# Mejor editar config.php con el usuario correcto o usar occ (NO apt install en el contenedor — no persiste):
docker compose exec -u www-data app nano /var/www/html/config/config.php
# Recomendado: gestiona la config via occ, no edites el archivo a mano:

Verifica que el array trusted_domains incluya cloud.tudominio.com:

'trusted_domains' =>
  array (
    0 => 'cloud.tudominio.com',
  ),

Y agrega 'overwriteprotocol' => 'https' y 'overwritehost' => 'cloud.tudominio.com'.

8.2 Desactivar apps que no usas

La app Calendar y Contacts son útiles. La app Firstrunwizard deberías desactivarla después del primer login:

docker compose exec app php occ app:disable firstrunwizard

8.3 Forzar HTTPS y HSTS en la config

Edita /var/www/html/config/config.php (dentro del contenedor) y asegúrate de tener:

'overwriteprotocol' => 'https',
'htaccess.IgnoreFrontController' => false,
'check_for_working_webdav' => true,  // check_for_working_htaccess NO existe en Nextcloud config

Regenera el .htaccess:

docker compose exec app bash -c "cd /var/www/html && php occ maintenance:update:htaccess"

8.4 Limitar intentos de login

Instala la app Brute-force protection desde la tienda de apps (viene por defecto pero no está activada). Ajusta en Configuración → Seguridad:

  • Número máximo de intentos fallidos: 5
  • Tiempo de bloqueo después de N intentos: 30 minutos

Paso 9: Backup automatizado (la parte que nadie hace y todos lloran después)

Si pierdes el servidor y no tienes backup, pierdes todo. Vamos a automatizar dos cosas:

1. Snapshot de los volúmenes Docker (datos de Nextcloud + base de datos). 2. Exportación de la base de datos con pg_dump.

Crea el script ~/nextcloud/backup.sh:

nano ~/nextcloud/backup.sh

Contenido:

#!/bin/bash
set -e
BACKUP_DIR="/var/backups/nextcloud"
DATE=$(date +%Y%m%d_%H%M)
RETENTION_DAYS=30
mkdir -p "$BACKUP_DIR"
# 1. Dump de PostgreSQL
docker compose exec -T db pg_dump -U nextcloud nextcloud 
    | gzip > "$BACKUP_DIR/db_$DATE.sql.gz"
# 2. Snapshot del volumen de datos
docker run --rm 
    -v nextcloud_nc_data:/source:ro 
    -v "$BACKUP_DIR":/backup 
    alpine tar czf /backup/data_$DATE.tar.gz -C /source .
# 3. Rotar backups viejos
find "$BACKUP_DIR" -type f -mtime +$RETENTION_DAYS -delete
echo "[$(date)] Backup completado: $BACKUP_DIR"

Hazlo ejecutable y agrégalo a cron:

chmod +x ~/nextcloud/backup.sh
crontab -e

Añade esta línea (backup diario a las 3 AM):

0 3 * * * /home/tu_usuario/nextcloud/backup.sh >> /var/log/nextcloud-backup.log 2>&1

Tip extra: si quieres backups off-site, monta un rclone hacia Backblaze B2 o Wasabi (en el post de migración a Nextcloud mostramos cómo configurarlo) hacia Backblaze B2 o Wasabi (cuesta centavos por GB/mes) y copia el archivo final ahí. rclone tiene un backend S3-compatible que funciona con la mayoría de proveedores.


Paso 10: Probar todo end-to-end

Antes de declararlo listo, verifica:

  • [ ] Login web funciona en https://cloud.tudominio.com
  • [ ] Subes un archivo y aparece en otro dispositivo (instala el cliente en tu teléfono y laptop)
  • [ ] El certificado SSL se renueva solo (sudo certbot renew --dry-run)
  • [ ] El backup se ejecuta y los archivos pesan más de 0 bytes
  • [ ] El firewall sigue activo y solo expone 22, 80, 443
  • [ ] Pruebas un reinicio del servidor: sudo reboot → ¿arranca solo?

Si todo pasa: felicidades, tienes tu nube privada funcionando.


¿Qué sigue?

Esto es solo la base. Una vez que Nextcloud está corriendo, hay un mundo de apps y configuraciones por explorar:

  • Collabora Online: editor de documentos tipo Google Docs, integrado.
  • OnlyOffice: alternativa con mejor compatibilidad con archivos .docx de Microsoft.
  • Nextcloud Talk: videollamadas y chat cifrado de extremo a extremo.
  • Recognize: reconocimiento facial y de objetos en tu galería de fotos.
  • Calendar + DAVx5: sincroniza tu calendario/contactos con Android sin Google.
  • Memories: galería con mapa, similar a Google Photos.

Cada una de estas merece un post aparte. Si quieres que cubra alguna, déjalo en los comentarios.


Troubleshooting: errores comunes

“Trusted domain” después de cambiar de IP o dominio

Edita /var/www/html/config/config.php dentro del contenedor y agrega el dominio a trusted_domains.

Los archivos subidos quedan en 0 bytes

Causa típica: client_max_body_size mal configurado en Nginx. La línea client_max_body_size 0; desactiva el límite. Si la cambiaste, restablécela.

Nextcloud está muy lento

Causa típica: no tienes caché configurada. Ve a Configuración → Sistema → Almacenamiento y verifica que “Memcache” esté configurado. Para producción:

# Agregar al servicio app, en la sección environment:
  environment:
    POSTGRES_HOST: db
    # ... (tus vars existentes) ...
    REDIS_HOST: redis
    REDIS_PORT: 6379
  depends_on:
    db:
      condition: service_healthy
    redis:
      condition: service_healthy
# Y agregar el servicio redis al final del archivo:
  redis:
    image: redis:7-alpine
    container_name: nextcloud-redis
    restart: always
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 30s
      timeout: 10s
      retries: 5

Después activa memcache.local y memcache.distributed en la config de Nextcloud apuntando a redis.

“Internal Server Error” después de actualizar

docker compose exec app php occ upgrade
docker compose exec app php occ maintenance:repair

Preguntas frecuentes

¿Por qué Cómo instalar Nextcloud en Ubuntu 22.04: guía completa 2026 es relevante para sysadmins Linux?

Forma parte del flujo diario de administración. Los conceptos explicados se aplican directamente a servidores en producción y resuelven problemas reales que enfrentan sysadmins hispanohablantes.

¿Qué necesito para empezar con Cómo instalar Nextcloud en Ubuntu?

Distribución Linux actualizada (Debian, Ubuntu, RHEL, Fedora o Arch), acceso root, y conexión a internet. Para producción: entorno de staging separado antes de aplicar cambios.

¿Cuáles son los errores más comunes con Cómo instalar Nextcloud en Ubuntu?

Los tres más frecuentes: (1) saltar la lectura de logs, (2) aplicar cambios directos en producción sin probar, (3) olvidar permisos y ownership. La documentación y un plan de rollback siempre.

¿Cuándo usar Cómo instalar Nextcloud en Ubuntu y cuándo una alternativa?

Esta solución es ideal para el caso descrito. Alternativas como Docker, Ansible o configuración manual pueden ser mejores según contexto: portabilidad, escala y reproducibilidad son los factores clave.

¿Cómo migro desde una configuración previa a Cómo instalar Nextcloud en Ubuntu?

Documentar el estado actual, probar la nueva configuración en staging, validar funcionalmente, y aplicar en producción con rollback plan listo. Los posts de SoyLinux incluyen troubleshooting para los problemas más comunes.

Lee también

Alfonso Moreno | Sysadmin Senior

Soy Alfonso, sysadmin senior con RHCE y más de 10 años administrando sistemas Linux para empresas y proyectos personales. Me especializo en infraestructura, redes, virtualización, monitoring, automation y self-hosting. Sobre SoyLinux.com SoyLinux.com es un blog técnico en español sobre Linux, software libre y self-hosting. Lo mantengo en mi tiempo libre. Áreas de expertise - Linux server administration: RHEL, CentOS, Rocky, Alma, Fedora, Debian, Ubuntu - Network services: Postfix, BIND, Samba, NFS, Squid - Virtualización y containers: KVM, Proxmox, Docker, Podman - Monitoring: Prometheus, Grafana, Zabbix - Automation: Ansible, Bash scripting - Self-hosting: Vaultwarden, Nextcloud, Jellyfin, Immich, Homelab Contacto - Email: [email protected]

5 thoughts on “Cómo instalar Nextcloud en Ubuntu 22.04: guía completa 2026”

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *