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:

 

VirtualBox Server Ubuntu 16.04 :Virtualbox 5.1 headless + Phpvirtualbox 5.0

VirtualBox Server Ubuntu 16.04

Virtualbox headless + phpvirtualbox

Este post forma parte de la página Tutos Ubuntu 16.04 , y viene del anterior post, Asegurar Ubuntu 16.04 Home server y configuración básica..

Nota: Configuraremos un servidor básico para correr Virtualbox, y nunca accederemos a él desde Internet directamente, sino a través de una máquina virtual, para aumentar la seguridad del sistema. Por tanto, la configuración que proponemos es exclusivamente para un entorno doméstico al que de momento no accederemos directamente a través de Internet por el puerto 80.

Instalar virtualbox

Vamos a configurar /etc/apt/sources.list para incluir el repositorio de Oracle:

$ sudo nano /etc/apt/sources.list

Y añadimos la siguiente línea

deb http://download.virtualbox.org/virtualbox/debian xenial contrib

Después ejecutamos:

wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -

sudo apt-get update

sudo apt-get install linux-headers-$(uname -r) build-essential virtualbox-5.1 dkms

Instalamos el Oracle VM VirtualBox Extension Pack

cd /tmp
wget http://download.virtualbox.org/virtualbox/5.1.26/Oracle_VM_VirtualBox_Extension_Pack-5.1.26-117224.vbox-extpack
sudo VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-5.1.26-117224.vbox-extpack

Nota: cuando actulizéis Virtualbox es importante,

  • apagar todas las máquinas virtuales,
  • detener todos los servicios (desde la consola de webmin) que empiezan por vbox,
  • después ejecutar el apt-get -y distupgrade,
  • y después para actualizar el extension pack podéis usar el siguiente script:
#!/bin/bash
version=$(vboxmanage -v)
echo $version
var1=$(echo $version | cut -d 'r' -f 1)
echo $var1
var2=$(echo $version | cut -d 'r' -f 2)
echo $var2
file="Oracle_VM_VirtualBox_Extension_Pack-$var1-$var2.vbox-extpack"
echo $file
wget http://download.virtualbox.org/virtualbox/$var1/$file -O /tmp/$file
#sudo VBoxManage extpack uninstall "Oracle VM VirtualBox Extension Pack"
sudo VBoxManage extpack install /tmp/$file --replace

Para crearlo:

$ nano upvboxext.sh ## ( e copiais el código )

$ chmod +x upvboxext.sh ## para hacerlo ejecutable.

$ sudo ./upvboxext.sh

Añadir el usuario que utilizará virtualbox.

Como no vamos a entrar por Internet directamente configurar al usuario con permisos sudo (user1) para gestionar vuestras propias máquinas virtuales y darles acceso a todo los archivos. Para otras configuraciones, mirar el siguiente link.

Ejecutamos:

sudo adduser user1 vboxusers

sudo nano /etc/default/virtualbox

e introducimos las línea

VBOXWEB_USER=user1

Después:

systemctl enable vboxweb-service
systemctl start vboxweb-service

Instalación de Apache+PHP 7 con  requerimientos mínimos:

sudo apt-get -y install apache2 libapache2-mod-php7.0 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libapr1 php7.0-common php7.0-mysql php7.0-soap php-pear wget

Reiniciamos apache

sudo systemctl restart apache2.service

Instalar Phpvirtualbox

Vamos a instalar Phpvirtualbox como sitio por omisión de Apache, es decir, en el directorio /var/www/html .

Comprobamos que la última versión de Phpvirtualbox es la 5.0.5 y descargamos

cd /tmpwget https://kent.dl.sourceforge.net/project/phpvirtualbox/phpvirtualbox-5.0-5.zipunzip phpvirtualbox-5.0-5.zip
cd phpvirtualbox-5.0-5 sudo mv * /var/www/htmlsudo chown -R www-data:www-data /var/www/htmlcd /var/www/html/sudo cp config.php-example config.phpsudo nano config.php

Se abrirá el editor nano, y debemos introducir el usuario y el password del usuario de virtualbox:

[...]
/* Username / Password for system user that runs VirtualBox */
var $username = 'vbox';
var $password = 'secret';
[...]

Conviene un reinicio:

$ sudo reboot

Ya puedes abrir la página apuntando tu navegador a la dirección ip del servidor. http://192.168.1.X

El usuario es admin, y la password: admin. Entra el menú principal para cambiarlo.

Error de versión de phpvirtualbox.

Por si hace falta, para reiniciar vboxweb ( es un comando útil sobre todo cuando actualizamos) :

$ systemctl restart vboxweb-service

Se produce un error de versión de virtualbox 5.1, con phpvirtualbox 5.0. Para evitarlo, ya que no da ningún otro problema hay que editar el archivo endpoints/api.php (dentro de /var/www/html) y cambiar lo siguiente:

$ sudo nano /car/www/html/endpoints/api.php

// $response['data']['responseData']['phpvboxver'] = @constant('PHPVBOX_VER');
$response['data']['responseData']['phpvboxver'] = "5.1-0";

Reiniciamos los servicios:

sudo systemctl restart apache2.service

systemctl restart vboxweb-service

 

Seguimos próximamente con más posts.