Nextcloud 12 en Ubuntu Server 16.04 con Redis, APcu, HSTS, letsencrypt …

Nextcloud 12 en Ubuntu 16.04con  Redis, APcu, HSTS, letsencrypt ... howto con todo ( o casi)

 

Abstract

El objetivo de este artículo es crear un servidor en una máquina virtual para la sincronización de archivos de equipos de escritorio en una nube personal con Nextcloud 12. El sistema operativo elegido es Ubuntu Server 16.04, por su compatibilidad con todas las exigencias de nextcloud. La plataforma de virtualización es Virtualbox.

La última versión de Nextcloud se ha desatado y ofrece muchas mejoras y nuevas características (incluyendo algunas mejoras importantes en la interfaz de usuario). Algunos de los cambios incluyen:

  • Advertencia de cuota
  • JSloader app (permite al administrador incluir JavaScript en todas las páginas Nextcloud)
  • Impersonate app (permite a los administradores  suplantar a otro usuario).
  • Tiempo real de acciones globales para usuarios
  • Guest app (una manera perfecta para dar un temporal y el acceso restringido a un cliente o un socio para datos compartidos)
  • Excludedirs app (habilita una carpeta específica patrón para ser excluidos del indexado)
  • Facilita el uso compartido de la carpeta actual
  • Capacidad para mover archivos a través del menú en lugar de arrastrar y soltar
  • Secure Drop (caída segura): único vínculo público que se comparte a varios usuarios (cada uno con su propia configuración, como los permisos, protección de contraseña y fecha de caducidad de la comunicación y colaboración

Configuración de la máquina virtualen VirtualBox 5.1

Instalación del servidor

  • Usuario y password: se recomienda un nombre de usuario y password fuerte. Obtenlo aquí.
  • Nombre de la máquina: se recomienda un fqdn (nombre de dominio). Puedes recurrir a https://www.noip.com/ (algunas opciones gratuitas) o https://dyn.com/dns/
  • Es necesario para solicitar el posterior certificado SSL, gratuito con https://letsencrypt.org/.
  • Configuramos una IP fija, que estará abierta en nuestro router a los puertos 80 y 443, (para http y https respectivamente). Los DNS 8.8.8.8 8.8.4.4 (servidores de Google, sin comas, sólo
    espacios. Ponemos servidores gratuitos que podemos encontrar en https://www.lifewire.com/free-and-public-dns-servers-2626062
  • Elparticionado : 1Gb de swap, 10Gb para “/”, y el resto a “/var/www/cloud_data/
  • En selección de programas seleccionamos únicamente OpenSSH Server.
  • Activamos actualizaciones automáticas.
  • Reiniciamos y actualizamos con :

sudo apt-get update && sudo apt-get –y dist-upgrade && sudo reboot

Configuración del servidor:

  • Ingresamos por ssh ( en linux o MacOS) : ssh user@fqdns
  • Nota: Para hosts hospedados en otros sitios (VPS), verificar locale y usuario sudo.
  • Seguimos las instrucciones del tuto https://www.pacorabadan.com/2017/08/ubuntu-16-04-home-server-virtualbox-headless/
  • Instalamos dependencias
sudo apt-get install apache2 mariadb-server libapache2-mod-php7.0 php7.0-gd php7.0-json php7.0-mysql php7.0-curl php7.0-mbstring php7.0-intl php7.0-mcrypt php-imagick php7.0-xml php7.0-zip unzip
  • Aseguramos MariaDB: introducimos la instrucción siguiente, y decimos a todo que si, incluyendo un password fuerte para el usuario root de MariaDB
mysql_secure_installation
  •  Creamos la base de datos (Nota: como el sitio va a dedicarse únicamente a Nextcloud, haremos que el root de MySQL coincida con el usuario de nextcloud)
mysql -u root -p

## When prompted, enter the MySQL root user password

CREATE DATABASE nextcloud;
GRANT ALL ON nextcloud.* to 'root'@'localhost'
IDENTIFIED BY 'PASSWORD';
##Donde PASSWORD es el pasword del usuario root de MySQL
FLUSH PRIVILEGES;
exit;

 

Configurar Apache

Creamos el archivo /etc/apache2/sites-available/nextcloud.conf :

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

y pegamos el siguiente contenido:

Alias /nextcloud "/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

</Directory>

creamos un enlace simbólico:

sudo ln -s /etc/apache2/sites-available/nextcloud.conf /etc/apache2/sites-enabled/nextcloud.conf

Activamos los módulos de apache que necesitamos

a2enmod rewrite
a2enmod headers
a2enmod env
a2enmod dir
a2enmod mime
a2enmod ssl
a2ensite default-ssl

reiniciamos apache

service apache2 restart

 

Instalando Nextcloud

Vamos al directrio /var/www y descargamos nextcloud (ir al sitio nextcloud.com para verificar la nueva version de nextcloud12), y damos permisos a apache

sudo su
cd /var/www
wget
https://download.nextcloud.com/server/releases/nextcloud-12.0.2.zip
unzip nextcloud-12.0.2.zip
rm nextcloud-12.0.2.zip
sudo chown -R www-data:www-data /var/www/cloud_data
sudo chown -R www-data:www-data /var/www/nextcloud

Iniciamos el instalador en el navegador, en la dirección http://ip_del_servidor/nextcloud/
NC setup

Lo primero entramos en Personal  y añadimos nuestra dirección de correo electrónico. Si entramos en administración podems ver algunos ajustes que nos quedan por hacer para mejorar la seguridad.
Avisos de seguridad NC

Instalamos el certificado SSL con lets encrypt:

Instalamos el cliente de python para letsencrypt

sudo apt install letsencrypt python-letsencrypt-apache

Creamos el certificado: sustitumos email y el dominio por el fqdn

sudo letsencrypt --apache --agree-tos --email your-email-address -d nextcloud.your-domain.com
Seleccionamos la opción Secure, para que todo el tráfico pase al https. Ahora, cuando vayas al sitio, serás recibido con la confirmación verde en la barra de URL confirmando que SSL está habilitado.
 Mientras estamos configurando Apache, vamos a editar los le-config y añadimos una línea al final del archivo después de la línea SSLCertificateKeyFile:
 
 nano /etc/apache2/sites-enabled/000-default-le-ssl.conf
<IfModule mod_headers.c>
     Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"
 </IfModule>

Instalamos APCu, Redis

y algunos módulos php adicionales:

sudo apt install php-apcu redis-server php-redis && sudo apt install php-zip php-dompdf php-xml php-mbstring php-gd php-curl

reiniciamos apache

service apache2 restart

 Configuramos Redis

sudo systemctl start redis-server
sudo systemctl enable redis-server
php --ri redis
sudo systemctl restart apache2
sudo phpenmod redis

Editamos

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

Y añadimos las siguientes lineas de código, antes de la línea );

'memcache.distributed' => '\OC\Memcache\Redis',

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

ubuntu-16.04-redis-cache-nextcloud

Editamos /etc/php/7.0/apache2/php.ini
con nano: /etc/php/7.0/apache2/php.ini
con webmin: modificamos la ruta del módulo... /php5/... por .../php/7.0/... y editamos ( es más difícil cometer errore)

Modificamos las líneas:

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

 

Conclusión:

Hemos pasado todas las directivas de seguridad de nextcloud y hemos reforzado el LAMP para aumentar la seguridad. Ya sólo nos queda descargar los clientes de nextcloud para nuestros equipos de escritorio y dispositivos.
nextcloudclientc

Gracias a: