Seleccione su idioma

En este post te explicamos cómo instalar notify_push, también conocido como backend de alto rendimiento de archivos, en un sistema Ubuntu Server 22.04.

¿Qué es Notify Push?

Notify Push, también conocido como backend de alto rendimiento de archivos, es un servicio que facilita la gestión de notificaciones web y de escritorio. Sin este servicio, los usuarios solamente reciben notificaciones sobre nuevos eventos (un nuevo archivo compartido, una llamada de Talk, una mención en un chat) cuando su navegador web o aplicación de escritorio realiza una consulta al servidor. Gracias a Notify Push, las notificaciones aparecen directamente en los dispositivos cuando el suceso ocurre. Esto tiene dos ventajas: los usuarios reciben la notificación con antelación y la frecuencia de consulta se puede aumentar, lo que disminuye el consumo de recursos del servidor. Cabe tener en cuenta que, en este punto, nos referimos al cliente de escritorio y navegador, ya que las notificaciones en los dispositivos móviles utilizan una pila de entrega diferente.

Para obtener más información, te recomendamos leer el archivo Readme en el repositorio de código de la aplicación.

Entorno del software

Las siguientes instrucciones de configuración se han probado en este entorno:

  • Dirección del servidor de Nextcloud: http://mycloud.com
  • IP del sistema Notify Push: 10.0.1.192 <No10.0.1.192tify Push system IP>
  • Versión del servidor de Nextcloud: 28.0.3
  • Versión de Notify Push: 0.6.9
  • Servidor web: Apache2: 2.4.52
  • Arquitectura de sistema: x86_64
  • Directorio de instalación de Nextcloud: /var/www/nextcloud/
  • Memoria caché (basada en Redis 6.0.16) y base de datos (basada en MariaDB 10.6.16) alojadas en el mismo sistema que el servidor web.

Configuración

Instalación de la aplicación

Instala la aplicación en el servidor de Nextcloud:

$ occ app:install notify_push

NOTA: este comando descargará los archivos binarios para todas las arquitecturas compatibles. En general, el hecho de dejar archivos binarios sin utilizar en el sistema resulta una mala práctica, así que es conveniente eliminar aquellos que no se ajusten a tu arquitectura. En función de cómo quieras implementar el servicio de Notify Push, es posible que desees eliminar por completo la carpeta bin. Sigue leyendo para conocer más detalles.

Posteriormente, da el siguiente valor a la variablebase_endpoint:

$ occ config:app:set notify_push base_endpoint --value https://mycloud.com/push

Servicio de systemd

Si tienes previsto ejecutar notify_push en un sistema dedicado, descarga los archivos binarios desde la release page y ponlo en una carpeta propia. Después, ejecútalos y pruébalos:

$ mkdir /opt/notify_push
$ cd /opt/notify_push
$ wget -O ./notify_push https://github.com/nextcloud/notify_push/releases/download/v0.6.9/notify_push-x86_64-unknown-linux-musl
$ chmod +x notify_push
$ ./notify_push --version
notify_push 0.6.9

Por otro lado, si tienes previsto ejecutar notify_push en la misma máquina en la que se aloja el servidor de Nextcloud, los archivos binarios se descargarán en /var/www/nextcloud/apps/notify_push/bin/. Recuerda que, en ese caso, debes adaptar el servicio de systemd.

Crea un archivo para almacenar las variables del entorno del servicio de systemd:

$ mkdir /etc/notify_push
$ vim /etc/notify_push/notify_push.env

PORT=7867
ALLOW_SELF_SIGNED=false
NEXTCLOUD_URL=http://mycloud.com
DATABASE_URL=<db_type>://<db_user>:<db_password>@<db_host>:<db_port>/<db_name>
DATABASE_PREFIX=oc_
REDIS_URL=redis://:<redis_pwd>@<redis_host>:<redis_port>

Ajusta los parámetros según sea necesario y, antes de continuar, comprueba que el sistema en el que estás ejecutando el servicio tiene conexión a todos los servicios mencionados anteriormente (Nextcloud, base de datos, Redis).

Cuando vayas a configurar la conexión, ten en cuenta lo siguiente:

  • La base de datos y Redis deben ser accesibles desde el sistema en el que estás instalando Notify Push. Este es un aspecto clave cuando los estás implementando desde el mismo sistema en el que se ejecutan pero, en caso contrario, es posible que necesites tener en cuenta las implicaciones de seguridad que conlleva.
  • Si protected-mode está habilitado en Redis, entonces debes introducir la contraseña que se especifica en la instrucción requirepass. No es necesario introducir un usuario, así que puedes especificar REDIS_URL como redis://:<redis_pwd>@<redis_host>:<redis_port>.
  • El usuario que se conecta a la base de datos solamente necesita los privilegios SELECT en la base de datos de Nextcloud.

NOTA: Solo se necesita el ALLOW_SELF_SIGNED=true si estás utilizando un certificado autofirmado TLS. Ten en cuenta que notify_push utiliza una base de datos interna de autoridades/certificados de confianza y una herramienta como Mkcert no funcionará.

