OxOOL (OxOffice Online) Community Edition

OxOffice Online es una suite ofimática en línea de código abierto, autoalojable y basada en LibreOffice Online.

Sus características incluyen:

  • Edición básica y compartida

  • Alta fidelidad, representación WYSIWYG

  • Soporta el estándar mundial Open Document Format e incluso formatos privativos como DOC/DOCX, PPT/PPTX, XLS/XLSX

Está disponible para RockyLinux 8 y Ubuntu 24.04. Si estás interesado en probarlo en otra plataforma puedes descargar el último código fuente de GitHub e intentar compilarlo.

OxOffice Online y Nextcloud pueden estar en el mismo servidor o en dos diferentes.

Instalación

Ejecutamos estos comandos para instalar los programas necesarios junto con OxOOL Community Edition

apt update
apt upgrade -y
apt install nano openssh-server net-tools curl -y
# Chooese yes if you get any service restarting prompts
curl -o /etc/apt/keyrings/OSSII.asc http://www.oxoffice.com.tw/deb/OSSII.key
curl -o /etc/apt/sources.list.d/oxool-community-v5-noble.list http://www.oxoffice.com.tw/deb/oxool-community-v5-noble.list
apt update
apt install oxool -y

Definimos que el servicio OxOOL Community Edition se inicie al arrancar y luego reiniciamos

systemctl enable oxool
reboot

Comprobamos si OxOOL Community Edition inicia normalmente

netstat -tlnp

Deberías obtener un resultado similar a este:

tcp6 0 0 :::9980 :::\* LISTEN 644/oxool

Configurar un proxy reverso

Dependiendo de la infraestructura disponible puede ser necesario configurar un proxy reverso. Para ello se puede utilizar Apache o Nginx.

Con SSL o sin SSL

La regla del punto de conexión se puede resumir como

  • wss se conecta sólo en https

  • ws se conecta en http

y viceversa:

  • https sólo acepta wss

  • http sólo acepta ws

Apache

Para poder procesar el tráfico, es necesario habilitar los siguientes módulos: proxy, proxy_connect, proxy_http, proxy_wstunnel. Para ello

a2enmod proxy proxy_connect proxy_http proxy_wstunnel

Crearemos un host virtual y, dependiendo de la necesidad, utilizaremos una de las siguientes configuraciones de ejemplo:

nano /etc/apache2/sites-available/oxool.conf

Sustituiremos el nombre de dominio que utilizamos para OxOffice Online. No debes olvidar crear un registro A para este subdominio en el DNS.

1. SSL en ambos extremos (Apache):

La config correspondiente en /etc/oxool/oxoolwsd.xml es:

<ssl desc="**SSL settings**">
        <enable type="bool">true</enable>
</ssl>

Host virtual Apache

<VirtualHost *:443>
  ServerName odfweb.dominio.edu.ar:443
  Options -Indexes
  # Encoded slashes need to be allowed
  AllowEncodedSlashes NoDecode
  SSLProxyEngine On
  ProxyPreserveHost On

 # cert is issued for collaboraonline.example.com and we proxy to localhost
 SSLProxyVerify None
 SSLProxyCheckPeerCN Off
 SSLProxyCheckPeerName Off

 oxool_communitty = «oxoolhost»:9980

 # static html, js, images, etc. served from oxoolwsd
 # browser is the client part of Collabora Online
 ProxyPass           /browser https://${oxool\_communitty}/browser retry=0
 ProxyPassReverse    /browser https://${oxool\_communitty}/browser

 # WOPI discovery URL
 ProxyPass           /hosting/discovery https://${oxool\_communitty}/hosting/discovery retry=0
 ProxyPassReverse    /hosting/discovery https://${oxool\_communitty}/hosting/discovery

 # Capabilities
 ProxyPass           /hosting/capabilities https://${oxool\_communitty}/hosting/capabilities retry=0
 ProxyPassReverse    /hosting/capabilities https://${oxool\_communitty}/hosting/capabilities

 # Main websocket
 ProxyPassMatch      "/(c|ox)ool/(.\*)/ws$"      wss://${oxool\_communitty}/oxool/$1/ws nocanon

 # Admin Console websocket
 ProxyPass           /(c|l)ool/adminws wss://${oxool\_communitty}/oxool/adminws

 # Download as, Fullscreen presentation and Image upload operations
 ProxyPass           /(c|ox)ool https://${oxool\_communitty}/oxool
 ProxyPassReverse    /(c|ox)ool https://${oxool\_communitty}/oxool
 # Compatibility with integrations that use the /lool/convert-to endpoint
 ProxyPass           /lool https://${oxool\_communitty}/oxool
 ProxyPassReverse    /lool https://${oxool\_communitty}/oxool
