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
Como primer paso es necesario descargar imágenes del sistema base de entre las disponibles. Para crear contenedores las imágenes deben haber sido descargadas previamente.
Actualizamos el catálogo de plantillas disponibles:
# pveam update
Listamos las plantillas disponibles:
# pveam available --section system
...
system ubuntu-20.04-standard_20.04-1_amd64.tar.gz
system ubuntu-22.04-standard_22.04-1_amd64.tar.zst
system ubuntu-24.04-standard_24.04-2_amd64.tar.zst
system ubuntu-24.10-standard_24.10-1_amd64.tar.zst
system ubuntu-25.04-standard_25.04-1.1_amd64.tar.zst
...
Para cada plantilla que querramos utilizar, la descargamos usando:
# pveam download local ubuntu-24.10-standard_20.10-1_amd64.tar.zst
Estamos listos para crear contenedores usando esa imagen. Se puede listar todas las imágenes locales con:
# pveam list local
NAME SIZE
local:vztmpl/debian-12-standard\_12.7-0\_amd64.tar.zst 120.65MB
local:vztmpl/ubuntu-20.10-standard\_20.10-1\_amd64.tar.zst 136.83MB
En este punto, desde la interfaz web, deberías poder hacer clic en el botón ‘Create CT’ y elegir entre las plantillas disponibles.
Ahora bien, si preferís la linea de comandos, para crear un nuevo contenedor usamos
pct create 10 local:vztmpl/ubuntu-20.10-standard\_20.10-1\_amd64.tar.zst --rootfs local-lvm:24 --cores 2 --net0 name=ens18,bridge=vmbr0,ip=10.11.1.10/24,gw=10.11.1.1 --nameserver 10.11.1.1 --password 123456789 --timezone host
La clave definida en el comando anterior es para el usuario root. Dado que no podremos conectarnos por SSH utilizando ese usuario, iniciamos una terminal en el contenedor
pct enter 10
A partir de este punto podremos, por ejemplo, agregar usuarios y habilitar el acceso SSH
Reiniciamos el equipo y luego 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:
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:
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:
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:
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
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.
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.
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.
Con información de docs.ossii.com.tw