Crea un servicio de systemd denominado notify_push:

$ vim /etc/systemd/system/notify_push.service
[Unit] Description = Push daemon for Nextcloud clients Documentation = https://github.com/nextcloud/notify_push [Service] EnvironmentFile = /etc/notify_push/notify_push.env ExecStart = /opt/notify_push/notify_push [Install] WantedBy = multi-user.target

Informa al sistema sobre el nuevo servicio de systemd y habilítalo:

$ systemctl daemon-reload
$ systemctl enable notify_push
$ systemctl start notify_push
$ systemctl status notify_push
● notify_push.service - Push daemon for Nextcloud clients
     Loaded: loaded (/etc/systemd/system/notify_push.service; enabled; vendor preset: enabled)
    Drop-In: /run/systemd/system/service.d
             └─zzz-lxc-service.conf
     Active: active (running) since Fri 2023-02-10 16:56:54 CET; 1h 6min ago
       Docs: https://github.com/nextcloud/notify_push
   Main PID: 897 (notify_push)
      Tasks: 2 (limit: 37737)
     Memory: 5.5M
        CPU: 1.346s
     CGroup: /system.slice/notify_push.service
             └─897 /opt/notify_push/notify_push

Servidor web

En el servidor de Nextcloud, habilita los módulos proxy correspondientes en Apache:

$ a2enmod proxy
$ a2enmod proxy_http
$ a2enmod proxy_wstunnel

Añade las siguientes líneas en el archivo virtual host de Apache, en el bloque VirtualHost. En una instalación estándar de Apache2 en Ubuntu, los archivos virtual host se encuentran en la carpeta /etc/apache2/sites-available y están conectados mediante un enlace simbólico a /etc/apache2/sites-enabled:

$ vim /etc/apache2/sites-enabled/nextcloud.conf
<VirtualHost>

[...]

ProxyPass /push/ws ws://10.0.1.192:7867/ws
ProxyPass /push/ http://10.0.1.192:7867/
ProxyPassReverse /push/ http://10.0.1.192:7867/

</VirtualHost>

Reinicia el servicio de Apache2:

$ systemctl restart apache2

Proxy de confianza

En el servidor de Nextcloud, añade la IP del servidor en el que el notify_push se ejecuta a la lista de proxys de confianza en config.php.

$ occ config:system:get trusted_proxies
$ occ config:system:set trusted_proxies <first-available-element-in-array> --value "10.0.1.192"

Configuración de la aplicación de escritorio

La configuración del servicio notify_push en el servidor permite que la aplicación de escritorio consulte las actualizaciones en el servidor con menor frecuencia. El parámetro que controla esta frecuencia esremotePollInterval y puede modificarse en el archivo de configuración de la aplicación de escritorio.

Consulta la siguiente documentación para obtener más información:

https://docs.nextcloud.com/desktop/latest/advancedusage.html?highlight=polling#configuration-file

Prueba

Ejecuta la herramienta de autodiagnóstico en el servidor de Nextcloud para comprobar que se ha configurado correctamente:

$ occ notify_push:self-test
✓ redis is configured ✓ push server is receiving redis messages ✓ push server can load mount info from database ✓ push server can connect to the Nextcloud server ✓ push server is a trusted proxy ✓ push server is running the same version as the app

Desde el equipo de un cliente, puedes comprobar que la configuración se ha realizado correctamente utilizando la herramienta test_client.

Tras ejecutar la herramienta, puedes propiciar algún suceso para que se envíe la notificación al usuario al que estás monitorizando. Así, deberías visualizar las entradas correspondientes a dichos sucesos anotadas en el log (Received notification notification):

$ ./test_client https://my-nextcloud.com <user> <password>
[2024-03-18 14:07:49.031457 +01:00] INFO [test_client] test_client/src/main.rs:62: Received file update notification notify_file
[2024-03-18 14:07:49.031495 +01:00] INFO [test_client] test_client/src/main.rs:66: Received notification notification
[2024-03-18 14:08:29.083257 +01:00] INFO [test_client] test_client/src/main.rs:62: Received file update notification notify_file_id [43777]
[2024-03-18 14:08:37.613480 +01:00] INFO [test_client] test_client/src/main.rs:66: Received notification notification
Si estás utilizando un certificado autofirmado, la herramienta test_client no funcionará (incluso si tu certificado es seguro a nivel local). Aparecerá el siguiente error:
Connection Failed: tls connection init failed: invalid peer certificate contents: invalid peer certificate: UnknownIssuer

Resolución de problemas

En esta sección del Readme del repositorio encontrarás información detallada sobre resolución de problemas.

Lectura complementaria

Artículo del portal de Nextcloud Customer sobre escalado con notify_push:

https://portal.nextcloud.com/article/Scalability/Scaling-of-Nextcloud-Files-Client-Push-(Notify-Push)

No dudes en ponerte en contacto con nuestro equipo para realizar cualquier consulta u observación relativa a este artículo. Estamos aquí para ayudarte con la implementación de servicios básicos y avanzados relacionados con la plataforma de Nextcloud.