Guía completa para instalar Nextcloud con SSL (Nginx y Let’s Encrypt) en Ubuntu

¿Te imaginas tener tu propio espacio en la nube, completamente bajo tu control y con la tranquilidad de saber que tus archivos, documentos, fotos y contactos están protegidos de forma privada y segura? Con Nextcloud puedes convertir esa idea en realidad. Nextcloud es una plataforma de colaboración de código abierto que te permite almacenar, compartir y sincronizar tus archivos desde cualquier lugar, con la flexibilidad de instalarla en tu propio servidor.
En esta guía completa, aprenderás paso a paso cómo instalar y configurar un servidor Nextcloud en Ubuntu utilizando Nginx, MariaDB (o MySQL) y PHP-FPM. Además, implementarás certificados SSL gratuitos de Let’s Encrypt para garantizar que toda la información viaje cifrada a través de Internet, protegiendo tu nube de amenazas y accesos no autorizados.
Este proceso es ideal para quienes buscan independencia de servicios de terceros y requieren un mayor control sobre la seguridad de sus datos. Al final de la configuración, contarás con una poderosa solución en la nube, con la misma o mayor funcionalidad que las plataformas comerciales, pero totalmente gestionada por ti y personalizable a tus necesidades. ¡Comencemos!.
Requisitos previos
- Un servidor o VPS con Ubuntu (las instrucciones están basadas en Ubuntu 20.04 / 22.04 / 24.04, pero pueden servir para otras versiones de Ubuntu/Debian con ligeros cambios).
- Acceso root o de un usuario con privilegios de sudo.
- Un dominio o subdominio apuntando a la IP de tu servidor (por ejemplo,
cloud.tudominio.com
).
- Conexión a Internet para poder instalar los paquetes y generar los certificados Let’s Encrypt.
Paso 1: Actualizar el servidor
Antes de empezar, es buena práctica actualizar los paquetes del sistema:
sudo apt update
sudo apt upgrade -y
Una vez terminada la actualización, reinicia si es necesario:
sudo reboot
Paso 2: Instalar Nginx
Nginx será nuestro servidor web para Nextcloud:
sudo apt install nginx -y
Verifica que Nginx se está ejecutando:
sudo systemctl status nginx
En caso de que no esté activo, inícialo y habilita su arranque al iniciar el sistema:
sudo systemctl start nginx
sudo systemctl enable nginx
Paso 3: Instalar MariaDB (o MySQL)
MariaDB (o MySQL) será nuestra base de datos para Nextcloud. Aquí usaremos MariaDB:
sudo apt install mariadb-server mariadb-client -y
Inicia y habilita el servicio de base de datos:
sudo systemctl start mariadb
sudo systemctl enable mariadb
Realiza una configuración inicial segura:
sudo mysql_secure_installation
Sigue los pasos:
- Establece la contraseña para el usuario root de MariaDB.
- Elimina usuarios anónimos.
- Deshabilita el acceso remoto del usuario root (opcional).
- Elimina la base de datos de prueba.
Paso 4: Crear la base de datos para Nextcloud
Ahora vamos a crear la base de datos y un usuario para Nextcloud:
- Accede a la consola de MariaDB:
sudo mysql -u root -p
- Dentro de la consola, ejecuta (cambia
contraseña_segura
por una contraseña robusta):
CREATE DATABASE nextcloud_db;
CREATE USER 'nextcloud_user'@'localhost' IDENTIFIED BY 'contraseña_segura';
GRANT ALL PRIVILEGES ON nextcloud_db.* TO 'nextcloud_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Paso 5: Instalar PHP y extensiones necesarias
Nextcloud requiere PHP-FPM y varias extensiones para funcionar correctamente:
sudo apt install php-fpm php-cli php-curl php-gd php-xml php-zip php-mbstring php-json php-intl php-mysql php-imagick php-bcmath php-gmp -y
Dependiendo de la versión de Ubuntu, es posible que debas instalar php8.0-fpm
, php8.1-fpm
o la versión disponible en tu repositorio. Ajusta el comando según corresponda:
sudo apt install php8.1-fpm php8.1-cli php8.1-curl php8.1-gd php8.1-xml php8.1-zip php8.1-mbstring php8.1-json php8.1-intl php8.1-mysql php8.1-imagick php8.1-bcmath php8.1-gmp -y
Verifica que PHP-FPM esté en ejecución:
sudo systemctl status php8.1-fpm
Enciéndelo y habilítalo si es necesario:
sudo systemctl start php8.1-fpm
sudo systemctl enable php8.1-fpm
Paso 6: Descargar Nextcloud
Visita la página oficial de descargas de Nextcloud para ver la última versión estable. Copia la URL y descárgala con wget:
cd /var/www/
sudo wget https://download.nextcloud.com/server/releases/nextcloud-XX.X.X.zip
Reemplaza
XX.X.X
con la versión más reciente.
Descomprime el archivo:
sudo apt install unzip -y
sudo unzip nextcloud-XX.X.X.zip
Esto creará una carpeta nextcloud en /var/www/nextcloud
.
Paso 7: Ajustar permisos
Para que Nginx y PHP-FPM puedan leer y escribir en la carpeta de Nextcloud correctamente, asignaremos los permisos apropiados:
sudo chown -R www-data:www-data /var/www/nextcloud
sudo chmod -R 755 /var/www/nextcloud
Paso 8: Configurar Nginx para Nextcloud
Ahora crearemos un archivo de configuración de Nginx para Nextcloud. Abre un nuevo archivo:
sudo nano /etc/nginx/sites-available/nextcloud.conf
Pega la siguiente configuración, ajustando tu dominio (ejemplo: cloud.midominio.com
) y la versión de PHP-FPM si difiere:
server {
listen 80;
server_name cloud.midominio.com;
# Redirigir HTTP a HTTPS
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name cloud.midominio.com;
# Rutas de certificado SSL (inicialmente las dejaremos vacías o comentadas, luego las actualizaremos con Let's Encrypt)
ssl_certificate /etc/letsencrypt/live/cloud.midominio.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/cloud.midominio.com/privkey.pem;
# Ajustes de seguridad
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
# Raíz y configuración de Nginx
root /var/www/nextcloud;
index index.php index.html index.htm;
client_max_body_size 512M;
fastcgi_buffers 64 4K;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
location ~ /\.ht {
deny all;
}
# Ajustes recomendados para cabeceras
add_header Referrer-Policy "no-referrer" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Robots-Tag "none" always;
}
Guarda los cambios (Ctrl + O
, luego Ctrl + X
).
Enlaza este archivo a sites-enabled y desactiva la configuración por defecto de Nginx, si no la necesitas:
sudo ln -s /etc/nginx/sites-available/nextcloud.conf /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default
Verifica la configuración y recarga Nginx:
sudo nginx -t
sudo systemctl reload nginx
Paso 9: Generar certificados SSL con Let’s Encrypt
Para obtener certificados SSL gratuitos y confiables, usaremos Certbot de Let’s Encrypt.
- Instala Certbot y el plugin para Nginx:
sudo apt install certbot python3-certbot-nginx -y
- Ejecuta Certbot para tu dominio:
sudo certbot --nginx -d cloud.midominio.com
Si todo va bien, tendrás tus archivos SSL en la ruta: /etc/letsencrypt/live/cloud.midominio.com/
.
Nota: Si prefieres no usar el plugin de Nginx, puedes usar el siguiente comando para solo generar los certificados (y luego configurarlos manualmente en tu archivo .conf):
sudo certbot certonly --webroot -w /var/www/nextcloud -d cloud.midominio.com
Paso 10: Completar la instalación de Nextcloud
- Abre tu navegador y visita
https://cloud.midominio.com
.
- Aparecerá el instalador web de Nextcloud. Te pedirá:
-
Usuario y contraseña de administración (un nuevo usuario administrador de Nextcloud).
-
Carpeta de datos (déjala como está por defecto:
/var/www/nextcloud/data
).
-
Configuración de la base de datos:
- Tipo de base de datos: MySQL/MariaDB
- Usuario de la base de datos:
nextcloud_user
- Contraseña de la base de datos:
contraseña_segura
- Nombre de la base de datos:
nextcloud_db
- Host:
localhost
-
Usuario y contraseña de administración (un nuevo usuario administrador de Nextcloud).
- Presiona Instalar para que se complete la configuración.