</VirtualHost>

2. SSL termina en el proxy (Apache):

La config correspondiente en /etc/oxool/oxoolwsd.xml es:

<ssl desc="**SSL settings**">
        <enable type="bool">false</enable>
        <termination>true</termination>
</ssl>

Host virtual Apache

<VirtualHost *:443>
  ServerName odfweb.dominio.edu.ar:443
  Options -Indexes
  # Encoded slashes need to be allowed
  AllowEncodedSlashes NoDecode
  ProxyPreserveHost On

 # static html, js, images, etc. served from oxoolwsd
 # browser is the client part of Collabora Online
 ProxyPass           /browser http://${oxool\_communitty}/browser retry=0
 ProxyPassReverse    /browser http://${oxool\_communitty}/browser

 # WOPI discovery URL
 ProxyPass           /hosting/discovery http://${oxool\_communitty}/hosting/discovery retry=0
 ProxyPassReverse    /hosting/discovery http://${oxool\_communitty}/hosting/discovery

 # Capabilities
 ProxyPass           /hosting/capabilities http://${oxool\_communitty}/hosting/capabilities retry=0
 ProxyPassReverse    /hosting/capabilities http://${oxool\_communitty}/hosting/capabilities

 # Main websocket
 ProxyPassMatch      "/(c|ox)ool/(.\*)/ws$"      ws://${oxool\_communitty}/oxool/$1/ws nocanon

 # Admin Console websocket
 ProxyPass           /(c|l)ool/adminws ws://${oxool\_communitty}/oxool/adminws

 # Download as, Fullscreen presentation and Image upload operations
 ProxyPass           /(c|ox)ool http://${oxool\_communitty}/oxool
 ProxyPassReverse    /(c|ox)ool http://${oxool\_communitty}/oxool

 # Compatibility with integrations that use the /lool/convert-to endpoint
 ProxyPass           /lool http://${oxool\_communitty}/oxool
 ProxyPassReverse    /lool http://${oxool\_communitty}/oxool
</VirtualHost>

Guardamos el archivo y habilitamos este host virtual:

sudo a2ensite oxool.conf

Luego recargamos la configuración de Apache.

systemctl restart apache2

Obtener e instalar certificados TLS

Dado que en otro artículo se explica cómo instalar, configurar y poner en marcha Apache con el módulo mod_md no vamos a ahondar sobre el tema en esta oportunidad.

Nginx

Crearemos un host virtual y, dependiendo de la necesidad, utilizaremos una de las siguientes configuraciones de ejemplo:

nano /etc/nginx/sites-available/oxool.conf

Sustituiremos el nombre de dominio que utilizamos para OxOffice Online. No debes olvidar crear un registro A para este subdominio en el DNS.

1. SSL en ambos extremos (Nginx):

La config correspondiente en /etc/oxool/oxoolwsd.xml es:

<ssl desc="**SSL settings**">
        <enable type="bool">true</enable>
</ssl>

Bloque server Nginx

upstream oxool-community {
    server «oxoolhost»:9980;
    keepalive 32;
    }

 # static files
   location ^~ /browser {
   proxy\_pass https://oxool-community;
   proxy\_set\_header Host $host;
 }

 # WOPI discovery URL
   location ^~ /hosting/discovery {
   proxy\_pass https://oxool-community;
   proxy\_set\_header Host $host;
 }

 # Capabilities
   location ^~ /hosting/capabilities {
   proxy\_pass https://oxool-community;
   proxy\_set\_header Host $host;
 }

 # main websocket
   location ~ ^/(c|ox)ool/(.\*)/ws$ {
   proxy\_pass https://oxool-community;
   proxy\_set\_header Upgrade $http\_upgrade;
   proxy\_set\_header Connection "Upgrade";
   proxy\_set\_header Host $host;
   proxy\_read\_timeout 36000s;
 }

 # download, presentation and image upload
 location ~ ^/(c|l)ool {
   proxy\_pass https://oxool-community;
   proxy\_set\_header Host $host;
 }

 # Admin Console websocket
 location ^~ /(c|ox)ool/adminws {
   proxy\_pass https://oxool-community;
   proxy\_set\_header Upgrade $http\_upgrade;
   proxy\_set\_header Connection "Upgrade";
   proxy\_set\_header Host $host;
   proxy\_read\_timeout 36000s;

 }

}

2. SSL termina en el proxy (Nginx):

La config correspondiente en /etc/oxool/oxool.xml es:

<ssl desc="**SSL settings**">
        <enable type="bool">false</enable>
        <termination>true</termination>
