Nextcloud

De La Wiki de KiVi

Nextcloud se puede resumir a como una alternativa a otros servicios de almacenamiento y edición en la nube, como puede ser Google Drive, OneDrive, Dropbox… Pero su principal característica es que es gratuito y de código abierto y puedes descargarlo e instalarlo en tu propio servidor, así acceder a tu propio «disco» desde cualquier punto del mundo con solo el navegador o la aplicación de sincronización de escritorio o teléfono y muchas opciones más.

Nextcloud es una bifurcación de OwnCloud, es decir, parte del grupo de programadores que quisieron hacer su propia versión del servicio pero con más añadidos.

Instalación desde los repositorios de Fedora

Siguiendo la instalación de servicios en Fedora, podemos instalar el programa desde repositorios oficiales.

sudo dnf install nextcloud

Esto ya genera los directorios de servicio en /usr/share y los de configuración en /etc, por ejemplo, el fichero de configuración de Apache.

El siguiente paso es crear la base de dato, primero accedemos a mysql:

mysql -u root -p 

y creamos la base de datos como en la entrada anterior:

CREATE DATABASE IF NOT EXISTS nextcloud;

Y, si no queremos crear otro usuario, podemos aprovechar el mismo que la entrada anterior:

GRANT ALL PRIVILEGES ON nextcloud.* TO 'admin'@'localhost' IDENTIFIED BY 'F3d0r4-01';
FLUSH PRIVILEGES;

Ahora que ya tenemos la base de datos, vamos a realizar la instalación de nextcloud, en este caso, este, tiene un instalador por PHP que nos va de perlas y que utilizáramos para la mayoría de las operaciones:

cd /usr/share/nextcloud
sudo -u apache php occ maintenance:install --data-dir /var/lib/nextcloud/data/ --database "mysql" --database-name "nextcloud" --database-user "admin" --database-pass "F3d0r4-01" --admin-user "admin" --admin-pass "F3d0r4-01"

ln -s /etc/httpd/conf.d/nextcloud-access.conf.avail /etc/httpd/conf.d/z-nextcloud-access.conf

Con esto haremos le indicamos el directorio donde se ubicaran los datos, el tipo de servidor de base de datos, el nombre de la base de datos que hemos indicado anteriormente, junto con el usuario y contraseña y, por último, el usuario y contraseña de administración del sitio que, por defecto, pongo el mismo que la base de datos para hacerlo más fácil.

También tenemos que permitir que el sitio sea accesible desde fuera del equipo local editando :

sudo nano /etc/httpd/conf.d/nextcloud-auth-local.inc

Y toca cambiar el «Require» para permitir todo el acceso que no sea local:

Cerramos el editor guardando los cambios y reiniciamos el servicio:

sudo systemctl restart httpd

De hecho ya podemos hacer la prueba accediendo al navegador:

https://192.168.1.241/nextcloud

Hecho esto ya podemos acceder a la interficie web, pero queda añadir otro apunte en seguridad y es el dominio de confianza, ya que, por seguridad, limita el acceso a redes desconocidas. Sin salir del directorio de instalación escribimos:

Nextcloud se puede resumir a como una alternativa a otros servicios de almacenamiento y edición en la nube, como puede ser Google Drive, OneDrive, Dropbox… Pero su principal característica es que es gratuito y de código abierto y puedes descargarlo e instalarlo en tu propio servidor, así acceder a tu propio «disco» desde cualquier punto del mundo con solo el navegador o la aplicación de sincronización de escritorio o teléfono y muchas opciones más.

Nextcloud es una bifurcación de OwnCloud, es decir, parte del grupo de programadores que quisieron hacer su propia versión del servicio pero con más añadidos.

Siguiendo la instalación de servicios en Fedora, podemos instalar el programa desde repositorios oficiales.

sudo dnf install nextcloud

Esto ya genera los directorios de servicio en /usr/share y los de configuración en /etc, por ejemplo, el fichero de configuración de Apache.

El siguiente paso es crear la base de dato, primero accedemos a mysql:

mysql -u root -p 

y creamos la base de datos como en la entrada anterior:

CREATE DATABASE IF NOT EXISTS nextcloud;

Y, si no queremos crear otro usuario, podemos aprovechar el mismo que la entrada anterior:

