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
- Asignamos 2Gb Ram y 2 procesadores. El disco duro será de 10 Gb (recomendable 20Gb) + Necesidades de almacenamiento, en mi caso 150Gb.
- Arhivo S.O.: http://releases.ubuntu.com/16.04/ubuntu-16.04.3-server-amd64.iso
- Versión VirtualBox: http://download.virtualbox.org/virtualbox/5.1.26/virtualbox-5.1_5.1.26-117224~Ubuntu~xenial_amd64.deb
- Extension Pack: http://download.virtualbox.org/virtualbox/5.1.26/Oracle_VM_VirtualBox_Extension_Pack-5.1.26-117224.vbox-extpack
- La configuración de la máquina: red en modo bridge, memoria gráfica 128 Mb,
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; |
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/> <IfModule mod_dav.c> SetEnv 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/
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.
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, ), |
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:
|
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.
Gracias a:
- TechRepublic.
- Vroom.
- LinuxBabe.
- bayton.org.