Instalar NextCloud en Ubuntu 20.04 con Apache (LAMP Stack)

Este tutorial te mostrará cómo instalar NextCloud en Ubuntu con Apache.

Instalar NextCloud en Ubuntu

¿Qué es NextCloud?

NextCloud es una solución de almacenamiento en la nube gratuita y de código abierto. Es funcionalmente similar a Dropbox. Las soluciones propietarias de almacenamiento en la nube (Dropbox, Google Drive, etc.) son cómodas, pero tienen un precio: pueden utilizarse para recopilar datos personales porque tus archivos se almacenan en sus ordenadores. Si te preocupa la privacidad, puedes cambiar a NextCloud, que puedes instalar en tu servidor doméstico privado o en un servidor privado virtual (VPS). Puedes subir tus archivos a tu servidor a través de NextCloud y luego sincronizar esos archivos con tu ordenador de sobremesa, portátil o smartphone. De este modo, tendrás el control total de tus datos.

Características de NextCloud

  • Gratis y de código abierto
  • Encriptación de extremo a extremo, lo que significa que los archivos pueden ser encriptados en los dispositivos de los clientes antes de ser subidos al servidor, por lo que incluso si alguien roba tu servidor, no puede leer tus archivos.
  • Puede integrarse con una suite ofimática online (Collobora Online, OnlyOffice) para que puedas crear y editar tus archivos doc, ppt, xls directamente desde NextCloud.
  • La tienda de aplicaciones contiene cientos de aplicaciones para ampliar la funcionalidad (como aplicación de calendario, aplicación de contactos, aplicación para tomar notas, aplicación de videoconferencia, etc.).
  • El cliente de sincronización está disponible en Linux, macOS, Windows, iOS y Android.

Requisitos previos para instalar NextCloud en Ubuntu 20.04 con Apache

NextCloud está escrito en lenguaje de programación PHP. Para seguir este tutorial, primero necesitas instalar la pila LAMP en Ubuntu 20.04. Si aún no lo has hecho, consulta el siguiente tutorial.

Puedes instalar NextCloud en Ubuntu en tu servidor doméstico o en un VPS (servidor virtual privado). También necesitas un nombre de dominio, así que más adelante podrás habilitar HTTPS para cifrar el tráfico HTTP. Yo registré mi nombre de dominio en NameCheap porque el precio es bajo y dan protección de privacidad whois gratis de por vida. Nextcloud se puede instalar sin un nombre de dominio, pero realmente no tiene sentido si no se cifra la conexión HTTP para evitar el espionaje. Recomiendo comprar un nombre de dominio, si realmente quieres jugar con el software del servidor y utilizarlo al máximo.

Ahora vamos a instalar NextCloud.

Paso 1: Descargar NextCloud en Ubuntu 20.04

Inicia sesión en tu servidor Ubuntu 20.04. A continuación, descargue el archivo zip de NextCloud en su servidor. La última versión estable es la 21.0.1 en el momento de escribir este artículo. Es posible que tengas que cambiar el número de versión. Ve a https://nextcloud.com/install y haz clic en el botón de descarga para el servidor para ver la última versión.

Puedes ejecutar el siguiente comando para descargarlo en tu servidor.

wget https://download.nextcloud.com/server/releases/nextcloud-21.0.1.zip

Siempre puedes utilizar el formato de URL anterior para descargar NextCloud. Si sale una nueva versión, simplemente sustituye 21.0.1 por el nuevo número de versión.

Una vez descargado, extrae el archivo con unzip.

La opción -d especifica el directorio de destino. Los archivos web de NextCloud se extraerán a /var/www/html/nextcloud/. Luego tenemos que cambiar el propietario de este directorio a www-data para que el servidor web (Apache) pueda escribir en este directorio.

sudo apt-get update

sudo apt install unzip

sudo unzip nextcloud-21.0.1.zip -d /var/www/html
sudo chown www-data:www-data /var/www/html/nextcloud/ -R

