Instalación de Nextcloud

13 de Octubre, 2024 - Tiempo de lectura: 16 minutos

Nextcloud es todo un entorno de trabajo. Es algo más que una nube, pero sobre todo es el uso que se le suele dar. Al principio lo usaba como nube, con sincronización automática con mi PC, mi tablet y mi móvil. Poco a poco he ido usando más cosas, como el calendario y las notas. Se trata de tener tu propia nube, con la capacidad que quieras, en tu red local o en internet. Hay aplicaciones para PC, Android e iOS. Lo que es un poco complicado es instalar el servidor. Aquí dejo unas notas para instalar Nextcloud desde cero.

Para ello me he basado en los siguientes tutoriales y páginas web:

Probablemente se me olvida algún otro sitio.

Para elegir las versiones correctas, tanto de PHP como de Nextcloud echamos un vistazo a esta wiki. Aquí viene una matriz de compatibilidad. En el pasado me dió quebraderos de cabeza el instalar una versión de PHP no compatible.

Nextcloud Version Supported PHP Versions
30 8.1, 8.2, 8.3
29 8.0, 8.1, 8.2, 8.3
... ...
26 8.0, 8.1 , 8.2
... ...

Voy a instalar la versión 26, que ya soporta PHP 8.2, que es la versión de PHP que instalaremos. Aun así, instalar una posterior será tan simple como cambiar la versión a descargar y descomprimir... ¡pero eso será el último paso!

Vamos a empezar.

Componentes

Tedremos que tener:

  • Una Raspberry Pi. Yo lo he hecho con una 3b+. Con una 4 o incluso una 5 debería ser muy similar, pero con más potencia.
  • Una tarjeta micro SD. De 16GB debería ser suficiente.
  • Un disco duro externo USB. En una instalación previa reutilicé el de un portátil viejo y lo conecté con uno de esos adaptadores SATA-USB. Vale cualquiera.
  • Teclado y monitor. Solamente por si acaso la primera vez necesitamos conectarlos a la Raspberry.
  • Nuestro PC con el SO que queramos, con lo siguiente:
    • algún programa para acceder por SSH. Yo uso PuTTY.
    • Raspberry Pi Imager, para cargar la imagen del SO en la MicroSD.

Preparación Raspberry Pi

Usaremos el Raspberry Pi Imager. Antes de cargar la imagen del SO en la micro SD, se puede configurar usuario, contraseña y el acceso a Wifi. Te permite hacerlo una vez seleccionas el SO. Con mis manías, prefiero descargarme la última versión del SO de la página oficial de Raspberry Pi. Yo instalé la versión 12 (64bits). La Lite para estas aplicaciones es preferible, ya que no requerimos entorno gráfico y será más ligera.

La primera vez que insertamos la SD en la Raspeberry Pi y la encendemos, deberemos introducir el nombre y contraseña que indicamos en el Imager. Con raspi-config podemos terminar de configurar varias cosas:

  • En Interface Options -> Habilitar SSH, si no se hizo antes.
  • Se puede configurar el teclado.
  • En opciones avanzadas -> Expand Filesystem

Accedemos:

sudo raspi-cofig

Es recomendable poner una IP fija. Aquí se puede ver cómo, además de como configurar el Wifi: Raspberry para torpes

A partir de aquí podemos continuar en remoto por SSH, que suele más cómodo; Puedes hacerlo todo desde tu PC, consultando al mismo tiempo páginas web, haciendo "copy-paste"... Por cierto, para copiar algo y pegarlo en PuTTY, basta con hacer click derecho sobre la consola de PuTTY.

Podría hacer falta también configurar servidores DNS. Por si acaso:

sudo nano /etc/resolv.conf  

Se incluyen estos:

nameserver  208.67.222.222
nameserver 208.67.220.220

Se cierra nano (Ctrl+X) guardando.

Actualizamos todo.

sudo apt update
sudo apt upgrade

Preparación del disco duro

Ahora puedes conectar el disco duro, si no lo tenías ya conectado. En principio vamos a formatearlo, en formato ext4 (óptimo para uso con Linux). Si lo tienes ya con una partición ext4, puedes saltarte este paso.

Para averiguar la unidad que corresponde al disco duro: lsblk.

Vamos a gestionar las particiones:

sudo fdisk /dev/sda

Para verificar las particiones, comando 'p':

Command (m for help): p

Disk /dev/sda: xxx GB, xxx bytes

Usamos el comando 'd' para borar la partición existente. después otra vez 'p', para comprobar que desaparació.

Usaremos 'n' para crear una partición nueva, 'p' para partición primaria, Intro par "default to partition 1", Intro para elegir "first sector" e Intro de nuevo para "last sector". Esto usará el disco entero para la nueva partición creada. Eso no significa que Nextcloud vaya a usarlo. Más adelante se podrá elegir un directorio concreto.

Otra vez el comando 'p' para ver las partición creada. Algo así deberías ver:

Command (m for help): p

Device Boot      Start         End      Blocks   Id  System
/dev/sda1         2048   234441647   117219800   83  Linux

Los cambios aun requieren ser escritos en la lista de particiones, así que usamos comando 'w' para escribir y salir.

Ahora formatearemos la partición:

mkfs.ext4 /dev/sda1

Llevará un buen rato, dependiendo del tamaño del disco. Cuando termine crearemos la carpeta donde vamos a tener nuestros archivos:

mkdir /media/hdd

La montamos:

mount /dev/sda1 /media/hdd

Para que esto sea permanente editamos el fichero `/etc/fstab´

sudo nano /etc/fstab

Añadimos la siguiente línea:

/dev/sda1 /media/hdd ext4 defaults, noatime 0 1

Reinicinamos:

sudo reboot

Instalamos Apache

Instalamos apache2:

sudo apt-get install apache2

Puedes comprobar que está instalado, poniendo en un navegador la dirección IP de la raspberry o el nombre de host de la raspberry: http://192.168.xx.yy

Instalamos PHP

Con el siguiente comando:

sudo apt install -y php8.2-common php8.2-fpm php8.2-cli php8.2-curl php8.2-intl php8.2-mysql php8.2-gd php8.2-sqlite3 php8.2-mbstring php8.2-zip php8.2-readline php-pear imagemagick php-imagick

Para Apache, además necesitamos:

sudo apt install php libapache2-mod-php php-mysql

Podemos chequear con php -v, debería aparece la versión 8.2...

Para comprobar la instalación: php -i.

Para poder probar, conviene modificar la configuración de Apache ya que, por defecto, si encuentra un archivo ‘index.html’, lo priorizará sobre un ‘index.php’. Querremos que el comportamiento sea el contrario, por eso lo vamos a modificar. Para hacer esto, hacemos:

sudo nano /etc/apache2/mods-enabled/dir.conf

En el fichero encotraremos algo como esto:

<IfModule mod_dir.c>
    DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
</IfModule>

Lo modificamos moviendo ‘index.php’ a la izquierda,

<IfModule mod_dir.c>
    DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>

Para ver que PHP está funcionando correctamente, vamos a crear un archivo simple:

sudo nano /var/www/html/info.php

Incluimos lo siguiente:

<?php
phpinfo();
?>

Cerramos guardando.

Reiniciamos Apache:

sudo systemctl restart apache2

y vemos el resultado del archivo que creamos en el navegador, en la direción http://192.168.xx.xx/info.php

Si vemos algo así, está hecho:

Info apache

Instalamos Maria-DB y configuramos una base de datos

En este paso instalamos mariaDB.

Escribimos:

sudo apt install mariadb-server

A continuación:

sudo mysql --user=root mysql

Cambiará el aspecto de la consola, al interfaz de gestión de bases de datos. Vamos a crear la base de datos que Nextcloud utilizará, con un usuario nuevo.

Primero creamos el usuario:

create user 'USUARIO'@'localhost' identified by 'CONTRASEÑA';

Cambia lo que está en mayúsculas por tu nombre de usuario, y la contraseña que consideres. Después creamos la base de datos, con el nombre que quieras, por ejemplo:

create database nextclouddb;

Y le concedemos derechos de uso al usuario que acabamos de crear con:

grant all privileges on nextclouddb.* to 'USUARIO'@'localhost' with grant option;

Por último, recargamos los privilegios de MariaDB con flush privileges y salimos con exit.

Para hacer mejoras en la seguiridad de la base de datos:

sudo mysql_secure_installation

Puedes dejar en blanco la contraseña de root. Es buena idea eliminar usuarios anónimos, deshabilitar el acceso de root remoto y eliminar la BBDD de prueba:

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Por fin instalamos Nextcloud

Vamos al directorio que usa Apache por defecto para las páginas web:

cd /var/www/html

Vemos lo que hay con ´ls´:

ls

Es buena idea borrar lo que haya, por ejemplo en mi caso había dos ficheros:

sudo rm ./index.html

sudo rm ./info.php

Descargamos la versión que consideremos, en este ejemplo la versión 26.0.13:

sudo wget https://download.nextcloud.com/server/releases/nextcloud-26.0.13.zip

Bastaría con cambiar la versión. Se puede ir a https://download.nextcloud.com/server/releases y ver todas las que hay.

Descomprimimos en la misma carpeta en la que estamos:

sudo unzip nextcloud-26.0.13.zip

Cambiamos los permisos del directorio y todo su contenido, usando la siguiente orden:

sudo chown -R www-data:www-data nextcloud

Para que nextcloud pueda usar el disco duro, hacemos lo mismo con el directorio que vamos a utilizar para almacenar los archivos:

sudo chown -R www-data:www-data /media/hdd

Ya estaría. Ya podemos ir a la página de inicio: http://192.168.xx.yy/Nextcloud

Deberemos introducir el nombre del primer usuario (y administrador) y la contraseña que vamos a utilizar.

Después rellenamos los datos de la base de datos que configuramos previamente.

Puede que cuando termine de un error. Volvemos a cargar la página y ya accedemos a Nextcloud.

A partir de ahora, se trata de ir viendo los diferentes menús. Aunque ya es perfectamente funcional, hay algunos mensajes de error y cosas que mejorar. Aquí puede ver lo más importante: https://polkillas.net/blog/blog/2020/07/24/nextcloud-19-la-raspberry-pi-afinando-nextcloud/