GRANT ALL PRIVILEGES ON nextcloud.* TO 'admin'@'localhost' IDENTIFIED BY 'F3d0r4-01';
FLUSH PRIVILEGES;

Ahora que ya tenemos la base de datos, vamos a realizar la instalación de nextcloud, en este caso, este, tiene un instalador por PHP que nos va de perlas y que utilizáramos para la mayoría de las operaciones:

cd /usr/share/nextcloud
sudo -u apache php occ maintenance:install --data-dir /var/lib/nextcloud/data/ --database "mysql" --database-name "nextcloud" --database-user "admin" --database-pass "F3d0r4-01" --admin-user "admin" --admin-pass "F3d0r4-01"

ln -s /etc/httpd/conf.d/nextcloud-access.conf.avail /etc/httpd/conf.d/z-nextcloud-access.conf

Con esto haremos le indicamos el directorio donde se ubicaran los datos, el tipo de servidor de base de datos, el nombre de la base de datos que hemos indicado anteriormente, junto con el usuario y contraseña y, por último, el usuario y contraseña de administración del sitio que, por defecto, pongo el mismo que la base de datos para hacerlo más fácil.

También tenemos que permitir que el sitio sea accesible desde fuera del equipo local editando :

sudo nano /etc/httpd/conf.d/nextcloud-auth-local.inc

Y toca cambiar el «Require» para permitir todo el acceso que Nextcloudno sea local:

Cerramos el editor guardando los cambios y reiniciamos el servicio:

sudo systemctl restart httpd

De hecho ya podemos hacer la prueba accediendo al navegador:

https://192.168.1.241/nextcloud

Hecho esto ya podemos acceder a la interficie web, pero queda añadir otro apunte en seguridad y es el dominio de confianza, ya que, por seguridad, limita el acceso a redes desconocidas. Sin salir del directorio de instalación escribimos:

sudo -u apache php occ config:system:get trusted_domains

Así vemos la lista de dominios de confianza, para añadir nuevos, añadir POR ORDEN, la IP o el nombre de acceso:

sudo -u apache php occ config:system:set trusted_domains 1 --value="192.168.1.241"

Resumen de directorios en el servidor:

  • /usr/share/nextcloud – directorio de instalación
  • /etc/nextcloud – directorio donde se ubica la configuración
  • /etc/httpd/conf.d/ – directorio del servidor apache donde se ubican las configuraciones del servidor web
  • /var/lib/nextcloud/data – directorio donde se ubicará el contenido de los usuarios

Video explicativo

sudo -u apache php occ config:system:get trusted_domains

Así vemos la lista de dominios de confianza, para añadir nuevos, añadir POR ORDEN, la IP o el nombre de acceso:

sudo -u apache php occ config:system:set trusted_domains 1 --value="192.168.1.241"

Resumen de directorios en el servidor:

  • /usr/share/nextcloud – directorio de instalación
  • /etc/nextcloud – directorio donde se ubica la configuración
  • /etc/httpd/conf.d/ – directorio del servidor apache donde se ubican las configuraciones del servidor web
  • /var/lib/nextcloud/data – directorio donde se ubicará el conteNextcloudnido de los usuarios

Video explicativo

Instalación manual oficial

Varias razones nos pueden llevar a esta decisión: puede que no os agrade la instalación de repositorios, queremos tener una instalación actualizada, hay un problema con los repositorios o incompatibilidad o simplemente, hemos cambiado de distribución o hacemos una instalación limpia.

Obviamente, la instalación es un poco más costosa, pero intentaremos resumirla y hacerla lo más sencilla posible.