Paso 2: Crear una base de datos y un usuario para Nextcloud en el servidor de bases de datos MariaDB

Inicia sesión en el servidor de bases de datos MariaDB con el siguiente comando. Dado que MariaDB utiliza ahora el plugin unix_socket para autenticar el inicio de sesión del usuario, no es necesario introducir la contraseña de root de MariaDB. Sólo tenemos que prefijar el comando mysql con sudo.

sudo mysql

A continuación, cree una base de datos para Nextcloud. Este tutorial nombra la base de datos nextcloud. Puedes usar el nombre que quieras.

create database nextcloud;

Crea el usuario de la base de datos. De nuevo, puedes utilizar el nombre que prefieras para este usuario. Reemplaza tu-contraseña con tu contraseña preferida.

create user nextclouduser@localhost identified by 'your-password';

Concede a este usuario todos los privilegios en la base de datos nextcloud.

grant all privileges on nextcloud.* to nextclouduser@localhost;

Purga los privilegios y sal.

flush privileges;
exit;

Paso 3: Crear un host virtual Apache para Nextcloud

Crea un archivo nextcloud.conf en el directorio /etc/apache2/sites-available/, con un editor de texto de línea de comandos como Nano.

sudo nano /etc/apache2/sites-available/nextcloud.conf

Copia y pega el siguiente texto en el archivo. Sustituye nextcloud.example.com por tu subdominio preferido. No olvides crear un registro DNS A para este subdominio en tu editor de zonas DNS. Si no tienes un nombre de dominio real, te recomiendo ir a NameCheap para comprar uno. El precio es bajo y dan protección de privacidad whois gratis de por vida.

<VirtualHost *:80>
        DocumentRoot "/var/www/html/nextcloud"
        ServerName nextcloud.example.com

        ErrorLog ${APACHE_LOG_DIR}/nextcloud.error
        CustomLog ${APACHE_LOG_DIR}/nextcloud.access combined

        <Directory /var/www/html/nextcloud/>
            Require all granted
            Options FollowSymlinks MultiViews
            AllowOverride All

           <IfModule mod_dav.c>
               Dav off
           </IfModule>

        SetEnv HOME /var/www/html/nextcloud
        SetEnv HTTP_HOME /var/www/html/nextcloud
        Satisfy Any

       </Directory>

</VirtualHost>

Guarda y cierra el archivo. (Para guardar un archivo en el editor de texto Nano, pulsa Ctrl+O, y luego pulsa Enter para confirmar. Para salir, pulse Ctrl+X).

A continuación, habilita este host virtual.

sudo a2ensite nextcloud.conf

Ejecuta el siguiente comando para habilitar los módulos de Apache necesarios.

sudo a2enmod rewrite headers env dir mime setenvif ssl

A continuación, prueba la configuración de Apache.

sudo apache2ctl -t

If the syntax is OK, reload Apache for the changes to take effect.

sudo systemctl restart apache2

Paso 4: Instalar y habilitar los módulos PHP

Ejecuta los siguientes comandos para instalar los módulos PHP requeridos o recomendados por NextCloud.

sudo apt install imagemagick php-imagick libapache2-mod-php7.4 php7.4-common php7.4-mysql php7.4-fpm php7.4-gd php7.4-json php7.4-curl php7.4-zip php7.4-xml php7.4-mbstring php7.4-bz2 php7.4-intl php7.4-bcmath php7.4-gmp

Recarga Apache para utilizar estos módulos.

sudo systemctl reload apache2

Paso 5: Habilitar HTTPS

Ahora puedes acceder al asistente de instalación web de Nextcloud en tu navegador web introduciendo el nombre de dominio de tu instalación de Nextcloud.

nextcloud.example.com

If the web page can’t load, you probably need to open port 80 in firewall.

sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT

Y el puerto 443 también.

sudo iptables -I INPUT -p tcp --dport 443 -j ACCEPT

Antes de introducir cualquier información sensible, debemos habilitar la conexión segura HTTPS en Nextcloud. Podemos obtener un certificado TLS gratuito de Let’s Encrypt. Instala el cliente de Let’s Encrypt (certbot) desde el repositorio de Ubuntu 20.04.

sudo apt install certbot python3-certbot-apache

Python3-certbot-apache es el plugin de Apache. A continuación, ejecuta el siguiente comando para obtener un certificado TLS gratuito utilizando el plugin de Apache.

sudo certbot --apache --agree-tos --redirect --staple-ocsp --tucorreo@ejemplo.com -d nextcloud.example.com

Dónde:

  • –apache2: Utiliza el autentificador y el instalador de Apache
  • –agree-tos: Aceptar las condiciones de servicio de Let’s Encrypt
  • –redirect: Aplicar HTTPS añadiendo una redirección 301.
  • –staple-ocsp: Activar el grapado OCSP.
  • –email: Correo electrónico utilizado para el registro y el contacto de recuperación.
  • -d va seguido de una lista de nombres de dominio, separados por comas. Puede añadir hasta 100 nombres de dominio.

Se te preguntará si quieres recibir correos electrónicos de la EFF (Electronic Frontier Foundation). Después de elegir S o N, su certificado TLS se obtendrá y configurará automáticamente para ti, lo que se indica en el mensaje siguiente.

Paso 6: Termina la instalación en tu navegador web

Ahora puedes acceder al asistente de instalación web de Nextcloud utilizando una conexión HTTPS.

https://nextcloud.example.com

Para completar la instalación, necesitas crear una cuenta de administrador, introducir la ruta de la carpeta de datos de Nextcloud, introducir los detalles de la base de datos que creaste en el paso 2. Puedes usar el localhost por defecto como dirección de host, o puedes introducir localhost:3306, ya que MariaDB escucha en el puerto 3306.

La carpeta de datos es donde se almacenan los archivos de los usuarios. Por seguridad, es mejor colocar el directorio de datos fuera del directorio webroot de Nextcloud. Así que en lugar de almacenar los archivos de los usuarios bajo /var/www/nextcloud/data/, podemos cambiarlo a /var/www/nextcloud-data. que puede ser creado con el siguiente comando:

sudo mkdir /var/www/nextcloud-data

A continuación, asegúrate de que el usuario de Apache (www-data) tiene permiso de escritura en el directorio de datos.

sudo chown www-data:www-data /var/www/nextcloud-data -R

Haz clic en el botón Finish Setup, y verás la interfaz web de Nextcloud. ¡Felicidades! Puedes empezar a usarlo como tu almacenamiento privado en la nube.

Cómo configurar las notificaciones por correo electrónico de NextCloud

Si tu instancia de NextCloud va a ser utilizada por más de una persona, es importante que tu servidor NextCloud pueda enviar correos electrónicos transaccionales, como el de restablecimiento de la contraseña. En primer lugar, debes establecer una dirección de correo electrónico para tu propia cuenta. Ve a Configuración -> Información Personal y establece una dirección de correo electrónico para tu cuenta.

A continuación, ve a Configuración -> Configuración básica. Encontrarás la configuración del servidor de correo electrónico. Hay dos modos de envío: sendmail y smtp. Puedes elegir el modo sendmail si tu host NextCloud tiene un servidor SMTP en funcionamiento.

Si quieres utilizar un servidor SMTP que se ejecuta en otro host, entonces elige el modo smtp e introduce la dirección del servidor SMTP y las credenciales de acceso como se indica a continuación. Elija STARTTLS para el cifrado.

Para saber cómo configurar un servidor de correo electrónico, consulta el siguiente tutorial. Tenga en cuenta que recomiendo ejecutar el servidor de correo de iRedMail en un sistema operativo limpio. Instalar iRedMail en un sistema operativo que tiene otras aplicaciones web puede fallar, y probablemente romper las aplicaciones existentes.

Cómo restablecer la contraseña de usuario de Nextcloud desde la línea de comandos

