Buenas a todos y bienvenidos a este artículo en el que os mostraré como realizar la instalación de Nextcloud 21.0.0 en un servidor con Ubuntu 20.04 Focal Fossa.
Nextcloud es una plataforma que proporciona una solución de colaboración muy similar a Google Docs o Dropbox pero que opera de forma local, y que no está vinculada a servicios externos en la nube.
Si necesitáis más información sobre esta herramienta, aquí os dejo el enlace de la web oficial: https://nextcloud.com/hub/
Sin más dilación, ¡comencemos con la guía paso a paso para configurarlo!
1. Configuración Inicial Ubuntu 20.04
Antes de realizar la instalación de Nextcloud, hemos de instalar Apache, que será el servidor web en el que se ejecutará nuestra nube, así como MySQL, que será el servidor de base de datos que Nextcloud usará para guardar los archivos.
Primero, actualizaremos los repositorios de nuestra máquina:
sudo apt update
Y posteriormente, instalaremos Apache y MySQL:
sudo apt install apache2 sudo apt install mysql-server
Antes de comenzar a utilizar MySQL, es importante securizarlo. Para ello, lanzaremos el siguiente comando:
sudo mysql_secure_installation
En primer lugar, nos pregunta si deseamos establecer un componente de contraseñas seguras y establecer una contraseña para el usuario root.
Y a continuación nos consulta acerca de los componentes de la instalación de MySQL, preguntando si queremos eliminar el usuario «Anónimo» creado por MySQL para facilitar la instalación del servidor, deshabilitar la opción de login remoto del usuario root, eliminación de la base de datos «test» que por defecto se encuentra en nuestra instalación limpia de MySQL, los accesos a la misma, y refrescar la tabla de privilegios.
Tras este paso, nos conectaremos a la base de datos y la configuraremos:
sudo mysql -u root -p
Introducimos la contraseña que establecimos en el paso anterior, y crearemos la base de datos llamada «nextcloud«, el usuario «nextcloud» y su contraseña correspondiente, y le daremos privilegios sobre la base de datos recién creada.
create database nextcloud; create user 'nextcloud'@'localhost' identified by 'mipassword'; grant all privileges on nextcloud.* to 'nextcloud'@'localhost'; flush privileges; quit
Para terminar con el proceso de preparación de la máquina, instalaremos ahora PHP. Para garantizar la mayor compatibilidad con Nextcloud 21, se recomienda instalar la última versión de PHP, en este caso, 7.4.
sudo apt install php7.4
También instalaremos los componentes de PHP necesarios:
sudo apt install php7.4-gd php7.4-mysql php7.4-curl php7.4-mbstring sudo apt install php7.4-intl php7.4-gmp php7.4-bcmath php7.4-xml sudo apt install php7.4-zip php-imagick php-apcu
Finalizado este proceso, ya tenemos nuestro servidor Ubuntu 20.04 listo para comenzar la instalación de Nextcloud.
2. Instalación de Nextcloud
Nos dirigiremos a la página https://nextcloud.com para conseguir el link de descarga del mismo. A continuación, hacemos click en «Get Nextcloud», «Server Packages», click derecho en «Download Nextcloud», y copiamos el link de descarga como se muestra en la imagen:

Vamos a nuestra máquina, descargamos y descomprimimos la aplicación:
wget https://download.nextcloud.com/server/releases/nextcloud-21.0.0.zip sudo apt install unzip sudo unzip nextcloud-21.0.0.zip -d /var/www
Cambiaremos el propietario del directorio Nextcloud recién creado:
cd /var/www sudo chown -R www-data:www-data nextcloud/
Y ahora realizaremos unos pasos de configuración en Apache para poder acceder a nuestra instalación de Nextcloud mediante el navegador:
sudo a2enmod headers env dir mime
Añadiremos una entrada virtual en el archivo de configuración de Apache, para poder dirigir a quien apunte a nuestro servidor, al directorio de Nextcloud:
cd /etc/apache2/sites-available/ sudo vi 000-default.conf
Comentaremos la línea 2, y cambiaremos el apunte de «DocumentRoot» a nuestro directorio de Nextcloud, y añadiremos unos parámetros de configuración dentro del directorio, quedando de la siguiente forma:
<VirtualHost *:80> #ServerAdmin webmaster@localhost 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}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
Si disponemos de un dominio, y queremos acceder al servidor desde el exterior, añadiremos debajo de «DocumentRoot» la siguiente línea:
ServerName cloud.tudominio.com
Ahora, reiniciaremos Apache para aplicar los cambios realizados en los módulos:
sudo service apache2 restart
Y ya podremos acceder a la instalación de Nextcloud con nuestro navegador, accediendo mediante la IP interna de nuestra máquina:

En la parte superior, crearemos nuestro usuario administrador de la aplicación, y en la inferior, pondremos los datos relativos a la base de datos que configuramos previamente. Tendremos un checkbox habilitado por defecto, que nos instalará todo el Hub. Desactivarlo si queremos utilizar Nextcloud exclusivamente como un espacio de almacenamiento compartido.
Hacemos click en instalar, y tras unos minutos de espera, habrá concluido la instalación de Nextcloud.
3. Optimización de la instalación
Si hemos seguido el procedimiento de forma correcta, tendremos ya lista nuestra plataforma y podremos hacer uso de ella. Sin embargo, echando un vistazo rápido en Configuración > Administración > Vista general , vemos que hay una serie de errores que debemos solucionar:

