Durante este procedimiento documento el paso a paso de como a instalar NextCloud en Ubuntu 20.04. Voy a partir de una instalación fresca.
El objetivo es tener un servidor corriendo NextCloud sobre LAMP (Linux / Apache / MySQL / PHP) y como paso extra recomendamos ejecutar este procedimiento para que nuestro sitio quede expuesto con certificados firmados por https://letsencrypt.org/ utilizando certbot.
Nextcloud es una serie de programas cliente-servidor con el objetivo de crear servicio de alojamiento de archivos. Su funcionalidad es similar al software Dropbox, aunque Nextcloud es de tipo código abierto, permitiendo a quien lo desee instalarlo en un servidor privado. Su arquitectura abierta permite añadir funcionalidad al servidor en forma de aplicaciones. Nextcloud es un proyecto paralelo de ownCloud que también es un software de servicio de alojamiento en la nube.
Procedimiento:
El procedimiento es una recopilación de los pasos de la documentación oficial de Nexcloud, quise dejar disponible todos los pasos en un documento y en español.
Instalación de dependencias:
El primer paso es asegurarse de tener el sistema actualizado, esto lo hacemos ejecutando:
sudo apt update sudo apt full-upgrade -y
Como estoy realizando la instalación sobre un servidor nuevo lo primero que voy a realizar el instalar mi suite de utilidades básicas que documento en este post.
El siguiente paso instalar los complementos necesarios para que funcione NextCloud:
sudo apt install -y apache2 mariadb-server libapache2-mod-php7.4 libapache2-mod-security2 php7.4-gd php7.4-mysql php7.4-curl php7.4-mbstring php7.4-intl php7.4-gmp php7.4-bcmath php-imagick php7.4-xml php7.4-zip
Descarga de NextCloud:
El siguiente paso es descargar la última versión de NextCloud. Al momento de confeccionar este tutorial es la 19.0.3. La última versión la podemos encontrar en la página oficial del proyecto en la sección.
cd /tmp wget https://download.nextcloud.com/server/releases/nextcloud-19.0.3.zip unzip nextcloud-19.0.3.zip
A continuación voy a crear el árbol de directorio donde quiero alojar los distintos virtualhosts que va a alojar este equipo.
sudo mkdir -p /var/www/servers/nextcloud.sismonda.com.ar
Y dentro voy a copiar el directorio que contiene a nexcloud dentro de esta carpeta con el nombre nextcloud.sismonda.com.ar
sudo mv /tmp/nextcloud /var/www/servers/nextcloud.sismonda.com.ar/htdocs sudo chown www-data.www-data -R /var/www/servers/nextcloud.sismonda.com.ar/htdocs
Configuración de MariaDB o MySQL:
Ahora vamos a adecuar el motor de base de datos para crear la base y el usuario. La contraseña a utilizar la voy a crear con el comando «mkpasswd.pl» de esta forma a seguro de utilizar siempre una distinta.
mkpasswd.pl -l 15
sudo mysql -u root
Y dentro de la consola de mysql ejecutamos los siguientes comando,
CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY 'phO9nehx3jdBik$';
CREATE DATABASE IF NOT EXISTS nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost';
FLUSH PRIVILEGES;
Configuración de Apache2/PHP:
Tenemos pendiente la configuración del Apache (el servidor web), este paso implica crear el archivo de configuración del virtualhost, configurar y habilitar módulos, deshabilitar el sitio por defecto y configurar el límite de memoria en el php.ini.
Creamos el archivo de configuración para nuestro virtualhosts
sudo vi /etc/apache2/sites-available/nextcloud.sismonda.com.ar.conf
Con el siguiente contenido:
<VirtualHost *:80>
ServerName nextcloud.sismonda.com.ar
ServerAdmin webmaster@sismonda.com.ar
DocumentRoot /var/www/servers/nextcloud.sismonda.com.ar/htdocs
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
Header always append X-Frame-Options SAMEORIGIN
</IfModule>
<Directory /var/www/servers/nextcloud.sismonda.com.ar/htdocs/>
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews
</Directory>
SecRequestBodyLimit 393216000
Redirect 301 /.well-known/carddav https://nextcloud.sismonda.com.ar/remote.php/dav
Redirect 301 /.well-known/caldav https://nextcloud.sismonda.com.ar/remote.php/dav
ErrorLog ${APACHE_LOG_DIR}/nextcloud-sismonda-error.log
CustomLog ${APACHE_LOG_DIR}/nextcloud-sismonda-access.log combined
</VirtualHost>
Finalizada la configuración de los sitios vamos a proceder a deshabilitar el sitio por defecto y habilitar nuestro sitio de nextcloud.
sudo a2ensite nextcloud.sismonda.com.ar.conf sudo a2dissite 000-default.conf
Procedemos a habilitar módulos necesarios / recomendados para nextcloud.
sudo a2enmod rewrite sudo a2enmod headers sudo a2enmod env sudo a2enmod dir sudo a2enmod mime sudo a2enmod security2
Ahora nos queda adecuar algunas variables de entorno de php para poder manejar los archivos de nextcloud.
sudo vi /etc/php/7.4/apache2/php.ini
memory_limit = 2048M
El ultimo paso es recargar el apache para que impacte nuestra instalación.
sudo systemctl reload apache2.service
Puesta en marcha Nextcloud:
El siguiente paso es acceder a nuestra instancia de nextcloud, esto lo podemos hacer ingresando la ip de nuestro servidor o el nombre del virtualhost si tenemos configurado el DNS local o agregamos la línea en nuestro archivo hosts.
Nextcloud nos recibe con la pantalla de wizard de configuración, donde damos de alta un usuario administrador de la plataforma y configuramos el usuario de la base de datos y su contraseña.
En mi caso yo destildé la opción que instale las aplicaciones recomendadas.
Finalizada la instalación ya tenemos nuestra instancia de nextcloud andando.
Optimizaciones de PHP
OpCache:
Habilitar OpCache, para eso debemos editar el archivo /etc/php/7.4/apache2/php.ini y adecuar / descomentar las siguientes líneas:
opcache.enable=1 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=10000 opcache.memory_consumption=128 opcache.save_comments=1 opcache.revalidate_freq=1
Apcu:
Para habilitar Apcu (APC User Cache) debemos ejecutar los siguientes comandos:
sudo apt install php-apcu sudo systemctl restart apache2
Y a continuación habilitar la funcionalidad en nextcloud.
sudo vi /var/www/servers/nextcloud.sismonda.com.ar/htdocs/config/config.php
Y agregar la siguiente línea.
'memcache.local' => '\OC\Memcache\APCu',
(Actualizado en 31/09/2021)
En las ultimas versiones de nextcloud, para que el cron se ejecute correctamente tenemos que editar el archivo «/etc/php/7.4/cli/conf.d/20-apcu.ini» y agregar la siguiente línea:
apc.enable_cli = 1
Queda de la siguiente forma:
El único paso que nos falta es acceder al portal de nuestro Nextcloud corriendo en Ubuntu 20.04.
En la ultima captura podrán ver que mi instancia de Nextcloud en Ubuntu 20.04 esta corriendo sobre https. Esto lo hice ejecutando el tutorial: Apache2 https con Certbot.