En este caso la configuración será similar a la de repositorio, vamos a tener un directorio ( /var/www/nextcloud ) y una configuración apache ( https://192.168.100.241/nextcloud ) y aquí se alojará nuestro disco en la nube.

IMPORTANTE – antes de hacer la instalación, para evitar conflictos, si ya hicimos la instalación por repositorio, tenemos que desinstalarla.

sudo dnf remove nextcloud

Por seguridad, el mismo sistema guarda los ficheros de configuración cambiando la extensión y, al no borrar la base de datos, conservaremos los usuarios, contraseñas, grupos….

Ahora, hagamos la instalación, primero preparamos las dependencias (en el caso de ser una instalación nueva, también instalamos el servicio web y base de datos):

sudo dnf install @"Web Server" mariadb-server php-mysqlnd phpunit composer php-opcache php-pecl-imagick

Recordemos la instalación del servidor LAMP para configurar Apache y MariaDB. Y la creación de la base de datos en la siguiente entrada.

Descarga y extrae Nextcloud en el directorio /var/www:

cd /var/www
sudo wget https://download.nextcloud.com/server/releases/latest.tar.bz2
sudo tar -xvjf latest.tar.bz2

Creamos el directorio para los datos:

mkdir -p /var/www/nextcloud/data

Si tenemos activado el SELinux ( ya lo explicaré), debemos darle contexto al directorio y sus archivos:

semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/data(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/config(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/apps(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/data(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/.htaccess'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/.user.ini'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/3rdparty/aws/aws-sdk-php/src/data/logs(/.*)?'

restorecon -Rv '/var/www/nextcloud/'

Y, por seguridad, damos los permisos al directorio:

sudo chown -R apache:apache /var/www/nextcloud
sudo chmod -R 770 /var/www/nextcloud

Seguimos con la configuración del archivo de host de Apache:

sudo nano /etc/httpd/conf.d/nextcloud.conf

Con el siguiente contenido:

Alias /nextcloud "/var/www/nextcloud/"
<Directory /var/www/nextcloud/>
  Options +FollowSymlinks
  AllowOverride All
  Require all granted
  <IfModule mod_dav.c>
    Dav off
  </IfModule>
  SetEnv HOME /var/www/nextcloud
  SetEnv HTTP_HOME /var/www/nextcloud
</Directory>
# Encabezados de seguridad para evitar ataques de inyección de contenido (XSS).
<IfModule mod_headers.c>
  Header set X-Content-Type-Options "nosniff"
  Header set X-Frame-Options "SAMEORIGIN"
  Header set X-XSS-Protection "1; mode=block"
  Header set X-Robots-Tag "none"
  Header set X-Download-Options "noopen"
  Header set X-Permitted-Cross-Domain-Policies "none"
  Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"
</IfModule>

#Logs
ErrorLog "/var/log/httpd/nextcloud_error.log"
CustomLog "/var/log/httpd/nextcloud_access.log" combined

# Configuración de redireccionamiento 
Redirect 301 /.well-known/carddav https://192.168.100.241/nextcloud/remote.php/dav
Redirect 301 /.well-known/caldav https://192.168.100.241/nextcloud/remote.php/dav
Redirect 301 /.well-known/webfinger https://192.168.100.241/nextcloud/index.php/.well-known/webfinger
Redirect 301 /.well-known/nodeinfo https://192.168.100.241/nextcloud/index.php/.well-known/nodeinfo

Añado las últimas líneas de redireccionamiento de prevención a los servicios «DAV» de calendario o contactos.

Reiniciamos apache para que los cambios tengan efecto:

sudo systemctl restart httpd

Y accedemos a la página que reside nextcloud:

https://192.168.100.241/nextcloud

Y procedemos con la instalación.


Completando la instalación de Nextcloud

En la entrada anterior instalamos Nextcloud fácilmente desde los repositorios de Fedora, peró el proceso está lejos de acabar, antes, quedan varios procesos.

Límite de memoria en PHP

Este proceso es necesario en otros servicios para poder gestionar procesos por PHP, como por ejemplo, subir ficheros. Para ello, debemos editar el fichero:

sudo nano /etc/php.ini

Y debemos buscar la línea:

memory_limit = 128M

Por defecto viene a un valor de 128 Megas, mínimo, debemos cambiarlo a 512M:

memory_limit = 512M

Hecho esto, cerramos el editor y reiniciamos el servicio apache:

sudo systemctl restart httpd

PHP configuration option output_buffering must be disabled

Para comprobar la salud de nuestro servicio, podemos acceder al Administrador de configuraciones y veremos qué nos puede faltar o fallar, por ejemplo, el output_buffering de la configuración de php, debe estar deshabilitado. Este mensaje es un bug que genera esta advertencia y será reparado por los desarrolladores.

Mientras podemos crear el fichero:

sudo nano /usr/share/nextcloud/.user.ini

Con la linia:

output_buffering=0

Cacheando la memoria

Otra de las advertencias que nos podemos encontrar es el «memory_caching» que influye en el rendimiento del servicio. Por defecto, no viene configurado y hay que configurarlo.

Hay tres maneras de cachear la memoria como se muestra en la página de soporte oficial, pero he optado por la más sencilla. Para ello instalaremos:

sudo dnf install php-pecl-apcu

Editamos el fichero de configuración de Nextcloud

sudo nano /etc/nextcloud/config.php

y añadimos a la penúltima línea:

'memcache.local' => '\OC\Memcache\APCu',

Ahora tenemos que editar el fichero:

sudo nano /etc/php.d/40-apcu.ini

Y dejamos el valor:

apc.enable_cli=1

Cerramos y reiniciamos los servicios:

sudo systemctl restart httpd php-fpm

Instalar los módulos php gmp i bcmath

No son obligatorios, pero si recomendables estar estos dos módulos, los instalamos con:

sudo dnf install php-gmp php-bcmath

Y reiniciamos el servicio:

sudo systemctl restart httpd

Región del teléfono

Otro parámetro que no es obligatorio es la región del teléfono por defecto, para configurarlo editamos:

sudo nano /etc/nextcloud/config.php

Y en la penúltima línea añadimos:

'default_phone_region' => 'ES',

Configurando el correo electrónico

Otro de los ajustes básicos es el envío de correos electrónicos, en mi caso utilizo una contraseña maestra de gmail y los parámetros quedan:

Es importante «Enviar mensaje» una vez hechas las configuraciones para acabar el proceso.

Instalando aplicaciones por consola

Podemos instalar aplicaciones por administrador del navegador, pero es mucho más rápido administrar por consola con occ. Unos ejemplos:

cd /usr/share/nextcloud

sudo -u apache php occ app:install bookmarks #Instala el gestor de marcadores
sudo -u apache php occ app:install passwords #Instala el gestor de contraseñas
sudo -u apache php occ app:install tasks #instala un gestor de tareas que se adapta a calendar 
sudo -u apache php occ app:install notes #un gestor de notas básico
sudo -u apache php occ app:install deck  #Un gestor de tareas avanzado
sudo -u apache php occ app:install groupfolders  #Permite la gestión de grupos a las carpetas
sudo -u apache php occ app:install richdocumentscode #Instala un editor de documentos integrado CODE
sudo -u apache php occ app:install richdocuments  #Necesario con el complemento anterior.
sudo -u apache php occ app:install forms   #Instala un generador de formularios que guarda los datos en una hoja
sudo -u apache php occ app:install mail      #Cliente de correo electrónico web
sudo -u apache php occ app:install calendar  #Un gestor de calendario comparable a Google Calendar
sudo -u apache php occ app:install contacts  #Un gestor de contactos que se integra a el resto de complementos
sudo -u apache php occ app:install text           #Un editor de texto básico
sudo -u apache php occ app:install spreed           #Un cliente de chat entre los contactos que permite llamadas y conferencias por video.
sudo -u apache php occ app:install recognize #Permite reconoce en tus fotos a animales, caras...

Reparar los ficheros por consola

Puede darse el caso que falte un fichero o que no permita borrarlos, eso se debe a un error en la base de datos, se puede reparar fácilmente con:

sudo -u apache php occ files:scan --all

Gestión de usuarios y grupos

Lista de usuarios

sudo -u apache php ./occ user:list

Lista los grupos y sus usuarios

sudo -u www-data php occ group:list

Crea un usuario

sudo -u apache php occ user:add --display-name="Usuario1" --group="users" --group="Grupo1" usuario1

Borra un usuario

sudo -u apache php ./occ user:delete usuario1

Consulta la configuración del usuario

sudo -u apache php ./occ user:setting usuario2

Configura el usuario, asigna un correo electrónico:

sudo -u apache php ./occ user:setting usuario2 settings email "usuario2@mainkivi.info"

Asigna una quota de disco al usuario

sudo -u apache php ./occ user:setting usuario2 files quota 10GB

Resetea la contraseña del usuario

sudo -u apache php occ user:resetpassword usuario2

Estas y más instrucciones en: https://docs.nextcloud.com/server/stable/admin_manual/configuration_server/occ_command.html

Para complementar la entrada, adjunto un video: