Nextcloud es una plataforma escrita en PHP que permite tener nuestro propio espacio para compartir archivos y carpetas al estilo de Google Drive o Dropbox.

El detalle es que para poder usar Nextcloud se necesitan los siguientes componentes:

  • Sistema Operativo: Ubuntu 20.04 LTS «Ya Configurado»
  • Servidor web: Apache o Nginx
  • Módulo PHP: El correspondiente al servidor web elegido
  • Librerías: Necesarias para el funcionamiento de PHP
  • Base de datos: MariaDB o PostgreSQL
  • Nextcloud: Obviamente!

Así que toca ir instalando y configurando cada uno de los componentes, lo que no se realiza en 5 mins y aunque existen varias alternativas como el uso de contenedores, imágenes tipo LAMP (Linux, Apache, MariaDB, PHP) hoy existe una opción más conocida como Paquetes Snap, que permite empaquetar toda una aplicación y sus dependencias en un sólo paquete de instalación.

Hablando del paquete snap para Nextcloud, éste incluye Apache, PHP, MySQL y Nextcloud y listo para ser usado con algunos pocos pasos de configuración si uno va a crear una configuración nueva, pero cuando uno trae ya una instalación de Nextcloud tradicional (o sea, no snap) parece que hay que realizar más de unos cuantos pasos o eso es lo que pretendo descubrir y registrar en este post!

Antes de continuar estoy asumiendo que ya se cuenta con un servidor con Ubuntu Server 20.04 ya configurado y con acceso al usuario root o con un usuario con permisos para ejecutar tareas administrativas por medio del comando sudo.

Entonces lo primero es instalar Nextcloud usando el comando:

$ sudo snap install nextcloud

y después de uno momentos que toma para descargar e instalar ya estará instalado nextcloud en su última versión estable disponible (en mi caso 22.1.1snap2).

Para obtener más información del paquete nextcloud instalado se puede usar el comando:

$ sudo snap info nextcloud

Después es necesario agregar el usuario administrador de Nextcloud, esto se hace con el comando:

$ sudo snap nextcloud.manual-install usuario password

Con este usuario ya se podrá entrar desde el navegador web, pero antes de ello hay que configurar el dominio asignado (esto también es un requisito, contar con la dirección IP de nuestro servidor y un dominio asociado), así que parece decirle a Nextcloud que responda peticiones para nuestro dominio hay que agregarlo a la lista de dominios válidos con el comando:

$ sudo nextcloud.occ config:system:set trusted_domains 1 –value=mi-dominio.com

Para validar que el domonio se agregó se puede ejecutar el comando:

$ sudo nextcloud.occ config:system:get trusted_domains
localhost
mi-dominio.com

Como parte de tener un servidor Ubuntu configurado también se debe tener un firewall activo por lo es necesario agregar reglas para permitir el acceso a los puertos 80 y 443 por tcp, lo que se puede hacer con el comando:

$ sudo ufw allow 80,443/tcp

También es importante configurar un certificado de seguridad para usarlo con el protocolo HTTPS y está la opción de generar uno usando Let’s Encrypt, sin embargo como ahorita estoy usando un dominio de prueba voy a usar la opción de crear un certificado auto firmado lo que se hace con el comando:

$ sudo nextcloud.enable-https self-signed

Y con esto ya es posible abrir el dominio en el navegador usando la dirección https://mi-dominio.com, sin embargo como se ha creado un certificado auto firmado los navegadores van a marcarlo como sitio no seguro, así que para poder abrir el sitio se puede usar el navegador Firefox y agregar un excepción y entonces ya debería abrir el Nextcloud:

Nextcloud — documentación de MaadiX Docs -

Y además se podría usar el usuario y password configurados anteriormente y ya se puede entrar a continuar configurando Nextcloud desde el navegador o incluso compartir archivos desde la cuenta del usuario administrador.

Hasta aquí todo bien, pero y que pasa con restaurar los datos del antiguo Nextcloud!

Lo primero es entender un poco más los paquetes snap, que según su documentación es una especie de caja aislada que tiene acceso al mundo exterior por medio de hacer algunas conexiones con «plugs» y que define varios tipos de almacenamiento, por ejemplo todo los archivos del paquete en sí se almacenan en la carpeta /snap/nextcloud/current/, esta carpeta es de sólo lectura y nada de lo que está ahí se puede modificar.

Pero entonces cual es la ruta done Nextcloud va a escribir toda la data, según la documentación están configuradas dos carpetas:

  • /var/snap/nextcloud/common/nextcloud/
  • /var/snap/nextcloud/current

Ahora todos los archivos de configuración o necesarios para Nextcloud y que cambian de versión a versión van en la segunda carpeta o current.

Los archivos de datos por ejemplo van en la carpeta common y que son comunes a todas las versiones.

Así que entonces para restaurar los datos de la versión anterior he realizado lo siguiente:

  1. Las carpeta data y themes se copian a la carpeta common/nextcloud
  2. Las carpetas apps/ y config/ van a la carpeta current
  3. Se restaura la base de datos con el comando nextcloud.mysql-client nextcloud < nextcloud.sql
  4. Entonces se ejecuta el comando nextcloud.occ upgrade pero des afortunadamente marca varios errores relacionados con que algunas apps no podían ser actualizadas. En la documentación menciona que todas las apps de terceros hay que desactivarlas y luego volver a activarlas tras la actualización, pero es algo que no puedo hacer en mi actual servidor en producción.

Entonces parece que este camino no terminará bien, así que he decidido eliminar toda la instalación y hacer una nueva instalación de Nextcloud, pero ahora con la misma versión que está en producción, para no tener que hacer una actualización, entonces la instalación ahora es así:

  1. Para instalar la última versión estable de Nextcloud 20: snap install nextcloud –channel=20/stable
  2. Se instala nextcloud de forma manual con nextcloud.manual-install user pass
  3. Para restaurar la base de datos: nextcloud.mysql-client nextcloud < nextcloud.sql
  4. Se copian las carpetas data/ y themes/ a la carpeta common/nextcloud/
  5. Se copian las carpetas apps/ y config/ a la carpeta current/
  6. Se fusiona el contenido del archivo config.php del anterior y la nueva instalación, tomando en cuenta las nuevas carpetas definidas por el snap.
  7. Se instala el certificado de seguridad autofirmado: nextcloud.enable-https self-signed

Aún así Nextcloud marca uno errores con una actualización de unas apps, lo que sucede es que no logré instalar exactamente la misma versión 20 que tengo actualmente, así que Nextcloud quiere hacer necesariamente una actualización y el problema lo marca porque no puede acceder a unos archivos, buscando encontré que se debe a lo siguiente.

En la instalación que tengo en mi servidor Ubuntu, tengo una partición exclusiva para los datos de Nextcloud, así que pensaba instalar todo en esa partición, pero con Snap se han elegido carpetas distintas a las planeadas, así que he movido carpetas a esta partición y he creado links simbólicos, pero como Snap son paquete autocontenidos y restringidos (por seguridad) entonces no tiene acceso a los archivos de otra partición por lo que hay que activar el permiso en el snap de nextcloud para que tenga acceso a los archivo en la carpeta /mnt con el comando: snap connect nextcloud:removable-media.

Después hay que hacer un mini upgrade con: nextcloud.occ upgrade

Y finalmente apagar el modo mantenimiento con: nextcloud.occ maintenance:mode --off

Y listo a disfrutar Nextcloud

Conclusiones

Después de revisar todo el proceso de instalación de Nextcloud usando Snap considero que para un uso de una instalación nueva o un proyecto personal o no tan grande puede ser una buena opción, además de que ya no fué una instalación de 5 mins y para hacer cualquier cambio hay que conocer como funcionan los paquetes Snap.

Además también está el tema de que todo está integrado y para un proyecto más grande el servidor de base de datos deberá de estar en otro servidor y aunque es posible modificar el paquete Sanp considero que será mejor realizar una instalación sin el uso de Snap.

Eso es todo, espero le sea de ayuda a alguien más esta pequeña experiencia y que los buenos tutoriales los acompañen!