Intro
Contents
Este documento explica cómo instalar OxOOL (OxOffice Online) desde cero e integrarlo a Nextcloud.
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 20.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.
Guía de instalación de OxOffice Online para Ubuntu 20.04 (Community Edition)
Como primer paso es necesario descargar imágenes del sistema base de entre las disponibles. Para crear contenedores desde la interfaz web 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-16.04-standard_16.04.5-1_amd64.tar.gz system ubuntu-18.04-standard_18.04.1-1_amd64.tar.gz system ubuntu-20.04-standard_20.04-1_amd64.tar.gz system ubuntu-21.04-standard_21.04-1_amd64.tar.gz ...
Para cada plantilla que querramos utilizar, debemos descargarla usando:
# pveam download local ubuntu-20.04-standard_20.04-1_amd64.tar.gz
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-11-standard_11.3-0_amd64.tar.gz 160.67MB local:vztmpl/ubuntu-20.04-standard_20.04-1_amd64.tar.gz 204.28MB
En este punto, desde la interfaz web, deberías poder hacer clic en el botón ‘Create CT’ y elegir entre las plantillas disponibles.
pct es una herramienta de línea de comandos para gestionar contenedores (LXC) en servidores proxmox.
Así, para crear un nuevo contenedor
pct create 10 local:vztmpl/ubuntu-20.04-standard_20.04-1_amd64.tar.gz --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 consola en el contenedor
pct console 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 vim openssh-server net-tools curl gnupg2 wget -y # Chooese yes if you get any service restarting prompts curl http://www.oxoffice.com.tw/deb/OSSII-2022.key | sudo apt-key add cd /etc/apt/sources.list.d/ wget http://www.oxoffice.com.tw/deb/oxool-community-v4-focal.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_wstunnel, proxy_http. Para ello
a2enmod proxy proxy_wstunnel proxy_http
Crearemos un host virtual y, dependiendo de la necesidad, utilizaremos una de las siguientes configuraciones de ejemplo. Existen tres posibilidades:
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>
<VirtualHost *:443> ServerName oficina.dominio.edu.ar:443 Options -Indexes # 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 OxOffice Online ProxyPass /loleaflet https://127.0.0.1:9980/loleaflet retry=0 ProxyPassReverse /loleaflet https://127.0.0.1:9980/loleaflet # WOPI discovery URL ProxyPass /hosting/discovery https://127.0.0.1:9980/hosting/discovery retry=0 ProxyPassReverse /hosting/discovery https://127.0.0.1:9980/hosting/discovery # Capabilities ProxyPass /hosting/capabilities https://127.0.0.1:9980/hosting/capabilities retry=0 ProxyPassReverse /hosting/capabilities https://127.0.0.1:9980/hosting/capabilities # Main websocket ProxyPassMatch "/lool/(.*)/ws$" wss://127.0.0.1:9980/lool/$1/ws nocanon # Admin Console websocket ProxyPass /lool/adminws wss://127.0.0.1:9980/lool/adminws # Download as, Fullscreen presentation and Image upload operations ProxyPass /lool https://127.0.0.1:9980/lool ProxyPassReverse /lool https://127.0.0.1:9980/lool </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>
<VirtualHost *:443> ServerName oficina.dominio.edu.ar:443 Options -Indexes # 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 OxOffice Online ProxyPass /loleaflet http://127.0.0.1:9980/loleaflet retry=0 ProxyPassReverse /loleaflet http://127.0.0.1:9980/loleaflet # WOPI discovery URL ProxyPass /hosting/discovery http://127.0.0.1:9980/hosting/discovery retry=0 ProxyPassReverse /hosting/discovery http://127.0.0.1:9980/hosting/discovery # Capabilities ProxyPass /hosting/capabilities http://127.0.0.1:9980/hosting/capabilities retry=0 ProxyPassReverse /hosting/capabilities http://127.0.0.1:9980/hosting/capabilities # Main websocket ProxyPassMatch "/lool/(.*)/ws$" ws://127.0.0.1:9980/lool/$1/ws nocanon # Admin Console websocket ProxyPass /lool/adminws ws://127.0.0.1:9980/lool/adminws # Download as, Fullscreen presentation and Image upload operations ProxyPass /lool http://127.0.0.1:9980/lool ProxyPassReverse /lool http://127.0.0.1:9980/lool </VirtualHost>
3. HTTP plano:
La config correspondiente en /etc/oxool/oxoolwsd.xml es:
<ssl desc="SSL settings"> <enable type="bool">false</enable> <termination type="bool">false</termination> </ssl>
<VirtualHost *:80> ServerName oficina.dominio.edu.ar Options -Indexes # Encoded slashes need to be allowed AllowEncodedSlashes NoDecode # keep the host ProxyPreserveHost On # static html, js, images, etc. served from loolwsd # loleaflet is the client part of OxOffice Online ProxyPass /loleaflet http://127.0.0.1:9980/loleaflet retry=0 ProxyPassReverse /loleaflet http://127.0.0.1:9980/loleaflet # WOPI discovery URL ProxyPass /hosting/discovery http://127.0.0.1:9980/hosting/discovery retry=0 ProxyPassReverse /hosting/discovery http://127.0.0.1:9980/hosting/discovery # Capabilities ProxyPass /hosting/capabilities http://127.0.0.1:9980/hosting/capabilities retry=0 ProxyPassReverse /hosting/capabilities http://127.0.0.1:9980/hosting/capabilities # Main websocket ProxyPassMatch "/lool/(.*)/ws$" ws://127.0.0.1:9980/lool/$1/ws nocanon # Admin Console websocket ProxyPass /lool/adminws ws://127.0.0.1:9980/lool/adminws # Download as, Fullscreen presentation and Image upload operations ProxyPass /lool http://127.0.0.1:9980/lool ProxyPassReverse /lool http://127.0.0.1:9980/lool </VirtualHost>
Cerramos y guardamos el archivo.
Habilitamos este host virtual con el siguiente comando:
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. Existen tres posibilidades:
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>
upstream oxool-community { server localhost:9980; keepalive 32; } server { listen 443 ssl; server_name oficina.dominio.edu.ar; ssl_certificate /ruta/a/certificado_ssl; ssl_certificate_key /ruta/a/llave_certificado_ssl; # static files location ^~ /loleaflet { proxy_pass https://oxool-community; proxy_set_header Host $http_host; } # WOPI discovery URL location ^~ /hosting/discovery { proxy_pass https://oxool-community; proxy_set_header Host $http_host; } # Capabilities location ^~ /hosting/capabilities { proxy_pass https://oxool-community; proxy_set_header Host $http_host; } # main websocket location ~ ^/lool/(.*)/ws$ { proxy_pass https://oxool-community; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header Host $http_host; proxy_read_timeout 36000s; } # download, presentation and image upload location ~ ^/lool { proxy_pass https://oxool-community; proxy_set_header Host $http_host; } # Admin Console websocket location ^~ /lool/adminws { proxy_pass https://oxool-community; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header Host $http_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>
upstream oxool-community { server localhost:9980; keepalive 32; } server { listen 443 ssl; server_name oficina.dominio.edu.ar; ssl_certificate /ruta/a/certificado_ssl; ssl_certificate_key /ruta/a/llave_certificado_ssl; # static files location ^~ /loleaflet { proxy_pass http://oxool-community; proxy_set_header Host $http_host; } # WOPI discovery URL location ^~ /hosting/discovery { proxy_pass http://oxool-community; proxy_set_header Host $http_host; } # Capabilities location ^~ /hosting/capabilities { proxy_pass http://oxool-community; proxy_set_header Host $http_host; } # main websocket location ~ ^/lool/(.*)/ws$ { proxy_pass http://oxool-community; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header Host $http_host; proxy_read_timeout 36000s; } # download, presentation and image upload location ~ ^/lool { proxy_pass http://oxool-community; proxy_set_header Host $http_host; } # Admin Console websocket location ^~ /lool/adminws { proxy_pass http://oxool-community; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header Host $http_host; proxy_read_timeout 36000s; } }
3. HTTP plano:
La config correspondiente en /etc/oxool/oxoolwsd.xml es:
<ssl desc="SSL settings"> <enable type="bool">false</enable> <termination type="bool">false</termination> </ssl>
upstream oxool-community { server localhost:9980; keepalive 32; } server { listen 80; server_name oficina.dominio.edu.ar; # static files location ^~ /loleaflet { proxy_pass http://oxool-community; proxy_set_header Host $http_host; } # WOPI discovery URL location ^~ /hosting/discovery { proxy_pass http://oxool-community; proxy_set_header Host $http_host; } # Capabilities location ^~ /hosting/capabilities { proxy_pass http://oxool-community; proxy_set_header Host $http_host; } # main websocket location ~ ^/lool/(.*)/ws$ { proxy_pass http://oxool-community; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header Host $http_host; proxy_read_timeout 36000s; } # download, presentation and image upload location ~ ^/lool { proxy_pass http://oxool-community; proxy_set_header Host $http_host; } # Admin Console websocket location ^~ /lool/adminws { proxy_pass http://oxool-community; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header Host $http_host; proxy_read_timeout 36000s; } }
Cerramos y guardamos el archivo. Luego probamos la configuración de Nginx.
nginx -t
Si la prueba es exitosa, recargamos Nginx.
systemctl reload nginx
Instalar Nextcloud 24 en Ubuntu 20.04
Instala los paquetes de Apache y PHP requeridos por el núcleo de Nextcloud (deberás contar con una base de datos como MariaDB (recomendada 10.5) o PostgreSQL y el paquete de extensión PHP correspondiente)
Para tener disponibles todas las versiones de PHP se recomienda instalar el repositorio ppa:ondrej/php. Gracias Ondřej Surý.
add-apt-repository ppa:ondrej/php
Actualizar los índices
apt update
Instalamos algunos paquetes necesarios
apt install software-properties-common dirmngr apt-transport-https
Ejecutamos el script para agregar los repos oficiales de MariaDB
curl -LsS https://r.mariadb.com/downloads/mariadb_repo_setup | sudo bash
Agregamos los paquetes de software necesarios para el núcleo de Nextcloud
apt install mariadb-server apache2 libapache2-mod-php8.1 php8.1-{apcu,common,curl,gd,json,xml,mbstring,mysql,xml,zip,intl,bz2,ldap,bcmath}
Descargamo y descomprimimos Nextcloud 24 (al momento de escribir este artículo, la última versión es 24.0.5, verifica si hay una versión más nueva cuando lo instales).
cd /var/www/html sudo wget --no-check-certificate https://download.nextcloud.com/server/releases/nextcloud-24.0.5.tar.bz2 sudo tar -xf nextcloud-*.tar.bz2 sudo chown -R www-data:www-data nextcloud sudo chmod -R 750 nextcloud sudo systemctl restart apache2
Conéctate a Nextcloud y completa la configuración básica
Ingresa a http://ip-servidor/nextcloud
Agrega una cuenta de administrador → ingresa [nombre de usuario] y [contraseña] → haz clic directamente en [finalizar configuración]
Configurar la conexión entre Nextcloud y OxOOL Community Edition
Inicia sesión en Nextcloud como administrador:
Haz clic en [Nombre de usuario] en la esquina superior derecha de la pantalla → [+ Aplicaciones]
Busca Nextcloud Office en el lado izquierdo de la pantalla, seleccione [Activar] → ingrese la contraseña del administrador del sistema.
Una vez activada esta aplicación, vamos a la configuración de Nextcloud. Haz 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://oficina.dominio.edu.ar/loleaflet/dist/admin/admin.html. Es 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 loolconfig to set up a secure password.">admin</password> </admin_console>
El archivo /etc/oxool/oxoolwsd.xml contiene distintos parámetros que nos puede interesar moficar 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