Comenzaremos solucionando el error de límite de memoria de PHP, dirigiéndonos a nuestra máquina para cambiar el dicho límite en el archivo «php.ini», cambiando el valor «memory-limit» a 512M:
sudo vi /etc/php/7.4/apache2/php.ini sudo service apache2 restart
A continuación, corregiremos el error relativo a la memoria caché, así como la incidencia de código de pais. Para ello, editaremos el archivo «config.php» de nuestro directorio de Nextcloud:
sudo vi /var/www/nextcloud/config/config.php
Y añadiremos las siguientes líneas al final del archivo:
'default_phone_region' => 'ES', 'memcache.local' => '\OC\Memcache\APCu',
Ahora, abordaremos el problema de servidor web «caldav» y «carddav«. Para ello, tendremos que recargar el fichero «.htaccess» con el siguiente comando:
cd /var/www/nextcloud sudo -u www-data php occ maintenance:update:htaccess
Y posteriormente, modificar el archivo «.conf» de nuestro directorio de Apache:
vi /etc/apache2/sites-available/000-default.conf
Añadiendo el módulo «RewriteEngine«, dejando el archivo como se detalla a continuación:
<VirtualHost *:80> DocumentRoot /var/www/nextcloud <Directory /var/www/nextcloud/> Require all granted AllowOverride All Options FollowSymLinks MultiViews <IfModule mod_dav.c> Dav off </IfModule> RewriteEngine On RewriteRule ^/\.well-known/carddav https://%{SERVER_NAME}/remote.php/dav/ [R=301,L] RewriteRule ^/\.well-known/caldav https://%{SERVER_NAME}/remote.php/dav/ [R=301,L] RewriteRule ^/\.well-known/host-meta https://%{SERVER_NAME}/public.php?service=host-meta [QSA,L] RewriteRule ^/\.well-known/host-meta\.json https://%{SERVER_NAME}/public.php?service=host-meta-json [QSA,L] RewriteRule ^/\.well-known/webfinger https://%{SERVER_NAME}/public.php?service=webfinger [QSA,L] </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
Ahora, habilitaremos el módulo, y reiniciaremos Apache:
sudo a2enmod rewrite service apache2 restart
Por último solucionaremos el último error, relativo al módulo «php-imagick«. Este módulo fue instalado durante la preparación de la máquina, pero no es reconocido por la instalación de la plataforma. Para que sea reconocido, hemos de desinstalarlo e instalarlo nuevamente:
sudo apt remove imagemagick-6-common sudo apt remove php-imagick sudo apt autoremove sudo apt install php-imagick imagemagick service apache2 restart
Ahora volveremos a nuestro navegador web, y actualizaremos la página en la que teníamos los avisos de seguridad, y podremos comprobar que han desaparecido, salvo el aviso de navegación HTTP, que corregiremos unas líneas más adelante.
4. Configuración SSL y navegación segura
Tendremos aun el aviso de que la conexión no es segura, ya que estamos realizando la navegación mediante HTTP. Para poder eliminar este aviso, tendremos que instalar un certificado SSL en nuestra máquina, y editar el archivo «default-ssl.conf«:
vi /etc/apache2/sites-available/default-ssl.conf
Y añadir las modificaciones que realizamos anteriormente al archivo «000-default.conf«, pero aplicando los apuntes correspondientes hacia el certificado instalado y a su key correspondiente, así como hacia el subdominio correcto, dejándolo de la siguiente manera:
<IfModule mod_ssl.c> <VirtualHost *:443> ServerName nextcloud.tudominio.com SSLEngine On SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key DocumentRoot /var/www/nextcloud/ <Directory /var/www/nextcloud/> Options +FollowSymlinks AllowOverride All <IfModule mod_dav.c> Dav off </IfModule> SetEnv HOME /var/www/nextcloud SetEnv HTTP_HOME /var/www/nextcloud RewriteEngine On RewriteRule ^/\.well-known/carddav https://%{SERVER_NAME}/remote.php/dav/ [R=301,L] RewriteRule ^/\.well-known/caldav https://%{SERVER_NAME}/remote.php/dav/ [R=301,L] RewriteRule ^/\.well-known/host-meta https://%{SERVER_NAME}/public.php?service=host-meta [QSA,L] RewriteRule ^/\.well-known/host-meta\.json https://%{SERVER_NAME}/public.php?service=host-meta-json [QSA,L] RewriteRule ^/\.well-known/webfinger https://%{SERVER_NAME}/public.php?service=webfinger [QSA,L] </Directory> <IfModule mod_headers.c> Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains" </IfModule> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
Una vez realicemos estos cambios, cargaremos los módulos correspondientes, y reiniciaremos Apache:
sudo a2ensite default-ssl.conf sudo a2enmod ssl sudo a2enmod rewrite service apache2 restart
Para finalizar, os recomiendo cambiar el ajuste de «Trabajos en segundo plano». Para ello iremos a Configuración > Administración > Ajustes Básicos , y cambiaremos el tipo «AJAX» a «Cron«, y nos dirigiremos a nuestra máquina para configurar este cronjob:
sudo crontab -u www-data -e
Seleccionaremos la opción 1 «(/bin/nano)«, y añadiremos el texto a continuación al final del archivo:
*/5 * * * * php -f /var/www/nextcloud/cron.php
Con esto, habremos terminado de configurar completamente nuestra máquina de Ubuntu 20.04 con Nextcloud 21.
Espero que este artículo os sirva de ayuda y os anime a dar una oportunidad a esta maravillosa herramienta Open Source.
Muchas gracias, y un saludo.
Muy buen artículo, todavía no he seguido los pasos pero tiene buena pinta. Tan solo faltaría explicar la parte del instalar el certificado digital… Muchas gracias!