Categorías
20.04 Docker HowTos

Instalar Collabora Online sobre Docker para integrar con Nexcloud

Collabora Online es un paquete de oficina en línea de código abierto desarrollado por Collabora Productivity, una división de Collabora. Está basada en el núcleo de LibreOffice, y permite la edición colaborativa de documentos de texto, hojas de cálculo y presentaciones.

(Extraído de Wikipedia)

Observaciones:

Asumo que se dispone de una instancia de nextcloud corriendo y actualizada basada en este tutorial.

El docker está solo disponible para x86-64, así que no hay nada de amor para ARM64 :-(.

Procedimiento para desplegar Collabora Online sobre Docker:

El primer paso es actualizar la biblioteca de software disponible y descargar docker y docker-compose.

sudo apt update && sudo apt install docker.io docker-compose -y

Asumo que tenes instaladas las utilidades básicas para linux que documenté acá (voy actualizando este post en el tiempo).

A continuación iniciamos el servicio de docker y configuramos para que inicie el mismo con el sistema.

sudo systemctl daemon-reload
sudo systemctl enable docker.service
sudo systemctl start docker.service
sudo systemctl status docker.service
Captura de pantalla de verificación del servicio de Docker corriendo.
Captura de pantalla de verificación del servicio de Docker corriendo.

Ahora creo un directorio /opt/docker/collabora, donde copio el docker-compose.yaml que generé.

sudo mkdir -p /opt/docker/collabora
cd /opt/docker/collabora
sudo wget https://raw.githubusercontent.com/fsismo/docker-compose/main/collabora/docker-compose.yml

Hay que adecuar el archivo yaml para que el mismo refleje la configuración de nuestro entorno (en rojo usuario y contraseña, en verde la url de nuestro servidor nextcloud).

version: '3.7'
 services:
   collabora:
     image: collabora/code:6.4.6.7
     container_name: collabora
     ports:
       - 9980:9980/tcp
     environment:
       - domain=nextcloud.sismonda.com.ar
       - username=admin
       - password=S3cr3t0
       - dictionaries=es_AR es_ES en_GB en_US
       - TZ=America/Argentina/Buenos_Aires
     restart: unless-stopped

Para iniciar el servicio tenemos que ejecutar:

cd /opt/docker/collabora
sudo docker-compose up -d

Podemos ingresar a una url para verificar que el docker inicio correctamente accediendo a la url (va a dar un error de certificado porque es un autogenerado):

https://10.0.0.11:9980/loleaflet/dist/admin/admin.html

Collabora Admin Console Dashboard.
Collabora Admin Console Dashboard.

El usuario y contraseña que solicita es el definido en el docker-compose.yml (en rojo).

Bajamos el docker en forma previa a configurarlo como servicio.

cd /opt/docker/collabora
sudo docker-compose down

Ahora vamos proceder a configurar el docker para que inicie en forma automática cuando prendemos el equipo. Esto lo hacemos creando el archivo /etc/systemd/system/docker-collabora.service

sudo vi /etc/systemd/system/docker-collabora.service

Con el contenido:

[Unit]
Description=Docker Collabora Online
Requires=docker.service
After=docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/opt/docker/collabora/
ExecStart=/usr/bin/docker-compose up -d
ExecStop=/usr/bin/docker-compose down
TimeoutStartSec=0
[Install]
WantedBy=multi-user.target

Le damos permisos de ejecución:

sudo chmod 640 /etc/systemd/system/docker-collabora.service

Como punto final vamos a recargar la configuración de systemd para que incorpore el archivo, configurar el servicio para que se inicie con el sistema.

sudo systemctl daemon-reload
sudo systemctl enable docker-collabora.service

Ahora podemos iniciar o parar este set de dockers ejecutando los comando:

sudo systemctl start docker-collabora.service
sudo systemctl stop docker-collabora.service

Configuración de apache.

Ahora tenemos que configurar el apache donde funciona nuestro servidor de nextcloud para redireccione las peticiones de collabora al puerto donde se ejecuta collabora.

Tenemos que hacer es habilitar los siguientes módulos de proxy de apache.

sudo a2enmod proxy
sudo a2enmod proxy_wstunnel
sudo a2enmod proxy_http
sudo systemctl restart apache2

Y creamos el archivo de configuración. En mi caso voy a configurar el dominio collabora.sismonda.com.ar

sudo vi /etc/apache2/sites-available/collabora.sismonda.com.ar.conf
<VirtualHost *:80>
	ServerName collabora.sismonda.com.ar
	ServerAdmin webmaster@sismonda.com.ar
	DocumentRoot /var/www/servers/collabora.sismonda.com.ar/htdocs

	# Encoded slashes need to be allowed
	AllowEncodedSlashes NoDecode

	# Container uses a unique non-signed certificate
	SSLProxyEngine On
	SSLProxyVerify None
	SSLProxyCheckPeerCN Off
	SSLProxyCheckPeerName Off

	# keep the host
	ProxyPreserveHost On

	# static html, js, images, etc. served from loolwsd
	# loleaflet is the client part of Collabora Online
	ProxyPass           /loleaflet https://10.0.0.11:9980/loleaflet retry=0
	ProxyPassReverse    /loleaflet https://10.0.0.11:9980/loleaflet

	# WOPI discovery URL
	ProxyPass           /hosting/discovery https://10.0.0.11:9980/hosting/discovery retry=0
	ProxyPassReverse    /hosting/discovery https://10.0.0.11:9980/hosting/discovery

	# Capabilities
	ProxyPass           /hosting/capabilities https://10.0.0.11:9980/hosting/capabilities retry=0
	ProxyPassReverse    /hosting/capabilities https://10.0.0.11:9980/hosting/capabilities

	# Main websocket
	ProxyPassMatch "/lool/(.*)/ws$" wss://10.0.0.11:9980/lool/$1/ws nocanon

	# Admin Console websocket
	ProxyPass   /lool/adminws wss://10.0.0.11:9980/lool/adminws

	# Download as, Fullscreen presentation and Image upload operations
	ProxyPass           /lool https://10.0.0.11:9980/lool
	ProxyPassReverse    /lool https://10.0.0.11:9980/lool
	
</VirtualHost>

Los valores en negrita y rojo son los propios de mi configuración.

El equipo donde ejecuto docker no es el mismo que el que tiene el servidor web (si esta todo en la misma caja podemos usar la ip 127.0.0.1), sino ajustar a la ip del equipo donde se ejecutar el docker de collabora.

El domino cada uno usa el suyo, asumo que si llegaste acá eso lo sabés.

Faltando ya poco para ponerlo en marcha, vamos a habilitar el sitio, y recargar la configuración del apache.

sudo a2ensite collabora.sismonda.com.ar.conf
sudo systemctl reload apache2.service

Para dejar las cosas prolijas ejecutamos el procedimiento de cerbot para obtener los certificados ssl firmados en apache.

Configuración de Nexcloud para intergralo con Collabora Online

Por último nos falta configurar nuestro servidor cloud para integrarlo con el docker que pusimos en marcha.

Menú de opciones de nexcloud.  Es necesario hacer click en + Apps.

Debemos ingresar a nextcloud con un usuario administrador. Sobre el ícono que se encuentra en la parte superior a la derecha hacer click y desplegar el menú.

Sobre el menú hacer click en Apps.

Una vez dentro del gestor de aplicaciones hacer click en «Office and Text».

Buscar la opción Collabora Online y realizar click sobre Download and Enable.

Esto va a demandar un par de segundos. Solo nos falta ahora configurar el módulo para terminar la integración.

Volvemos a hacer click sobre el ícono que se encuentra en la parte superior a la derecha, desplegar el menú y realizamos click en «Settings».

Dentro del bloque de administración buscamos la entrada «Collabora Online Developement …).

Ahí accedemos a la pantalla de configuración del módulo, donde elegí la opción «Use your own server» (Usar un servidor propio) y le cargue la url donde escucha el servicio.

Paso a paso para configurar la integración de Collabora Online.
Paso a paso para configurar la integración de Collabora Online.

Si todo va bien vemos un check verde con la leyenda «Collabora Online Server is reachable».

Felicitaciones!!! Ya tenes tu servidor Nextcloud con el editor Online Collabora.

Verificación del editor funcionando.
Verificación del editor funcionando.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.