LibreOfficeOnline eta Nextcloud batera lanean

16 irakurketa minutu

2020ko ekainak 5-ean Eguneratua. Post hau gaurko egunez dagoen LOOL-eko azken bertsioaren instalazioarako eguneratuta dago.

Nextcloud zerbitzarian bulegotika/ofimatika dokumentuak online editatu ahal izateko lehen aukeretako bat CollaboraOnline erabiltzea da. Oso erreza da bera konfiguratzea, docker bidez instalatzen da eta ondo integratuta dago.

Arazoa da docker kontainerrak batera konektatua egon daitezkeen erabiltzaile kopurua mugatuta daukala: 10 erabiltzaileko/dokumentuko konkurrentzia onartzen du, hortik gora mezu bat azaltzen da muga gainditu dela esanez.

CollaboraOnline docker irudia LibreOfficeOnline-ean oinarrituta dagonez, bigarren hau Nextcloud-ekin erabiltzeko nola instalatu eta konfiguratu dezakegun azaltzera goaz. Lan gehiago eskatuko digu, baina posible da.

Bi zerbitzari

Docker kontainerrarekin lan egin dugunean, dena zerbitzari berean izan dugu. Nextcloud zerbitzari batean instalatzen genuen, eta gero zerbitzarian bertan docker erabiliz CollaboraOnline zerbitzua abiatzen genuen.

Hau egiteko, eta dokumentazio ofizialean dauden instrukzioak jarraituz, bi domeinu erabiltzen genituen

    • https://hodeia.niredomeinua.eus : Nextcloud zerbitzurako

    • https://office.niredomeinua.eus : CollaboraOnline zerbitzurako

Konturatzen bagara, https erabiltzeko konfiguratu dugu, eta horretarako Letsencrypt erabili dugu.

Nextcloud zerbitzarian administratzaile moduan sartuta, CollaboraOnline plugina aktibatu ondoren, bere konfigurazioan zerbitzaria zein den esatea nahikoa izan da dena martxan jartzeko: https://office.niredomeinua.eus

Orain CollaboraOnline ordeztu nahi dugu bere ordez LibreOfficeOnline erabiltzeko. Horretarako bigarren zerbitzari bat erabiliko dugu. Honek etorkizunari begira onura asko ekarriko dizkigu:

  • LibreOfficeOnline bertsio berri bat instalatu nahi dugunean, produkzioan dagoena ezertarako ukitu gabe, zerbitzari berri bat instalatu dezakegu (office02.niredomeinua.eus). Dena ondo konfiguratuta dugunean, Nextcloud zerbitzarian CollaboraOnline pluginean zerbitzari berriaren izena idatzi eta ikusi nola dabilen. Arazoren bat ematen badu, lehen genuena jarri eta zerbitzua ez da geratzen.
  • Lan karga banatzen dugu. Erabiltzaile askok batera ofimatika dokumentuak online editatzen daudenean, Nextcloud zerbitzariak ez du lan karga hori nabarituko.

Bigarren zerbitzari honen instalazioa bukatzen denean, Nextcloud zerbitzuko CollaboraOnline pluginean bere helbidea jarriko dugu: https://office02.niredomeinua.eus

LibreOfficeOnline zerbitzaria instalatu

Aurrerantzean LOOL deituko diogu.

Instalazio hau egiteko Ubuntu 18.04 LTS instalatu berri eta eguneratu batean oinarritzen gara. LOOL deskargatu eta konpilatuko dugu. Honetarako, Github-en dagoen proiektu hau zip moduan deskargatuko dugu eta zerbitzariko karpeta batean deskonprimatuko dugu

https://github.com/husisusi/officeonlin-install.sh/

Unzip instalatu

# apt-get install unzip 