Una vez finalizado, podrás acceder al panel principal de Nextcloud y comenzar a subir y gestionar tus archivos.
Paso 11 (Opcional): Optimizaciones adicionales
-
Configuración de memoria caché: Para mejorar el rendimiento de Nextcloud, puedes configurar la caché con Redis y ajustar los parámetros de PHP (por ejemplo,
memory_limit
).
-
Firewall: Asegúrate de que los puertos 80 (HTTP) y 443 (HTTPS) estén abiertos en tu firewall si lo tienes habilitado.
- Automatizar renovación de Certbot: Los certificados de Let’s Encrypt se renuevan automáticamente. Para verificar la renovación, puedes listar las tareas programadas (cron jobs) creadas por Certbot:
systemctl list-timers | grep certbot
Paso 12 (Opcional): Integración con almacenamiento S3 para la carpeta data
Si deseas llevar la seguridad y flexibilidad de tu nube al siguiente nivel, puedes utilizar un servicio de almacenamiento S3 (como Amazon S3, DigitalOcean Spaces, Wasabi, entre otros) como almacenamiento primario de tu carpeta de datos en Nextcloud. Esto te permitirá escalar rápidamente tu espacio de almacenamiento y mejorar la durabilidad de tus archivos.
Importante: La configuración de S3 como almacenamiento principal debe hacerse preferiblemente antes de la instalación de Nextcloud o en una instalación nueva, ya que migrar datos existentes puede resultar complejo y requerir pasos adicionales.

