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 con sudo -u www-data php occ config:system:get trusted_domains y añádelo como en el paso 7.
  • Error 500 o página en blanco: revisa /var/log/apache2/nextcloud_error.log y el registro de Nextcloud en /var/www/nextcloud-data/nextcloud.log.
  • Las subidas grandes fallan: comprueba que upload_max_filesize y post_max_size tienen el valor deseado en /etc/php/8.3/apache2/php.ini y reinicia Apache con sudo 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.