</ssl>

Bloque server Nginx

upstream oxool-community {
    server «oxoolhost»:9980;
    keepalive 32;
    }

    server {
    listen       443 ssl;
    server\_name  odfweb.dominio.edu.ar;
    ssl\_certificate /ruta/a/certificado\_ssl;
    ssl\_certificate\_key /ruta/a/llave\_certificado\_ssl;
	
    proxy\_set\_header Host $host;
    proxy\_set\_header X-Forwarded-For $remote\_addr;
    proxy\_set\_header X-Forwarded-Proto $scheme;

    proxy\_read\_timeout 36000s;

 # Archivos estáticos
 location ^~ /browser {
   proxy\_pass http://oxool-community;
   proxy\_set\_header Host $host;
 }

 # Capacidades y descubrimiento WOPI
 location ~ ^/hosting/(discovery|capabilities) {
   proxy\_pass http://oxool-community;
   proxy\_set\_header Host $host;
 }

 # main websocket
 location ~ ^/(oxool|cool)/(.\*)/?$ {
   proxy\_pass http://oxool-community;
   proxy\_set\_header Host $host;
   proxy\_set\_header X-Forwarded-For $remote\_addr;
   proxy\_set\_header X-Forwarded-Proto $scheme;

   proxy\_http\_version 1.1;
   proxy\_set\_header Upgrade $http\_upgrade;
   proxy\_set\_header Connection "upgrade";

   proxy\_read\_timeout 36000s;
   proxy\_redirect off;
 }

 # Mejora desempeño de recursos estáticos
 location ~\* \\.(js|css|png|jpg|jpeg|gif|ico|svg|woff2)$ {
   proxy\_pass http://oxool-community;
   proxy\_set\_header Host $host;
   expires 30d;
   add\_header Cache-Control "public, immutable";
   access\_log off;
 }

Guardamos el archivo y verificamos la configuración de Nginx.

nginx -t

Si no hay errores, recargamos Nginx.

systemctl reload nginx

Conexión a Nextcloud

NextcloudOffice

Inicia sesión en Nextcloud como administrador: Hacemos clic en Nombre de usuario en la esquina superior derecha de la pantalla → + Aplicaciones Buscamos Nextcloud Office en el lado izquierdo de la pantalla, seleccionamos Activar → ingrese la contraseña del administrador del sistema. Una vez activada esta aplicación, vamos a la configuración de Nextcloud. Hacemos clic en la pestaña Nextcloud Office de la izquierda. Tenemos que seleccionar «Use su propio servidor» e introducir el nombre de dominio de nuestro OxOffice Online incluyendo el prefijo https://, luego hacemos clic en el botón Save.

Tras completar la configuración, cuando hagas clic en el botón de añadir (+) en Nextcloud, podrás crear documentos de texto, hojas de cálculo y presentaciones directamente desde tu navegador web.

NextcloudOffice File options

La consola de administración de OxOOL está disponible en https://odfweb.dominio.edu.ar/browser/dist/admin/admin.html. La primera vez resulta necesario introducir admin como nombre de usuario y contraseña.

OxOOL Admin Console

La clave se puede modificar desde el menu System ubicado arriba a la derecha. En caso de no querer utilizarla, se puede deshabilitarla completamente editando el archivo /etc/oxool/oxoolwsd.xml En la sección

<admin_console desc="Web admin console settings.">
<enable desc="Enable the admin console functionality" type="bool" default="true">true</enable>
<enable_pam desc="Enable admin user authentication with PAM" type="bool" default="false">false</enable_pam>
<username desc="The username of the admin console. Ignored if PAM is enabled.">admin</username>
<password desc="The password of the admin console. Deprecated on most platforms. Instead, use PAM or oxoolconfig to set up a secure password.">admin</password>
<logging desc="Log admin activities irrespective of logging.level">
<admin_login desc="log when an admin logged into the console" type="bool" default="true">true</admin_login>
<metrics_fetch desc="log when metrics endpoint is accessed and metrics endpoint authentication is enabled" type="bool" default="true">true</metrics_fetch>
<monitor_connect desc="log when external monitor gets connected" type="bool" default="true">true</monitor_connect>
<admin_action desc="log when admin does some action for example killing a process" type="bool" default="true">true</admin_action>
</logging>
</admin_console>

El archivo /etc/oxool/oxoolwsd.xml contiene distintos parámetros que nos puede interesar modificar y/o ajustar. Por ejemplo, los idiomas soportados, la ruta del archivo de registro o la lista de host permitidos, entre otros.

OxOOL Admin Console

Con información de docs.ossii.com.tw