Si has perdido la contraseña de tu cuenta de administrador, y no has configurado el envío de correos electrónicos en Nextcloud, entonces necesitas restablecer la contraseña ejecutando el siguiente comando en tu servidor. Reemplaza nextcloud_username con tu nombre de usuario real.

sudo -u www-data php /var/www/nextcloud/occ user:resetpassword nextcloud_username

También hay otros comandos que pueden resultarte útiles. Lista de comandos disponibles con:

sudo -u www-data php /var/www/nextcloud/occ

o también:

sudo -u www-data php /var/www/nextcloud/console.php

Cómo mover el directorio de datos

En caso de que necesites mover el directorio de datos de NextCloud, hay 4 pasos para lograrlo. En primer lugar, debes utilizar el comando cp para copiar el directorio de datos al nuevo directorio. Por ejemplo, el punto de montaje de mi disco duro externo es /media/tecnolitas/mi-disco. Creo el nuevo directorio de datos en el disco duro externo.

sudo mkdir /media/tecnolitas/mi-disco/nextcloud-data/

Luego copio el directorio de datos original al nuevo directorio de datos. La bandera -R significa que la operación de copia es recursiva.

sudo cp /var/www/nextcloud-data/* /media/tecnolitas/mi-disco/nextcloud-data/ -R

También tienes que copiar el archivo .ocdata.

sudo cp /var/www/nextcloud-data/.ocdata /media/tecnolitas/mi-disco/nextcloud-data/

A continuación, debe establecer www-data (usuario de Apache) como propietario.

sudo chown www-data:www-data /media/tecnolitas/mi-disco/nextcloud-data/ -R

Por último, es necesario editar el archivo config.php.

sudo nano /var/www/nextcloud/config/config.php

Encuentre la siguiente línea y cambie el valor de datadirectory.

'datadirectory' => '/media/tecnolitas/mi-disco/nextcloud-data',

Guarde y cierre el archivo. Vuelva a cargar la página web de NextCloud y habrá terminado.

Paso 7: Aumentar el límite de memoria de PHP

El límite de memoria PHP por defecto es de 128MB. NextCloud recomienda 512MB para un mejor rendimiento. Para cambiar el límite de memoria de PHP, edite el archivo php.ini.

sudo nano /etc/php/7.4/apache2/php.ini

Encuentra la siguiente línea. (línea 409)

memory_limit = 128M

Cambia el valor.

memory_limit = 512M

Guarda y cierra el archivo. Alternativamente, puedes ejecutar el siguiente comando para cambiar el valor sin abrir manualmente el archivo.

sudo sed -i 's/memory_limit = 128M/memory_limit = 512M/g' /etc/php/7.4/apache2/php.ini

A continuación, recarga Apache para que los cambios surtan efecto.

sudo systemctl reload apache2

Si tu servidor tiene el archivo /etc/php7.4/fpm/php.ini, eso significa que tu servidor también corre PHP-FPM. Recomiendo cambiar el memory_limit en PHP-FPM también.

sudo nano /etc/php/7.4/fpm/php.ini

Encuentra el parámetro memory_limit y cambia el valor. Después de guardar el archivo, recargue PHP-FPM para que el cambio surta efecto.

sudo systemctl reload php7.4-fpm

Paso 8: Configurar la caché de Redis para NextCloud

If you go to your NextCloud settings -> overview page, you might see the following warning:

No memory cache has been configured. To enhance your performance please configure a memcache if available.

Vamos a habilitar la memoria caché para nextCloud utilizando Redis. Ejecuta el siguiente comando para instalar el servidor Redis desde el repositorio de Ubuntu.

sudo apt install redis-server

Puedes comprobar la versión con:

redis-server -v

Muestra de salida:

Redis server v=5.0.7 sha=00000000:0 malloc=jemalloc-5.2.1 bits=64 build=636cde3b5c7a3923

Ahora podemos comprobar si el servidor redis se está ejecutando.

systemctl status redis

Sugerencia: Si el comando anterior no sale inmediatamente, puedes pulsar la tecla Q para recuperar el control del terminal.

En la captura de pantalla anterior, podemos ver que se está ejecutando y que el inicio automático está activado. Si por alguna razón no se está ejecutando, ejecuta el siguiente comando:

sudo systemctl start redis-server

Y si el autoarranque en el momento del arranque no está activado, puede utilizar el siguiente comando para activarlo:

sudo systemctl enable redis-server

Para configurar Redis como caché para nextCloud, necesitamos instalar la extensión de PHP para interactuar con Redis.

sudo apt install php-redis

Comprueba si la extensión está activada.

php --ri redis
php redis extension check

Podemos ver que la extensión Redis está habilitada. Si no está habilitada, ejecuta el siguiente comando:

sudo phpenmod redis

También es posible que tengas que recargar Apache si la extensión de redis aún no está habilitada.

sudo systemctl reload apache2

A continuación, edita el archivo de configuración de nextCloud.

sudo nano /var/www/html/nextcloud/config/config.php

Add the following lines above the ending ); line.

'memcache.distributed' => '\OC\Memcache\Redis',
'memcache.local' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => array(
     'host' => 'localhost',
     'port' => 6379,
     ),

Guarde y cierre el archivo. A continuación, reinicie Apache y PHP-FPM.

sudo systemctl restart apache2 php7.4-fpm

Ahora ve a la configuración de Ajustes-> Vista general de nuevo y actualiza la página web, la advertencia sobre el almacenamiento en caché de la memoria debería desaparecer.

Añadir índices que faltan

Si ves el siguiente mensaje en la página de Ajustes de NextCloud -> Vista general,

The database is missing some indexes. Due to the fact that adding indexes on big tables could take some time they were not added automatically.

A continuación, es necesario añadir manualmente esos índices. Cambia al directorio webroot de Nextcloud.

cd /var/www/html/nextcloud/

Ejecuta el siguiente comando para añadir índices a la base de datos Nextcloud.

sudo -u www-data php occ db:add-missing-indices

Ahora, si actualizas la página de Ajustes -> Vista general, la advertencia sobre los índices que faltan debería desaparecer.

Conversión a Big Int

Si ves el siguiente mensaje en la página de Ajustes -> Vista general,

Some columns in the database are missing a conversion to big int. Due to the fact that changing column types on big tables could take some time they were not changed automatically.

A continuación, debe cambiar manualmente el tipo de columna. Cambia al directorio webroot de Nextcloud.

cd /var/www/html/nextcloud/

Cambia tu Nextcloud al modo de mantenimiento para evitar que los usuarios se conecten y hagan cambios.

sudo -u www-data php occ maintenance:mode --on

A continuación, ejecuta el siguiente comando para cambiar el tipo de columna.

sudo -u www-data php occ db:convert-filecache-bigint

Una vez hecho esto, desactiva el modo de mantenimiento.

sudo -u www-data php occ maintenance:mode --off

Ahora, si actualizas la página de Ajustes -> Vista general de NextCloud, la advertencia sobre el int grande debería desaparecer.

Cómo habilitar OnlyOffice/Collabora Online

Por defecto, Nextcloud viene con soporte para OnlyOffice, que es una suite ofimática en línea que te permite editar tus archivos doc, ppt, xls directamente desde NextCloud. Sólo tenemos que instalar una aplicación para utilizar esta característica. Ve a Nextcloud Apps -> Office & Text. Busca y activa la aplicación del servidor de documentos de la comunidad.

Ahora, cuando hagas clic en el botón de añadir (+) en Nextcloud, podrás crear documentos de Word, hojas de cálculo y presentaciones directamente desde tu servidor Nextcloud.

Aumentar el límite de tamaño de los archivos cargados

Si usas el módulo PHP de Apache para ejecutar el script PHP, entonces no hay límite de tamaño de archivo de subida. Si utiliza PHP-FPM para ejecutar el script PHP, necesita cambiar el límite de tamaño del archivo. El tamaño máximo de archivo por defecto para subir en PHP-FPM es de 2MB. Para aumentar el límite de tamaño de subida, edite el archivo de configuración de PHP.

sudo nano /etc/php/7.4/fpm/php.ini

Encuentra la siguiente línea (línea 846).

upload_max_filesize = 2M

Cambia el valor como se indica a continuación:

upload_max_filesize = 1024M

Guarda y cierra el archivo. Alternativamente, puedes ejecutar el siguiente comando para cambiar el valor sin abrir manualmente el archivo.

sudo sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 1024M/g' /etc/php/7.4/fpm/php.ini

A continuación, reinicia PHP-FPM.

sudo systemctl restart php7.4-fpm

Añadir una entrada DNS local

Se recomienda editar el archivo /etc/hosts en tu servidor Nextcloud y añadir la siguiente entrada, para que Nextcloud no tenga que consultar el DNS público, lo que puede mejorar la estabilidad general. Si tu servidor Nextcloud no puede resolver el nombre de host nextcloud.example.com, entonces puedes encontrar un error 504 de tiempo de espera de la puerta de enlace.

127.0.0.1   localhost nextcloud.example.com

Una dirección IP en el archivo /etc/hosts puede tener múltiples nombres de host, así que si tienes otras aplicaciones instaladas en la misma caja, también puedes añadir otros nombres de host o subdominios en la misma línea de esta manera:

127.0.0.1   localhost focal ubuntu nextcloud.example.com 

Uso de Cron para ejecutar trabajos en segundo plano

Por defecto, Nextcloud utiliza AJAX para ejecutar una tarea con cada carga de página. Puedes utilizar el servicio cron del sistema, más eficiente, para ejecutar tareas en segundo plano. Ve a Ajustes -> Ajustes básicos y selecciona Cron.

A continuación, edite el archivo crontab del usuario www-data.

sudo -u www-data crontab -e

Añade la siguiente línea en este archivo, para que el trabajo cron se ejecute cada 5 minutos.

*/5 * * * * php7.4 -f /var/www/html/nextcloud/cron.php