Hurrengo lerro hauek garrantzi berezia dute. Dokumentu bat editatzerakoan automatikoki hizkuntza zuzentzailea aplikatzen saiatzen da. Sisteman zuzentzailea instalatuta ez dagoenean, dokumentu batean zerbait idazten saiatzen zarenean, akats bat ematen du eta berriro dokumentua berriro kargatzen da [ 1 , 2]

Ondorioz, erabiliko dituzun hizkuntzetako zuzentzaileak instalatu beharko ditugu

# apt install hunspell locales-all hunspell-eu-es hunspell-es

Orain konpilazioa. Kontutan izan hau egin ahal izateko gutxienez 4GB RAM eta diskoan 13GB libre izan beharko dituela.
Lasai hartu, ordu batzuk beharko ditu. Agian hoberena gauez martxan uztea litzateke, eta hurrengo goizean dena prest izango genuke.

# cd /root
# wget -c https://github.com/husisusi/officeonlin-install.sh/archive/master.zip
# unzip officeonlin-install.sh-master.zip
# cd officeonlin-install.sh-master/

Konpilazioa egin aurretik, gomendagarria da begiratzea zeintzuk diren une honetan konpilaziorako gomendatzen dituzten parametroak. Horretarako bi leku hauetan begiratzea gomendatzen dut:

Parametro hauek officeonline-install.cfg fitxategian gehituko ditugu. Orain ((2020/06/08) egitera goazen kopilazioan hauek dira gehituko ditugun lerroak:

set_core_regex='cp-6.2'
set_online_regex='co-4.2.4'
lo_src_repo='https://github.com/LibreOffice/core.git'
lo_src_branch='master'
lo_src_commit=''
lo_src_tag=''
lo_dir="/opt/libreoffice"
lo_forcebuild=true
lo_non_free_ttf=true
poco_version=$poco_version_latest #latest releases available
poco_forcebuild=true
lool_src_repo="https://github.com/LibreOffice/online.git"
lool_src_branch='master'
lool_src_tag='cp-4.2.4-2'
lool_dir="/opt/lool"
lool_configure_opts="--disable-werror --with-lokit-path=${lo_dir}/include"
lool_logfile='/var/log/loolwsd.log'
lool_prefix='/usr'
lool_sysconfdir='/etc'
lool_localstatedir='/var'
lool_forcebuild=true
lool_maxcon=200
lool_maxdoc=100
loolwsd_service_name='loolwsd'

Ondoren, konpilazio akats bat ekiditeko lib/default.cfg fitxategia editatu eta bi erreferentzia hauek bilatu eta ezabatuko ditugu: disable-gstreamer-0-10 eta disable-kde4

Orain, konpilazioan behar diren bi pakete hauek instalatuko ditugu

apt-get install python3-lxml
apt-get install python3-polib

eta azkenik konpilazioa eta instalazioa abiatuko ditugu

# ./officeonline-install.sh

Pazientzia izan, ordu batzuk beharko ditu. Instalazioa bukatu ondoren zerbitzaria berrabiaraziko dugu. Instalazio honek LOOL zerbitzu moduan jarri du

# systemctl status loolwsd.service

Beraz aurrerantzean sistema berrabiarazi nahiko bagenuke (adibidez konfigurazioa aldatu dugulako), honela egitea gomendatzen dute

# systemctl daemon-reload && systemctl restart loolwsd.service

Zerbitzua ondo arrankatu den ikusteko

# systemctl status loolwsd.service

Hau egin ondoren 9980 portuan erantzungo du

Apache

Front-End moduan Apache jarriko dugu, horretarako behar diren moduluak aktibatu eta letsencrypt konfiguratu ondoren, eskaerak LOOL zerbitzuari 9980 portua erabiliz bideratzeko konfiguratuko dugu.

# apt-get install apache2

Apache moduloak

Beharko ditugun moduluak aktibatu

# a2enmod ssl proxy proxy_http proxy_balancer proxy_wstunnel

LetsEncrypt

Apache konfigurazio fitxategia (/etc/apache2/sites-enabled/000-default.conf) editatuko dugu eta Servername atalean gure zerbitzariaren DNS izena jarriko dugu

ServerName office02.niredomeinua.eus

Gure kasuan Ubuntu 18.04 LTS erabiltzen ari gara. Honela instalatu dugu

# apt-get install software-properties-common
# add-apt-repository universe
# add-apt-repository ppa:certbot/certbot
# apt-get update
# apt-get install certbot python-certbot-apache
# certbot --apache

 Ondoren, konfigurazio fitxategia ( /etc/apache2/sites-enabled/000-default-le-ssl.conf) editatu  eta beltzez jarri ditugun lerro hauek gehitu beharko dituzu:


<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
    # error, crit, alert, emerg.
    # It is also possible to configure the loglevel for particular
    # modules, e.g.
    #LogLevel info ssl:warn

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    # For most configuration files from conf-available/, which are
    # enabled or disabled at a global level, it is possible to
    # include a line for only one particular virtual host. For example the
    # following line enables the CGI configuration for this host only
    # after it has been globally disabled with "a2disconf".
    #Include conf-available/serve-cgi-bin.conf

ServerName office02.niredomeinua.eus
SSLCertificateFile /etc/letsencrypt/live/office02.niredomeinua.eus/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/office02.niredomeinua.eus/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
# HASIERA LIBREOFFICEONLINE CONF

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

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 LibreOffice 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

# BUKAERA LIBREOFFICEONLINE CONF
</VirtualHost>
</IfModule>

Apache eta letsencrypt

Gure zerbitzari honek domeinu izen bat izan behar du, gure kasuan office02.niredomeinua.eus domeinuari erantzuteko prestatu dugu. Apache eta Letsencrypt konfiguratuta ditugu.

Kontua da LOOL-ek ez dituela Apache-ko ziurtagiriak erabiltzen, berak bere ziurtagiri propioak erabiltzen ditu. Hemen proposatzen den soluzioak hau egingo luke:

  • Letsencrypt eguneraketa normal bat egin, beraiek proposatzen duten moduan cron bidez ziurtagiriaren eguneraketak behar direnean automatikoki egiteko.
  • Gauero LOOL zerbitzua geratu eta Letsencrypt bidez sortzen diren ziurtagiriak LOOL-ek begiratzen duen karpetan utzi eta baimen egokiak jarri
  • Ziurtagiriak kopiatu ondoren, berriro ere LOOL zerbitzua abiatu.

Gauero kopia egiteko scripta sortu

# mkdir /root/scripts
# cd /root/scripts/
# nano lool-letsencrypt.sh
# chmod +x lool-letsencrypt.sh

Edukian begiratzen badugu, hau da egiten duena. Lehenik eta behin LOOL konfigurazio karpetan, karpeta berri bat sortuko dugu ziurtagiriak bertan kopiatzeko, eta gure LOOL domeinu izenarekin karpeta bat sortuko dugu (aurrez sortuta badaude aurrera jarraituko du).

Ondoren azaltzen den edukiarekin script bat sortuko dugu, eta crontab bidez gauero exekutatuko dugu

#!/bin/sh
mkdir -p /etc/loolwsd/certs/office02.niredomeinua.eus
# Letsencrypt ziurtagiriak kopiatu
cp -f /etc/letsencrypt/live/office02.niredomeinua.eus/cert.pem /etc/loolwsd/certs/office02.niredomeinua.eus/
cp -f /etc/letsencrypt/live/office02.niredomeinua.eus/privkey.pem /etc/loolwsd/certs/office02.niredomeinua.eus/
# Baimenak ondo jarri
chown -Rf lool:lool /etc/loolwsd/certs
chmod -Rf 755  /etc/loolwsd/certs
# eta azkenik zerbitzua berrabiarazi
systemctl daemon-reload && systemctl restart loolwsd.service

"crontab -e" komandoa erabiliz, egunero apache-ko ziurtagiriak loolwsd karpetan kopiatzeko konfiguratuko dugu.

0 5 * * * /root/scripts/lool-letsencrypt.sh

LOOL: Oinarrizko konfigurazioan aldaketak

Zerbitzua

LOOL arrankatzekoan erabiliko dituen parametroak hemen konfiguratzen dira

/lib/systemd/system/loolwsd.service

Aurrerago ikusiko dugunez, web bidez admin interfaze bat izango dugu. Hor ikusi ahal izango dugu besteak beste

  • Une bakoitzean zabalik dauden dokumentuak, eta baita ere zeintzuk diren LOOL erabiltzen ari diren erabiltzaileak.
  • Memoria eta mikroak duten karga

Admin erabiltzaile horren izena eta pasahitza lerro honetan konfiguratzen da

ExecStart=/opt/online/loolwsd --o:sys_template_path=/opt/online/systemplate --o:lo_template_path=/opt/libreoffice/instdir  --o:child_root_path=/opt/online/jails --o:admin_console.username=nireadminerabiltzailea –o:admin_console.password="niresuperpasahitza"

Beste parametroak

Ezer aldatzen hasi aurretik, gomendagarria da konfigurazio fitxategiaren kopia bat egitea.

# cp /etc/loolwsd/loolwsd.xml /etc/loolwsd/loolwsd.xml.backup

Aldatu ditugun parametroak hauek dira:

Hizkuntzak

Online edizioan gure eskura izango ditugun hizkuntzak konfiguratuko ditugu. Kontutan izan lehenago azaldu dugun moduan, hizkuntza hauetako zuzentzaile ortografikoak instalatuta egon behar direla.

<allowed_languages desc="List of supported languages on this instance." default="de_DE en_GB en_US es_ES fr_FR it nl pt_BR pt_PT ru">es_ES eu_ES</allowed_languages>
 

Nextcloud zerbitzaria baimendu

Gure Nextcloud zerbitzaria baimendu “Backend storage” atalean. Domeinuaren izenean dauden puntuak “eskapatu” egin behar dira aurretik “\” jarrita. Adibidez: hodeia\.niredomeinua\.eus

    <storage desc="Backend storage">
        <filesystem allow="false" />
        <wopi desc="Allow/deny wopi storage. Mutually exclusive with webdav." allow="true">
            <host desc="Regex pattern of hostname to allow or deny." allow="true">hodeia\.niredomeinua\.eus</host>
            <host desc="Regex pattern of hostname to allow or deny." allow="true">localhost</host>
            <host desc="Regex pattern of hostname to allow or deny." allow="true">10\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}</host>
            <host desc="Regex pattern of hostname to allow or deny." allow="true">172\.1[6789]\.[0-9]{1,3}\.[0-9]{1,3}</host>
            <host desc="Regex pattern of hostname to allow or deny." allow="true">172\.2[0-9]\.[0-9]{1,3}\.[0-9]{1,3}</host>
            <host desc="Regex pattern of hostname to allow or deny." allow="true">172\.3[01]\.[0-9]{1,3}\.[0-9]{1,3}</host>
            <host desc="Regex pattern of hostname to allow or deny." allow="true">192\.168\.[0-9]{1,3}\.[0-9]{1,3}</host>
            <host desc="Regex pattern of hostname to allow or deny." allow="false">192\.168\.1\.1</host>
            <max_file_size desc="Maximum document size in bytes to load. 0 for unlimited." type="uint">0</max_file_size>
        </wopi>
        <webdav desc="Allow/deny webdav storage. Mutually exclusive with wopi." allow="false">
            <host desc="Hostname to allow" allow="false">hodeia\.niredomeinua\.eus</host>
        </webdav>
    </storage>