A continuación, se muestra un ejemplo básico para Amazon S3. Ajusta los valores según tu proveedor y tus credenciales.
- Ubica el archivo
config.php
dentro de la carpetaconfig
de Nextcloud (por defecto en:/var/www/nextcloud/config/config.php
).
- Añade o modifica el siguiente bloque al final del array de configuración, justo antes de la última llave «);»
'objectstore' => [
'class' => 'OC\\Files\\ObjectStore\\S3',
'arguments' => [
'bucket' => 'mi-bucket-s3',
'key' => 'TU_S3_ACCESS_KEY',
'secret' => 'TU_S3_SECRET_KEY',
'region' => 'us-east-1',
'hostname' => 's3.amazonaws.com', // O el endpoint de tu proveedor
'use_ssl' => true,
'use_path_style' => false
],
],
-
bucket: Nombre de tu bucket en S3.
-
key y secret: Claves de acceso y secret key de tu cuenta en S3.
-
region: Región donde creaste tu bucket (p.e.
us-east-1
,eu-west-1
, etc.).
-
hostname: Endpoint para el servicio S3 (para AWS suele ser
s3.amazonaws.com
; con otros proveedores podría variar).
-
use_ssl: Te recomendamos mantenerlo en
true
para conexiones seguras.
-
use_path_style: Algunos proveedores requieren
true
para la compatibilidad de rutas (por ejemplo, MinIO), pero en Amazon S3 suele funcionar confalse
.
- Reiniciar servicios para aplicar cambios:
sudo systemctl reload php8.1-fpm sudo systemctl reload nginx
Ajusta la versión de PHP o el servicio web si es necesario
Tras este procedimiento, tu Nextcloud usará el bucket S3 configurado como almacenamiento principal para la carpeta de datos. Cualquier archivo que se cargue, se sincronice o se comparta a través de Nextcloud se almacenará directamente en tu servicio S3, mientras que la gestión, la base de datos y la aplicación seguirán viviendo en tu servidor.
Conclusión
¡Enhorabuena! Has instalado Nextcloud en tu servidor Ubuntu con Nginx, MariaDB, PHP-FPM y has configurado certificados SSL con Let’s Encrypt para asegurar las comunicaciones. A partir de aquí, podrás disfrutar de tu propia nube personal con cifrado y control total sobre tus datos.
¿Tienes alguna duda o sugerencia? ¡Déjala en los comentarios!