Nextcloud es una plataforma de almacenamiento y colaboración autohospedada: sincroniza archivos entre dispositivos, comparte carpetas por enlace y, con sus aplicaciones, ofrece calendario, contactos y videollamadas. En este tutorial instalarás Nextcloud en Ubuntu 24.04 con Apache, PHP 8.3, MariaDB y Redis, lo publicarás con HTTPS mediante Let's Encrypt y dejarás configurados la caché, las tareas en segundo plano y una copia de seguridad básica.
Se usa Apache porque es el servidor web que Nextcloud documenta como referencia: el archivo .htaccess que incluye Nextcloud se encarga de las redirecciones y cabeceras, sin tener que mantener una configuración de Nginx larga a mano.
Requisitos previos
- Un servidor con Ubuntu 24.04 LTS, por ejemplo un VPS de CubePath, con al menos 2 GB de RAM y espacio en disco suficiente para los archivos que vayas a guardar.
- Un usuario no root con privilegios
sudo. - Un dominio o subdominio (en esta guía,
cloud.your_domain) con un registro DNS A que apunte a la IP pública del servidor (your_server_ip). - Los puertos 80 y 443 accesibles desde Internet.
En todos los comandos, sustituye cloud.your_domain por tu dominio real.
Paso 1: Instalar Apache, MariaDB, PHP y Redis
Actualiza el índice de paquetes e instala el servidor web, la base de datos, PHP 8.3 (la versión de Ubuntu 24.04) con los módulos que Nextcloud necesita, y Redis para el bloqueo de archivos:
sudo apt update
sudo apt install apache2 mariadb-server redis-server libapache2-mod-php \
php-gd php-mysql php-curl php-mbstring php-intl php-gmp php-bcmath \
php-xml php-zip php-imagick php-apcu php-redis bzip2 unzip
Comprueba que los tres servicios están en marcha:
systemctl is-active apache2 mariadb redis-server
active
active
active
Y que PHP tiene la versión esperada:
php -v | head -n 1
PHP 8.3.6 (cli) (built: ...) (NTS)
Paso 2: Configurar el cortafuegos
Permite SSH antes de activar UFW para no perder la conexión, y abre HTTP y HTTPS con el perfil que instala Apache:
sudo ufw allow OpenSSH
sudo ufw allow "Apache Full"
sudo ufw enable
Verifica las reglas:
sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Apache Full ALLOW Anywhere
...
Paso 3: Crear la base de datos
En Ubuntu, el usuario root de MariaDB se autentica por socket, así que puedes entrar con sudo sin contraseña:
sudo mariadb
Crea la base de datos y un usuario dedicado. Sustituye your_strong_password por una contraseña larga y aleatoria, y guárdala: la usarás en el paso 6.
CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY 'your_strong_password';
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Comprueba que el nuevo usuario puede conectarse:
mariadb -u nextcloud -p -e "SHOW DATABASES;"
+--------------------+
| Database |
+--------------------+
| information_schema |
| nextcloud |
+--------------------+
Paso 4: Ajustar PHP
Los valores por defecto de PHP son demasiado bajos para Nextcloud (128 MB de memoria y subidas de 2 MB). Edita el php.ini que usa Apache:
sudo nano /etc/php/8.3/apache2/php.ini
Busca estas directivas y déjalas con estos valores (date.timezone debe ser tu zona horaria):
memory_limit = 512M
upload_max_filesize = 2G
post_max_size = 2G
max_execution_time = 360
date.timezone = Europe/Madrid
opcache.interned_strings_buffer = 16
El cron de Nextcloud se ejecuta con PHP en modo CLI, que no carga APCu por defecto. Actívalo para que las tareas de fondo no fallen cuando configures la caché:
echo "apc.enable_cli=1" | sudo tee -a /etc/php/8.3/mods-available/apcu.ini
Comprueba que la opción está activa en la CLI:
php -i | grep apc.enable_cli
apc.enable_cli => On => On
Los cambios en el php.ini de Apache se aplicarán cuando reinicies Apache en el paso 5.
Paso 5: Descargar Nextcloud y configurar Apache
Descarga la última versión estable junto con su suma de comprobación y verifica la integridad del archivo:
cd /tmp
wget https://download.nextcloud.com/server/releases/latest.tar.bz2
wget https://download.nextcloud.com/server/releases/latest.tar.bz2.sha256
sha256sum -c latest.tar.bz2.sha256
latest.tar.bz2: OK
Extrae Nextcloud en /var/www y crea el directorio de datos fuera de la raíz web, para que los archivos de los usuarios nunca se sirvan directamente:
sudo tar -xjf latest.tar.bz2 -C /var/www
sudo mkdir -p /var/www/nextcloud-data
sudo chown -R www-data:www-data /var/www/nextcloud /var/www/nextcloud-data
sudo chmod 750 /var/www/nextcloud-data
Crea el virtual host de Apache:
sudo nano /etc/apache2/sites-available/nextcloud.conf
<VirtualHost *:80>
ServerName cloud.your_domain
DocumentRoot /var/www/nextcloud
<Directory /var/www/nextcloud/>
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews
<IfModule mod_dav.c>
Dav off
</IfModule>
</Directory>
ErrorLog ${APACHE_LOG_DIR}/nextcloud_error.log
CustomLog ${APACHE_LOG_DIR}/nextcloud_access.log combined
</VirtualHost>
AllowOverride All es imprescindible: Nextcloud aplica sus reglas mediante .htaccess. Dav off desactiva el módulo WebDAV de Apache, porque Nextcloud implementa el suyo.
Activa los módulos necesarios, habilita el sitio, desactiva el sitio por defecto y reinicia Apache:
sudo a2enmod rewrite headers env dir mime
sudo a2ensite nextcloud.conf
sudo a2dissite 000-default.conf
sudo apache2ctl configtest
sudo systemctl restart apache2
Syntax OK
Paso 6: Instalar Nextcloud con occ
En lugar del asistente web, puedes instalar Nextcloud desde la terminal con occ, la herramienta de administración de Nextcloud. Así no queda expuesto un instalador en el navegador mientras terminas la configuración. Sustituye las contraseñas por las tuyas: your_strong_password es la del usuario de MariaDB del paso 3, y your_admin_password la de la cuenta de administrador de Nextcloud.
sudo -u www-data php /var/www/nextcloud/occ maintenance:install \
--database "mysql" \
--database-name "nextcloud" \
--database-user "nextcloud" \
--database-pass "your_strong_password" \
--admin-user "admin" \
--admin-pass "your_admin_password" \
--data-dir "/var/www/nextcloud-data"
Nextcloud was successfully installed
Añade tu dominio a la lista de dominios de confianza. Sin este paso, Nextcloud rechaza las peticiones que llegan con un nombre distinto de localhost:
sudo -u www-data php /var/www/nextcloud/occ config:system:set trusted_domains 1 --value="cloud.your_domain"
sudo -u www-data php /var/www/nextcloud/occ config:system:set overwrite.cli.url --value="https://cloud.your_domain"
Comprueba el estado de la instalación:
sudo -u www-data php /var/www/nextcloud/occ status
- installed: true
- version: ...
- versionstring: ...
- edition:
- maintenance: false
- needsDbUpgrade: false
En versionstring verás la última versión estable disponible en el momento de la descarga.
Paso 7: Activar HTTPS con Let's Encrypt
Instala Certbot con su plugin para Apache y solicita el certificado. Certbot crea un virtual host HTTPS a partir del tuyo y configura la redirección de HTTP a HTTPS:
sudo apt install certbot python3-certbot-apache
sudo certbot --apache -d cloud.your_domain
Cuando termine, añade la cabecera HSTS que Nextcloud recomienda. Edita el virtual host que ha generado Certbot:
sudo nano /etc/apache2/sites-available/nextcloud-le-ssl.conf
Dentro del bloque <VirtualHost *:443>, debajo de ServerName, añade:
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
Comprueba la sintaxis, recarga Apache y verifica que la renovación automática funciona:
sudo apache2ctl configtest
sudo systemctl reload apache2
sudo certbot renew --dry-run
Congratulations, all simulated renewals succeeded:
/etc/letsencrypt/live/cloud.your_domain/fullchain.pem (success)
Abre https://cloud.your_domain en el navegador e inicia sesión con el usuario admin y la contraseña que definiste en el paso 6.
Paso 8: Configurar la caché y las tareas en segundo plano
Sin caché, Nextcloud funciona, pero más lento, y el panel de administración muestra avisos. Configura APCu como caché local y Redis para el bloqueo de archivos:
sudo -u www-data php /var/www/nextcloud/occ config:system:set memcache.local --value='\OC\Memcache\APCu'
sudo -u www-data php /var/www/nextcloud/occ config:system:set memcache.locking --value='\OC\Memcache\Redis'
sudo -u www-data php /var/www/nextcloud/occ config:system:set redis host --value=localhost
sudo -u www-data php /var/www/nextcloud/occ config:system:set redis port --value=6379 --type=integer
Nextcloud ejecuta tareas periódicas (limpieza, notificaciones, escaneo de archivos). El método más fiable es el cron del sistema. Abre el crontab del usuario www-data:
sudo crontab -u www-data -e
Añade esta línea para ejecutar las tareas cada cinco minutos:
*/5 * * * * php -f /var/www/nextcloud/cron.php
Indica a Nextcloud que use cron y define la región telefónica por defecto y la ventana de mantenimiento (las tareas pesadas se ejecutarán a partir de la 01:00 UTC):
sudo -u www-data php /var/www/nextcloud/occ background:cron
sudo -u www-data php /var/www/nextcloud/occ config:system:set default_phone_region --value="ES"
sudo -u www-data php /var/www/nextcloud/occ config:system:set maintenance_window_start --type=integer --value=1
Añade los índices de base de datos que falten, algo habitual tras una instalación nueva:
sudo -u www-data php /var/www/nextcloud/occ db:add-missing-indices
Para verificarlo, entra en Configuración de administración > Vista general. La sección de seguridad y configuración debería mostrar pocos avisos o ninguno; cada aviso enlaza a la documentación con su solución. Pasados unos minutos, en Configuración básica verás la hora de la última ejecución del cron.
Paso 9: Instalar aplicaciones
Nextcloud incluye las aplicaciones básicas de archivos y fotos. Instala Calendar, Contacts y Tasks desde la terminal:
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 tasks
Comprueba que están habilitadas:
sudo -u www-data php /var/www/nextcloud/occ app:list --shipped=false
Enabled:
- calendar: ...
- contacts: ...
- tasks: ...
También puedes gestionar las aplicaciones desde el menú de usuario, en Aplicaciones. Para sincronizar archivos, instala el cliente de escritorio o la aplicación móvil de Nextcloud y conéctalos a https://cloud.your_domain.
Paso 10: Hacer copias de seguridad
Una copia completa de Nextcloud incluye tres partes: el directorio de instalación (sobre todo config/config.php), el directorio de datos y la base de datos. Para que la copia sea coherente, activa el modo mantenimiento mientras se hace:
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --on
Vuelca la base de datos y copia los directorios a /var/backups/nextcloud:
sudo mkdir -p /var/backups/nextcloud
sudo sh -c 'mysqldump --single-transaction nextcloud > /var/backups/nextcloud/nextcloud-db_$(date +%F).sql'
sudo rsync -a /var/www/nextcloud/ /var/backups/nextcloud/nextcloud-dir/
sudo rsync -a /var/www/nextcloud-data/ /var/backups/nextcloud/nextcloud-data/
Desactiva el modo mantenimiento:
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --off
Importanteuna copia en el mismo disco no te protege si pierdes el servidor. Envía
/var/backups/nextclouda otro sistema, por ejemplo conrsyncsobre SSH orestichacia un almacenamiento de objetos.
Solución de problemas
- "Acceso mediante un dominio no fiable": el dominio con el que accedes no está en
trusted_domains. Revisa la lista consudo -u www-data php /var/www/nextcloud/occ config:system:get trusted_domainsy añádelo como en el paso 6. - Error interno del servidor: consulta el registro de Nextcloud en
/var/www/nextcloud-data/nextcloud.logy el de Apache consudo tail -n 50 /var/log/apache2/nextcloud_error.log. - Las subidas grandes fallan: comprueba que
upload_max_filesizeypost_max_sizese han aplicado reiniciando Apache (sudo systemctl restart apache2) y revisando Configuración de administración > Sistema. - Aviso de cron sin ejecutar: verifica que la línea existe con
sudo crontab -u www-data -ly ejecutasudo -u www-data php -f /var/www/nextcloud/cron.phpa mano para ver si da algún error.
Conclusión
Ya tienes Nextcloud funcionando en Ubuntu 24.04 con Apache, MariaDB, HTTPS, caché con APCu y Redis, y tareas de fondo mediante cron. A partir de aquí puedes crear usuarios y grupos desde Cuentas, activar la autenticación en dos pasos con la aplicación Two-Factor TOTP Provider y automatizar la copia de seguridad del paso 10 con un temporizador de systemd para enviarla fuera del servidor cada noche.