LOG aktibatu

Arazoren bat agertzen denean LOGean begiratu nahi izaten dugu, baina horretarako lehenik eta behin LOGa aktibatu egin behar da

# touch /var/log/loolwsd.log
# chmod 777 /var/log/loolwsd.log

Berriro ere /etc/loolwsd/loolwsd.xml editatu, eta logging atala aktibatu

    <logging>
        <color type="bool">true</color>
        <level type="string" desc="Can be 0-8, or none (turns off logging), fatal, critical, error, warning, notice, information, debug, trace" default="warning">warning</level>
        <file enable="true">
            <property name="path" desc="Log file path.">/var/log/loolwsd.log</property>
 
 

Aldaketak aplikatu

Aldaketa hauek egin ondoren, LOOL zerbitzua berrabiarazi beharko genuke

# systemctl daemon-reload && systemctl restart loolwsd.service

Administrazio kontsola

LOOL zerbitzuak administrazio kontsola eskaintzen digu. Web kontsola honetan hainbat datu ikusi ahal izango ditugu, besteak beste

  • Une horretan irekitako dokumentuak eta konektatutako erabiltzaileak
  • Sistemaren karga
  • Memoria, CPU eta sarearen erabilera azaltzen dizkiguten grafiko batzuk

Administrazio kontsola honetara konektatzeko erabiliko ditugun erabiltzaile eta pasahitza definitzeko  /lib/systemd/system/loolwsd.service fitxategia editatuko dugu

