GNU/Linux / junio 12, 2018

Instalar NextCloud con Redis, APCu, SSL y Apache en Debian 9

Hace una semana, hice la migración a Debian 9 y aproveché para instalar de nuevo NextCloud porque me daba un error extraño al actualizar la aplicación web y no sabía solucionarla -aunque encontré solución, pero no funcionaba y como que era versión nueva, seguramente se trataría de algún bug extraño-. Así que aproveché para escribir este artículo y así tenemos un tutorial de como configurar correctamente nuestra nube personal.

En este tutorial

Después de completar este tutorial, tendremos:

  • Un servidor NextCloud recién instalado.
  • Almacenamiento caché de PHP proporcionado por ACPu y Redis para notar un aumento de velocidad cuando se navegue en la nube.
  • Enlaces amigables, eliminamos el /index.php de la URL.
  • SSL habilitado con certificados de Let’s Encrypt y todo el tráfico redirigido a HTTPS.
  • Nuestra nube completamente cifrada.

Utilizaremos durante todo el tutorial el dominio nc.voidnull.es para representar una configuración válida. Recuerda que deberás de cambiar en todos los pasos ese dominio por el tuyo -que puede ser un subdominio o bien un dominio-.

Servidor Cloud económico

Para este tutorial utilizaremos un VPS en la nube de la empresa Clouding.io, crearemos un servidor en cuestión de segundos con Debian 9 y nos conectaremos por SSH. Aún así, también puedes realizar este tutorial en una Raspberry Pi o en un contenedor de Docker sin problemas -por si os interesa, Clouding tiene imágenes con Docker preinstalado-.

Recursos utilizados

Para este tutorial, vamos a utilizar un servidor con 1 CPU, 2GB de RAM y 25GB de espacio en disco SSD, que debería de ser suficiente. Si vais a preparar una nube para muchas más personas, estos valores pueden cambiar en función a las necesidades. En caso de usar un servidor de Clouding,  podemos empezar con un servidor sencillo y luego ir aumentando en espacio y recursos ya que en Clouding los servicios son elásticos y se pueden augmentar y disminuir tantas veces como sea necesario -excepto el disco, que solo se puede aumentar-.

Además de como montéis vuestra nube, también seria interesante activar las copias de seguridad y las instantáneas para no tener una sorpresa por si ocurre alguna cosa. Incluso también se podría tener un balanceo de servidores para evitar problemas.

Instalación de servidor web, APCu y Redis

Para el servidor web, podemos seguir estos pasos explicados en otra entrada llamada Instalación de un LAMP en Debian 8, cierto es que esto lo estamos haciendo en Debian 9, pero el proceso no cambia mucho.

Como siempre, lo primero actualizamos los repositorios y actualizamos los paquetes:

apt update
apt upgrade

Empezamos instalando Apache + PHP y MariaDB:

apt install apache2 php7.0 mariadb-server

Y lo iniciamos:

systemctl enable apache2
systemctl start apache2

Instalamos los paquetes necesarios para APCu y Redis:

apt install php7.0-apcu php7.0-redis redis-server

Habilitamos Redis para el inicio:

systemctl enable redis-server

Finalmente, instalamos los paquetes necesarios de PHP para NextCloud:

apt install php7.0-zip php-dompdf php7.0-xml php7.0-mbstring php7.0-curl unzip php7.0-gd php7.0-mysql

Y activamos los módulos para Apache2:

a2enmod rewrite headers env dir mime

Tras activar los módulos, reiniciamos Apache2

systemctl restart apache2

Configuración Apache2 y activación de SSL

Lo primero que haremos será crear un VirtualHost para nuestro NextCloud, vamos a ello:

cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/nextcloud.conf

Y editamos el fichero para que quede con el siguiente contenido:

<VirtualHost *:80>

ServerName nc.voidnull.es
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/vhost/nc.voidnull.es/www

<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>

<Directory /var/www/html/vhost/nc.voidnull.es/www>

Options Indexes FollowSymLinks MultiViews
AllowOverride FileInfo
#AuthConfig
Order allow,deny
allow from all
</Directory>

ErrorLog /var/www/html/vhost/nc.voidnull.es/logs/error.log
LogLevel warn
CustomLog /var/www/html/vhost/nc.voidnull.es/logs/access.log combined

<IfModule mod_headers.c>
Header always set Strict-Transport-Security “max-age=15768000; includeSubDomains; preload”
</IfModule>

</VirtualHost>

Creamos los directorios necesarios:

mkdir -p /var/www/html/vhost/nc.voidnull.es/{www,logs}

Activamos el espacio web y reiniciamos Apache:

cd /etc/apache2/sites-available/
a2ensite nextcloud.conf
systemctl restart apache2

Activamos SSL

Para SSL usaremos Let’s Encrypt, así que instalaremos los paquetes necesarios:

apt install letsencrypt certbot python-certbot-apache

Y creamos el certificado de la siguiente forma:

certbot –authenticator standalone –installer apache -d nc.voidnull.es –pre-hook “apache2ctl stop” –post-hook “apache2ctl start”

Y añadimos un e-mail que funcione:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices) (Enter ‘c’ to
cancel):

A partir de aquí se crearán ficheros de configuración y el CSR entre otras cosas importantes para crear el certificado. Hasta que nos preguntará por que tipo de acceso HTTPS queremos:

Please choose whether HTTPS access is required or optional.
——————————————————————————-
1: Easy – Allow both HTTP and HTTPS access to these sites
2: Secure – Make all requests redirect to secure HTTPS access
——————————————————————————-
Select the appropriate number [1-2] then [enter] (press ‘c’ to cancel):

Sin dudarlo, escogeremos la opción 2 y acabará de crear el certificado:

Congratulations! You have successfully enabled https://nc.voidnull.es
You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=nc.voidnull.es

En este punto tenemos un servidor web con un VirtualHost que permite acceder por subdominio y tiene todos los paquetes necesarios para poder instalar NextCloud.

Instalación de NextCloud

Ahora viene lo interesante de todo esto. Tendremos que descargar la última versión de NextCloud y crear una base de datos para que funcione. Por otro lado continuaremos con la instalación mediante el navegador.

Descargar NextCloud y configurar permisos

Lo primero que haremos será descargarnos la última versión de NextCloud dentro de la ruta de nuestra web:

cd /var/www/html/vhost/nc.voidnull.es/www/
wget https://download.nextcloud.com/server/releases/latest.zip

Y descomprimimos el fichero latest.zip:

unzip latest.zip

Movemos los ficheros y eliminamos directorio:

mv nextcloud/* . && mv nextcloud/.* . && rm -rf netxcloud

Cambiamos permisos:

chown -R www-data:www-data .*

Creación de la base de datos

Lo siguiente será crear la base de datos y el usuario, para ello nos iniciamos sessión en MySQL:

mysql -u root -p

Creamos la base de datos con esto:

CREATE DATABASE nextcloud;
CREATE USER ‘ncuser’@’localhost’ IDENTIFIED BY ‘ncpassword’;
GRANT ALL PRIVILEGES ON nextcloud . * TO ‘ncuser’@’localhost’;

Instalación de NextCloud

Abre tu navegador favorito y pon la URL que has configurado para acceder a NextCloud y así iniciar la instalación. Si no has creado un puntero antes, tendrás que esperar a que se propague el DNS.

Aquí tendremos que configurar un nombre de usuario para la cuenta administrador así como una contraseña segura. También tendrás que configurar una ruta donde se guardarán los datos que se suban de en la nube. Este directorio es donde van todos los ficheros, yo recomiendo ponerlo fuera de la ruta de la web para evitar problemas. Así que lo que haremos será crear un usuario y dentro de ese usuario crearemos un directorio:

useradd -m -d /bin/nologin voidnulles

Creamos directorio y cambiamos permisos:

mkdir -p /home/voidnulles/cloud
chown www-data.voidnulles -R /home/voidnulles

Nota: Haciendo esta configuración, me he dado cuenta que el el fichero .htaccess contiene errores. Es necesario instalar este: https://gitlab.com/snippets/1723283

Hecho esta parte, configuramos la base de datos. Tendremos que rellenar los datos y finalmente hacer clic en Completar la instalación:

Si es todo correcto, iniciará la instalación y obtendremos la siguiente imagen una vez finalice:

Configuración de NextCloud

Ahora mismo ya tenemos un NextCloud funcional y que se puede utilizar, pero hay una configuración muy recomendable e interesante para hacer a NextCloud y eso mismo vamos a explicar. Para empezar, si vamos a Configuración > Ajustes Básicos veremos que nos aparecen varios errores que podemos corregir con esta configuración:

Configuración de la memoria caché

Al principio hemos instalado Redis pero no lo hemos configurado. Para ello editaremos el fichero /etc/redis/redis.conf y tenemos que buscar el parámetro port 6379 y lo cambiamos por port 0. Buscaremos la siguiente línea unixsocket /var/run/redis/redis.sock y la descomentaremos. Debajo de esa línea nos encontraremos con unixsocketperm 700 el cual también descomentaremos y cambiaremos por unixsocketperm 770. Guardamos y salimos.

Añadimos el usuario redis al grupo de Apache:

usermod -a -G redis www-data

Finalmente, reiniciamos los servicios de Apache y Redis:

systemctl restart apache2
systemctl restart redis-server

Hecho esto, tendremos que configurar NextCloud para que use Redis, para ello tendremos que modificar el fichero de configuración de NextCloud que se encuentra en /var/www/html/vhost/nc.voidnull.es/www/config/config.php.

Añadiremos lo siguiente:

‘memcache.local’ => ‘\OC\Memcache\APCu’,
‘memcache.locking’ => ‘\\OC\\Memcache\\Redis’,
‘filelocking.enabled’ => ‘true’,
‘redis’ =>
array (
‘host’ => ‘/var/run/redis/redis.sock’,
‘port’ => 0,
‘timeout’ => 0.0,
),

Es posible que sea necesario reiniciar el servidor para que esto empiece a funcionar correctamente, así que una vez guardado esto, reiniciamos el servidor.

Configurar OPcache de PHP

Desde Nextcloud 12, se requiere una configuración adicional para configurar correctamente Opcache de PHP. Se muestra el error “La OPcache de PHP no está bien configurada. Para mejorar el rendimiento se recomienda usar las siguientes configuraciones en el php.ini“. Para ello tendremos que editar el fichero /etc/php/7.0/apache2/php.ini.

Al final del fichero añadimos lo siguiente:

; Nextcloud Opcache settings
opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

Y reiniciamos Apache:

systemctl restart apache2

Carga máxima de ficheros

Generalmente, hasta que no carguemos algún fichero grande no nos daremos cuenta de este “problema”. Por defecto PHP se configura con una limitación de carga de archivos de unos 2MB. Como estamos instalando una nube personal que puede contener archivos de un tamaño de gigabytes, podemos cambiar la configuración de PHP para permitir mucha más flexibilidad.

Para ello modificaremos el fichero /etc/php/7.0/apache2/php.ini y modifcaremos los parámetros upload_max_filesize y post_max_size y les pondremos el valor de 2048M. Finalmente, reiniciaremos Apache para que surja efecto.

Enlaces amigables

Otra cosa interesante es configurar enlaces amigables para que las URL’s sean visualmente más facil de recordar o más “simpáticas” -quería decir bonitas, pero no me parecen bonitas unas URL’s-. Tras esta pequeña broma sin sentido, lo que haremos será modificar el fichero de configuración de NextCloud /var/www/html/vhost/nc.voidnull.es/www/config/config.php y añadimos lo siguiente:

‘htaccess.RewriteBase’ => ”,

Y luego actualizaremos el fichero .htaccess:

sudo -u www-data php occ maintenance:update:htaccess

Y si reiniciamos el servicio del Apache veremos que de las URL nc.voidnull.es/index.php/apps/gallery pasaremos a nc.voidnull.es/apps/gallery.

Activar encriptación de los ficheros

Este apartado es opcional, pero altamente recomendable ya que aunque tengamos nuestros datos en la nube siempre es importante que estos datos estén cifrados. Para activar esta opción tan sólo tenemos que al apartado de Aplicaciones:

Hacemos clic sobre Apps Deshabilitadas y luego activamos la APP Default encryption module:

Tras activarlo, vamos a Configuración y luego a Cifrado allí tendremos que activar la opción Habilitar cifrado en el servidor:

Para activarlo finalmente, tendremos que hacer clic sobre el botón Habilitar cifrado.

Conclusión

Y con todo esto tendríamos nuestra nube personal en nuestro servidor. Desde hace varios años que estoy usando NextCloud y podría decir que es de lo mejor que tenemos en el mundo del Software Libre. Lo utilizo para todo, para tener mis ficheros -antes lo usaba mucho para clase-, también tengo mis calendarios, mis contactos -con los que podéis sincronizar en Android con DavDroid- también tengo mi nube federada con otras nubes de amigos. Es una locura todo lo que se puede hacer, yo recomiendo investigar.

No puedo acabar este artículo sin mencionar que es importante repasar la documentación que tienen los de NextCloud en su web. Si algo de este tutorial no funciona, porque han cambiado algo y  no me ha dado tiempo de actualizar, en la documentación deberías e estar la respuesta.


6 comentarios “Instalar NextCloud con Redis, APCu, SSL y Apache en Debian 9”

avatar
500
2 Comment threads
4 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
3 Comment authors
zatuzT3rr0rz0n3victorhck Recent comment authors
  Suscribirte  
más nuevos más viejos más votados
Notificarme
victorhck
Invitado

NextCloud es una joya que gracias a la comunidad va integrando más y más cosas muy útiles!
Saludos!!

zatuz
Invitado

hola primero que nada gracias por tu pagina esta genial
hola estube intentando montar el sitio
pero al poner a2ensite “nextcloud.con”
apache me manda error
si desmonto a2dissite nextcloud.conf
vuelve a funcionar
apache2ctl restart
AH00526: Syntax error on line 30 of /etc/apache2/sites-enabled/nextcloud.conf:
(
Header always set Strict-Transport-Security “max-age=15768000; includeSubDomains; preload”
)

Utilizamos cookies propias y de terceros para mejorar nuestros servicios. Si continúa navegando, consideramos que acepta su uso. Doble clic sobre aquí para cerrar.