Nextcloud es una plataforma de código abierto para almacenar, sincronizar y compartir archivos, con funciones similares a Google Drive o Dropbox pero alojada en tu propio servidor. En este tutorial instalarás Nextcloud en Ubuntu 24.04 con Apache, PHP 8.3 y MariaDB, lo publicarás con HTTPS mediante Let's Encrypt y dejarás configuradas la caché y las tareas en segundo plano para que funcione sin avisos en su panel de administración.
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 A apuntando a la IP del servidor. - Los puertos 22, 80 y 443 abiertos.
Paso 1: Instalar Apache, PHP y MariaDB
Nextcloud necesita un servidor web, PHP con varias extensiones y una base de datos. Ubuntu 24.04 incluye PHP 8.3 y MariaDB 10.11, ambos compatibles con las versiones actuales de Nextcloud. Actualiza el índice de paquetes:
sudo apt update
Instala Apache, MariaDB, PHP con las extensiones que requiere Nextcloud y la utilidad unzip:
sudo apt install -y apache2 mariadb-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 unzip
Comprueba la versión de PHP instalada:
php -v
PHP 8.3.6 (cli) (built: ...) (NTS)
...
Paso 2: Configurar el firewall
Permite SSH y el tráfico web con UFW. El perfil Apache Full abre los puertos 80 y 443:
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
Asegura primero la instalación de MariaDB. El asistente te permite eliminar usuarios anónimos, la base de datos de prueba y el acceso remoto de root; responde Y a esas preguntas:
sudo mariadb-secure-installation
Entra en la consola de MariaDB:
sudo mariadb
Crea la base de datos y un usuario dedicado para Nextcloud. Sustituye your_db_password por una contraseña robusta:
CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY 'your_db_password';
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Comprueba que el usuario puede conectarse a su base de datos (te pedirá la contraseña):
mariadb -u nextcloud -p -e "SHOW DATABASES;"
+--------------------+
| Database |
+--------------------+
| information_schema |
| nextcloud |
+--------------------+
Paso 4: Descargar Nextcloud
Descarga la última versión estable y su suma de comprobación desde el servidor oficial:
cd /tmp
curl -fLO https://download.nextcloud.com/server/releases/latest.zip
curl -fLO https://download.nextcloud.com/server/releases/latest.zip.sha256
Verifica que el archivo no está dañado:
sha256sum -c latest.zip.sha256
latest.zip: OK
Descomprímelo en /var/www, crea un directorio de datos fuera de la raíz web (así los archivos de los usuarios nunca se sirven directamente) y asigna ambos al usuario de Apache:
sudo unzip -q latest.zip -d /var/www/
sudo mkdir -p /var/www/nextcloud-data
sudo chown -R www-data:www-data /var/www/nextcloud /var/www/nextcloud-data
Paso 5: Ajustar PHP
Los valores por defecto de PHP se quedan cortos para Nextcloud. Edita la configuración de PHP que usa Apache:
sudo nano /etc/php/8.3/apache2/php.ini
Busca estas directivas y cambia sus valores (con Ctrl+W puedes buscarlas en nano):
memory_limit = 512M
upload_max_filesize = 2G
post_max_size = 2G
max_execution_time = 360
date.timezone = Europe/Madrid
Ajusta date.timezone a tu zona horaria y el tamaño de subida al máximo que quieras permitir por archivo.
Las tareas en segundo plano de Nextcloud se ejecutan con PHP desde la línea de comandos, y ahí APCu está desactivado por defecto. Actívalo para que la caché funcione también en esas tareas:
echo "apc.enable_cli=1" | sudo tee -a /etc/php/8.3/mods-available/apcu.ini
Paso 6: Configurar Apache
Crea un virtual host para Nextcloud:
sudo nano /etc/apache2/sites-available/nextcloud.conf
Añade el siguiente contenido, sustituyendo cloud.your_domain por tu dominio:
<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 necesario porque Nextcloud incluye un archivo .htaccess con sus reglas de reescritura y seguridad. Activa el sitio, desactiva el sitio por defecto y habilita los módulos que usa Nextcloud:
sudo a2ensite nextcloud.conf
sudo a2dissite 000-default.conf
sudo a2enmod rewrite headers env dir mime
Comprueba la sintaxis y recarga Apache:
sudo apache2ctl configtest
sudo systemctl restart apache2
Syntax OK
Paso 7: Instalar Nextcloud con occ
Nextcloud incluye la herramienta de línea de comandos occ, que permite completar la instalación sin pasar por el asistente web. Ejecútala como www-data, sustituyendo las contraseñas por las tuyas (your_db_password es la del paso 3 y your_admin_password la que usarás para entrar en Nextcloud):
cd /var/www/nextcloud
sudo -u www-data php occ maintenance:install \
--database "mysql" \
--database-name "nextcloud" \
--database-user "nextcloud" \
--database-pass "your_db_password" \
--admin-user "admin" \
--admin-pass "your_admin_password" \
--data-dir "/var/www/nextcloud-data"
Nextcloud was successfully installed
Nextcloud solo responde a los dominios que figuren en su lista de dominios de confianza. Añade el tuyo y define la URL base que se usa en los enlaces generados desde la línea de comandos:
sudo -u www-data php occ config:system:set trusted_domains 1 --value=cloud.your_domain
sudo -u www-data php occ config:system:set overwrite.cli.url --value=https://cloud.your_domain
Comprueba el estado de la instalación:
sudo -u www-data php occ status
- installed: true
- version: 32.0.0.13
- versionstring: 32.0.0
- maintenance: false
- needsDbUpgrade: false
...
Paso 8: Activar HTTPS con Let's Encrypt
Instala Certbot con su plugin para Apache:
sudo apt install -y certbot python3-certbot-apache
Solicita el certificado. Certbot detecta el virtual host por su ServerName, emite el certificado y crea la configuración HTTPS con redirección desde HTTP:
sudo certbot --apache -d cloud.your_domain
Successfully deployed certificate for cloud.your_domain to /etc/apache2/sites-available/nextcloud-le-ssl.conf
Congratulations! You have successfully enabled HTTPS on https://cloud.your_domain
La renovación automática queda programada con un temporizador de systemd. Puedes probarla con:
sudo certbot renew --dry-run
Paso 9: Configurar caché y tareas en segundo plano
Activa APCu como caché local, lo que acelera la interfaz notablemente:
sudo -u www-data php occ config:system:set memcache.local --value='\OC\Memcache\APCu'
Nextcloud ejecuta tareas periódicas (limpieza, notificaciones, escaneos). El método recomendado es cron. Cámbialo:
sudo -u www-data php occ background:cron
Abre el crontab del usuario www-data:
sudo crontab -u www-data -e
Añade esta línea al final para ejecutar las tareas cada 5 minutos:
*/5 * * * * php -f /var/www/nextcloud/cron.php
Por último, define una ventana de mantenimiento para que las tareas pesadas se ejecuten de madrugada (el valor es la hora de inicio en UTC):
sudo -u www-data php occ config:system:set maintenance_window_start --type=integer --value=1
Paso 10: Acceder a Nextcloud
Abre en el navegador:
https://cloud.your_domain
Inicia sesión con el usuario admin y la contraseña que definiste en el paso 7. Después ve a Configuración de administración > Vista general: Nextcloud ejecuta allí una comprobación de seguridad y configuración. Es habitual que aparezcan avisos menores (por ejemplo, sobre el servidor de correo o la región de los números de teléfono), que puedes resolver siguiendo los enlaces de cada aviso.
Para confirmar que las tareas en segundo plano funcionan, espera unos minutos y comprueba en Configuración de administración > Configuración básica que el apartado Trabajos en segundo plano muestra Cron y una ejecución reciente.
Solución de problemas
- "Acceso a través de un dominio no confiable": el dominio con el que accedes no está en
trusted_domains. Revisa la lista consudo -u www-data php occ config:system:get trusted_domainsy añádelo como en el paso 7. - Error 500 o página en blanco: revisa
/var/log/apache2/nextcloud_error.logy el registro de Nextcloud en/var/www/nextcloud-data/nextcloud.log. - Las subidas grandes fallan: comprueba que
upload_max_filesizeypost_max_sizetienen el valor deseado en/etc/php/8.3/apache2/php.iniy reinicia Apache consudo systemctl restart apache2. - Certbot no puede validar el dominio: confirma que el registro A apunta al servidor (
dig +short cloud.your_domain) y que el puerto 80 está abierto.
Conclusión
Tienes Nextcloud funcionando en Ubuntu 24.04 con Apache, MariaDB y HTTPS, con caché APCu y tareas en segundo plano por cron. Como siguientes pasos, instala los clientes de escritorio y móvil de Nextcloud para sincronizar tus archivos, añade Redis como caché de bloqueo de archivos si vas a tener varios usuarios, y programa copias de seguridad de /var/www/nextcloud, /var/www/nextcloud-data y de la base de datos.