[Unit]
Description=LibreOffice OnLine WebSocket Daemon
After=network.target

[Service]
EnvironmentFile=-/etc/sysconfig/loolwsd
ExecStartPre=/bin/mkdir -p /usr/local/var/cache/loolwsd
ExecStartPre=/bin/chown lool: /usr/local/var/cache/loolwsd
PermissionsStartOnly=true
ExecStart=/opt/online/loolwsd --o:sys_template_path=/opt/online/systemplate --o:lo_template_path=/opt/libreoffice/instdir  --o:child_root_path=/opt/online/jails --o:admin_console.username=NIRESUPERADMIN --o:admin_console.password="NIRESUPERPASAHITZA"
User=lool
KillMode=control-group
# Restart=always

[Install]
WantedBy=multi-user.target

Kontsolara konektatzeko helbide hau erabiliko dugu:

https://office02.niredomeinua.eus/loleaflet/dist/admin/adminAnalytics.html

 

Eta honekin, prest izango genuke LibreOfficeOnline gure Nextcloud zerbitzariarekin lan egiteko konfiguratuta !! Ez zen hain zaila ezta ?   ;-)

Eguneraketak aplikatzerakoan

LibreOffice-online zerbitzurako makina birtual bat erabiltzen dugu. Noizbehinka eguneraketak publikatuko dira, eta berriagoak diren bertsioak instalatu nahi izango ditugu.

Hau nola egiten da ? Ba LibreOffice-Online zerbitzarian berriro ere officeonline-install.sh exekutatuz, hasieran egin genuen moduan. Scritp honek software berria deskargatu eta berriro ere konpilatuko du.

Lan hau ez da azkarra, hasieran gertatu zitzaigun moduan, eguneraketak konpilatzeko ordu dexente beharko ditu, beraz ez da ideia on bat produkzioan dugun LibreOffice-Online konpilatzea.

Guk trikimailu hau erabiltzen dugu. Hasierako instalazioa bukatu dugunean eta badakigunean dena ondo dagoela, produkzioan dugun makina birtualaren backup bat egin, eta backup horretan oinarrituta beste zerbitzari bat sortzen dugu. Bigarren zerbitzari hau erabiliko dugu bertsio berriak konpilatzeko, eta honela produkzioan dagoenari ez diogu lanik ematen.

Akatsen bat gertatzen bada, ez dugu lehendik genuen LibreOffice-Online izorratzen. Dena ondo badoa, produkzioan zegoen VM-aren IPa jarri berriari eta kitto, berria produkzioan dugu.