Guarda y cierra el archivo.

Consejos para solucionar problemas

Si te encuentras con errores, puedes comprobar uno de los siguientes archivos de registro para averiguar qué está mal.

  • Registro de errores de Apache: /var/log/apache2/error.log
  • Apache error log for the Nextcloud virtual host: /var/log/apache2/nextcloud.error
  • Registro de la aplicación Nextcloud: /var/www/nextcloud/data/nextcloud.log

Por ejemplo, una vez tuve un “Internal Server Error” en mi instancia de Nextcloud y el archivo /var/log/nginx/nextcloud.error me dijo que

FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught OC\HintException: [0]: Memcache \OC\Memcache\Redis not available for local cache (Is the matching PHP module installed and enabled?)

Resulta que como he utilizado el PPA ppa:ondrej/php en mi servidor Ubuntu, también necesito instalar php7.4-redis además del paquete php-redis.

Si ves el siguiente mensaje de error en el archivo nextcloud.log, puedes ignorarlo.

Could not detect any host in https:///data/htaccesstest.txt

Ya tienes tu sistema de almacenamiento en la nube privado y tu aplicación colaborativa funcionando, espero que esto se venga bien para disponer de privacidad y tener experiencia montando sistemas autoalojados.

¡Que tengas un Ingenioso día!

¡que tengas un ingenioso día!

Contrata tu plan Ingenios@ de Sistemas por 5€ al mes y responderé a todas tus preguntas sobre tecnología en el menor tiempo posible. Pasa a formar parte de la comunidad Ingenios@s de Sistemas y disfruta de contenido exclusivo y aprende sobre sistemas Open Source, Blockchain, SmarContract, Web3, Inteligencia Artificial y Reaidad Virtual, súbete al tren de la Revolución 4.0

Si quieres estar al día y no perderte nada Suscribete al Podcast Ingenios@s de Sistemas, un episodio diario que te mantendrá informado y formado en esta vertiginosa carrera.

Deja un comentario

Share to...