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 esdocker 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
.docxde 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
- Guía Fedora 44: Novedades, Instalación y Upgrade para Sysadmins Linux
- Configura VLANs en Linux con nmcli: Guía paso a paso para sysadmins
- Protege tu SSH: Guía esencial para configurar Fail2ban en Linux
- Guía Definitiva: Configura Kubernetes con kubeadm en Ubuntu para Sysadmins Linux
- Configura Prometheus y Grafana: Guía DevOps para SysAdmins Linux

Pingback: Cómo migrar de Google Drive a Nextcloud sin perder archivos
Pingback: Distribuciones Linux inmutables: qué son y cuándo usarlas
Pingback: Infraestructura de desarrollo remota con Docker y VS Code
Pingback: Instalar Nginx en Ubuntu 24.04 paso a paso: la guía completa 2026 - Soy Linux
Pingback: Comando SCP en Linux: guía avanzada con ejemplos