Nextcloud amb Collabora Online

Cicle formatiu: CFGS Administració de Sistemes Informàtics en Xarxa (ASIX)

Mòdul: 0376 - Implantació d’aplicacions web

Sistema operatiu: Ubuntu Server 26.04 LTS

Aquest document explica com instal·lar un servidor Nextcloud —una plataforma de núvol privat per emmagatzemar i compartir fitxers— integrat amb Collabora Online (CODE), un servidor d’edició ofimàtica col·laborativa que permet obrir i editar documents de text, fulls de càlcul i presentacions directament des del navegador, sense necessitat d’instal·lar cap programa al client.

Nextcloud logo
Collabora Online logo

Es parteix d’una màquina amb Ubuntu Server ja instal·lat (es recomana una versió LTS recent: 24.04 o 26.04), amb accés a una consola amb privilegis root o sudo, i connexió a Internet. La instal·lació es farà mitjançant paquets apt, sense recórrer a Docker ni a contenidors.

1. Arquitectura del sistema

Abans d’entrar en matèria, és útil tenir clar com s’encaixen les peces que es muntaran:

Amb aquesta visió general, es pot seguir cada pas entenent on s’encaixa dins del conjunt.

2. Requisits previs

📌
Important

Substitueix el nom de domini, les contrasenyes i les dades de l’organització que apareixen en aquest document pels valors propis del teu entorn.

2.1. Modifica el fitxer /etc/hosts

sudo nano /etc/hosts
127.0.0.1 localhost
127.0.1.1 nextcloud.thos.local server

3. Afegeix el dipòsit de paquets de Collabora Online

Collabora Online no es distribueix als dipòsits oficials d’Ubuntu, de manera que cal afegir manualment el dipòsit del projecte i la seva clau de signatura, seguint el mateix mecanisme que apt utilitza per a qualsevol dipòsit extern.

3.1. Carpeta de claus (keyrings)

Les versions modernes de apt recomanen desar les claus GPG de tercers a /etc/apt/keyrings/ en lloc d’afegir-les directament al clauer del sistema (el vell apt-key ja està en desús).

Crea la carpeta de claus:

sudo mkdir -p /etc/apt/keyrings

Desplaça’t a la carpeta creada:

cd /etc/apt/keyrings

3.2. Descarrega la clau pública

sudo wget -O collaboraonline-release-keyring.gpg https://collaboraoffice.com/downloads/gpg/collaboraonline-release-keyring.gpg

Aquesta clau permetrà a apt verificar que els paquets descarregats del dipòsit de Collabora estan signats pel projecte original i no han estat manipulats.

3.3. Defineix el dipòsit

sudo tee /etc/apt/sources.list.d/collaboraonline.sources > /dev/null << 'EOF'
Types: deb
URIs: https://www.collaboraoffice.com/repos/CollaboraOnline/CODE-deb
Suites: ./
Signed-By: /etc/apt/keyrings/collaboraonline-release-keyring.gpg
EOF

Aquest fitxer utilitza el format .sources (DEB822), el format estructurat que ha anat substituint l’antic format d’una sola línia als fitxers .list. Cada camp té un significat concret:

4. Actualitza el sistema

Amb el nou dipòsit afegit, cal actualitzar la llista de paquets disponibles (que ara inclou també els de Collabora) i aplicar les actualitzacions pendents del sistema.

Actualitza la llista de paquets:

sudo apt update

Actualitza els paquets:

sudo apt upgrade

5. Instal·la els paquets necessaris

Tota la pila de programari es pot instal·lar amb una sola ordre:

sudo apt install apache2 libapache2-mod-php mariadb-server php php-apcu \
  php-bcmath php-bz2 php-curl php-gd php-gmp php-imagick php-intl \
  php-ldap php-mbstring php-mysql php-xml php-zip unzip coolwsd code-brand

Nota sobre versions de PHP: a Ubuntu, el paquet php instal·la automàticament la versió de PHP inclosa al dipòsit de la distribució. Si es necessita una versió concreta diferent de la que ve per defecte, es pot afegir el dipòsit PPA ondrej/php i especificar el número de versió a cada paquet (per exemple, php8.3-curl).

Val la pena entendre per a què serveix cada bloc:

Servidor web i PHP

Extensions de PHP requerides per Nextcloud

Nextcloud necessita diverses extensions de PHP per funcionar correctament; cadascuna habilita una funcionalitat concreta:

Base de dades

Collabora Online

Utilitats

6. Descarrega i verifica la integritat de Nextcloud

6.1. Descarrega

Mou-te a la carpeta temporal:

cd /tmp

Descarrega l’última versió de Nextcloud:

wget -c https://download.nextcloud.com/server/releases/latest.zip

Descarrega el fitxer de comprovació de sumes:

wget -c https://download.nextcloud.com/server/releases/latest.zip.sha256

L’URL latest.zip sempre apunta a l’última versió estable publicada, de manera que aquest mateix procediment funcionarà igual d’aquí a un any, descarregant la versió vigent en aquell moment.

6.2. Per què verificar la suma de comprovació

Quan es descarrega programari per Internet, sempre hi ha el risc de descàrregues incompletes (per talls de connexió) o, en casos més greus, de manipulació malintencionada del fitxer. Verificar la suma SHA256 permet detectar-ho:

sha256sum latest.zip | sha256sum -c

Sortida esperada:

latest.zip: OK

Si la suma calculada coincideix amb la publicada per Nextcloud, l’ordre mostrarà latest.zip: OK. Si no coincideix, cal aturar-se aquí i tornar a descarregar el fitxer abans de continuar; no s’ha de desplegar un paquet que no hagi passat aquesta verificació.

7. Desplega els fitxers al directori web

sudo unzip latest.zip -d /var/www

Aquesta ordre descomprimeix el contingut a /var/www/nextcloud/, que serà l’arrel del codi de l’aplicació.

7.1. Permisos i propietat

Canvia el propietari:

sudo chown -R www-data:www-data /var/www/nextcloud

Canvia els permisos:

sudo chmod -R 755 /var/www/nextcloud/

L’usuari www-data és el compte amb el qual s’executa el procés d’Apache (i, per tant, els scripts PHP). Cal que aquest usuari sigui propietari dels fitxers de Nextcloud perquè pugui llegir-los i, sobretot, escriure’ls (Nextcloud actualitza fitxers de configuració i en crea de nous dinàmicament, com el directori data o config.php).

El permís 755 (lectura i execució per a tothom, escriptura només per al propietari) és un punt de partida raonable, encara que durant el funcionament normal Nextcloud pot necessitar ajustar permisos de subdirectoris concrets (típicament ho gestiona el mateix script occ de manteniment).

7.2. Carpeta de dades

Crea la carpeta de dades:

sudo mkdir /var/dadesnuvol

Canvia el propietari de la carpeta de dades:

sudo chown -R www-data:www-data /var/dadesnuvol

Es crea una carpeta fora de l’arrel del codi (/var/www/nextcloud) per emmagatzemar-hi els fitxers reals dels usuaris. Separar el codi de les dades és una bona pràctica per diversos motius: facilita les actualitzacions de Nextcloud sense afectar les dades, simplifica les còpies de seguretat, i evita que els fitxers d’usuari quedin accessibles directament des de l’arrel web si en algun moment es canvia la configuració d’Apache.

7.3. Esborra els fitxers descarregats

sudo rm latest.zip latest.zip.sha256

Torna al teu home:

cd

8. Ajusta els paràmetres de PHP

Els valors per defecte de PHP a Ubuntu són conservadors i insuficients per a un ús normal de Nextcloud (pujar fotos, vídeos o fer còpies de seguretat des del client d’escriptori, per exemple). Cal localitzar el fitxer php.ini que utilitza Apache (la ruta depèn de la versió de PHP instal·lada, per exemple /etc/php/8.5/apache2/php.ini) i editar-hi els paràmetres següents:

Edita el fitxer /etc/php/8.5/apache2/php.ini:

sudo nano -l /etc/php/8.5/apache2/php.ini

Modifica la línia 430:

memory_limit = 512M

Modifica la línia 693:

post_max_size = 200M

Modifica la línia 851:

upload_max_filesize = 200M

Modifica la línia 854:

max_file_uploads = 200

Modifica la línia 964:

date.timezone = Europe/Madrid

Modifica la línia 1693:

opcache.interned_strings_buffer=16

Cada paràmetre té un propòsit concret:

Desactiva el JIT a PHP:

sudo nano -l /etc/php/8.5/cli/php.ini

Modifica la línia 1043:

pcre.jit=0

9. Crea la base de dades

Nextcloud necessita una base de dades pròpia (en aquest cas, MariaDB) i un usuari amb permisos exclusius sobre ella, seguint el principi de mínim privilegi (l’usuari de Nextcloud no hauria de tenir accés a altres bases de dades del servidor).

sudo mysql -u root << 'EOF'
CREATE DATABASE nextcloud;
GRANT ALL PRIVILEGES ON nextcloud.* TO 'usuari'@'localhost' IDENTIFIED BY 'contrasenya';
FLUSH PRIVILEGES;
EOF

Les tres instruccions SQL fan, respectivament:

  1. CREATE DATABASE nextcloud: crea una base de dades buida anomenada nextcloud.
  2. GRANT ALL PRIVILEGES ... IDENTIFIED BY 'contrasenya': crea l’usuari usuari (si no existeix) amb la contrasenya indicada, i li atorga tots els privilegis, però només sobre la base de dades nextcloud (no sobre cap altra) i només des de connexions locals (@'localhost').
  3. FLUSH PRIVILEGES: força MariaDB a recarregar la taula de privilegis immediatament.
📌
Important

La contrasenya 'contrasenya' és només un exemple. Cal substituir-la per una contrasenya forta abans d’executar l’ordre, ja que aquestes credencials s’introduiran posteriorment a l’assistent d’instal·lació web de Nextcloud i donen accés complet a totes les dades de l’aplicació.

10. Genera certificats SSL autosignats

HTTPS és imprescindible en qualsevol desplegament de Nextcloud, ja que les credencials d’accés i els fitxers viatgen per la xarxa. Quan no es disposa (encara) d’un certificat emès per una autoritat de certificació reconeguda, es pot generar un certificat autosignat: xifra igualment la connexió, però el navegador no pot verificar automàticament la identitat del servidor i mostrarà un avís de seguretat que l’usuari haurà d’acceptar manualment.

10.1. Certificat per a Nextcloud (Apache)

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout /etc/ssl/private/nextcloud.key \
  -out /etc/ssl/certs/nextcloud.crt \
  -subj "/C=ES/ST=Catalunya/L=Mataro/O=IES Thos i Codina/OU=Informatica/CN=nextcloud.thos.local"

Desglossant les opcions:

10.2. Certificat per a Collabora Online

Collabora utilitza el seu propi parell de certificats, independent del d’Apache:

sudo openssl genrsa -out /etc/coolwsd/privatekey.pem 4096
sudo openssl req -batch -new -x509 -sha512 -days 3650 \
    -key /etc/coolwsd/privatekey.pem -out /etc/coolwsd/fullchain.pem \
    -subj "/C=ES/ST=Catalunya/L=Mataro/O=IES Thos i Codina/OU=Informatica/CN=nextcloud.thos.local"

Aquí es genera primer una clau RSA de 4096 bits i després el certificat autosignat associat, amb una validesa de 10 anys (-days 3650) i l’opció -batch, que evita preguntes interactives utilitzant valors per defecte.

📌
Important

Cal indicar explícitament el -subj amb un CN (Common Name) coincident amb el domini (nextcloud.thos.local), igual que es va fer amb el certificat d’Apache. Un certificat generat sense -subj no té cap Common Name, i Nextcloud/el navegador no podran ni tan sols llegir-ne el nom en intentar validar-lo (error típic: SSL: unable to obtain common name from peer certificate).

Canvia el propietari:

sudo chown cool:cool /etc/coolwsd/privatekey.pem /etc/coolwsd/fullchain.pem

Canvia els permisos:

sudo chmod 640 /etc/coolwsd/privatekey.pem

I es configura coolwsd perquè utilitzi aquests fitxers mitjançant la seva eina de configuració:

sudo coolconfig set ssl.cert_file_path /etc/coolwsd/fullchain.pem
sudo coolconfig set ssl.key_file_path /etc/coolwsd/privatekey.pem
💡
Nota

coolconfig és una utilitat que modifica el fitxer de configuració XML de coolwsd (/etc/coolwsd/coolwsd.xml) sense necessitat d’editar-lo manualment.

📌
Important

El paquet coolwsd porta per defecte el camp ca_file_path apuntant a /etc/coolwsd/ca-chain.cert.pem, un fitxer que no existeix en aquest tipus de desplegament (no s’utilitza cap CA externa, ja que el certificat és autosignat). Si no es corregeix, el servei falla en arrencar amb l’error Failed to initialize COOLWSD: File not found: /etc/coolwsd/ca-chain.cert.pem al journalctl, i mai arriba a escoltar al port 9980. Comprova el valor actual:

sudo grep -A1 -B1 "ca_file_path" /etc/coolwsd/coolwsd.xml

Si mostra aquesta ruta inexistent, buida el camp perquè quedi com a etiqueta autotancada (el valor correcte per a un certificat autosignat, igual que en el cas anterior):

sudo sed -i 's|<ca_file_path desc="Path to the ca file" relative="false" type="path">/etc/coolwsd/ca-chain.cert.pem</ca_file_path>|<ca_file_path desc="Path to the ca file" relative="false" type="path"/>|' /etc/coolwsd/coolwsd.xml

11. Configura els VirtualHosts d’Apache

11.1. Crea el VirtualHost SSL

sudo tee /etc/apache2/sites-available/nextcloud-ssl.conf > /dev/null << 'EOF'
<VirtualHost *:443>
        ServerAdmin webmaster@localhost
        ServerName nextcloud.thos.local
        DocumentRoot /var/www/nextcloud

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

        SSLEngine on

        SSLCertificateFile /etc/ssl/certs/nextcloud.crt
        SSLCertificateKeyFile /etc/ssl/private/nextcloud.key
        
        Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"

        <FilesMatch "\.(?:cgi|shtml|phtml|php)$">
                SSLOptions +StdEnvVars
        </FilesMatch>
        
        <Directory /usr/lib/cgi-bin>
                SSLOptions +StdEnvVars
        </Directory>
        
        <Directory /var/www/nextcloud/>
            Options +FollowSymlinks
            AllowOverride All
            Require all granted
            <IfModule mod_dav.c>
                Dav off
            </IfModule>
        </Directory>        
</VirtualHost>
EOF

11.2. Redirecció automàtica de HTTP a HTTPS

Per evitar que algú accedeixi accidentalment (o intencionadament) per HTTP sense xifrar, es defineix un segon VirtualHost al port 80 que redirigeix totes les peticions cap a la versió HTTPS:

sudo tee /etc/apache2/sites-available/nextcloud.conf > /dev/null << 'EOF'
<VirtualHost *:80>
    ServerName nextcloud.thos.local
    Redirect permanent / https://nextcloud.thos.local/
</VirtualHost>
EOF

La directiva Redirect permanent envia un codi d’estat HTTP 301 (redirecció permanent), de manera que els navegadors recordin la redirecció.

11.4. Habilita mòduls d’Apache

sudo a2enmod rewrite headers env dir mime ssl

Aquests mòduls són necessaris perquè Nextcloud funcioni correctament:

11.5. Activa els llocs

sudo a2ensite nextcloud.conf nextcloud-ssl.conf

a2ensite crea els enllaços simbòlics necessaris a /etc/apache2/sites-enabled/ perquè Apache carregui aquestes configuracions en arrencar (de manera anàloga a com a2enmod activa els mòduls).

12. Reinicia serveis i fes ajustos finals de permisos

12.1. MariaDB

sudo systemctl restart mariadb.service

12.2. Permisos de Collabora

sudo chown -R cool:cool /etc/coolwsd/

El paquet coolwsd crea un usuari de sistema dedicat (cool) per executar el dimoni amb privilegis reduïts, seguint el principi de mínim privilegi: si el procés de Collabora és comprès per algun atac, l’atacant no obté privilegis d’administrador del sistema. Cal que aquest usuari sigui propietari dels seus propis fitxers de configuració (inclosos els certificats generats al punt 10.2) per poder-los llegir en arrencar.

12.3. Contrasenya d’administració de Collabora

sudo coolconfig set-admin-password

Aquesta ordre és interactiva: demanarà un nom d’usuari i una contrasenya, que s’utilitzaran per accedir al panell d’administració web de Collabora Online (independent del panell d’administració de Nextcloud).

Enter admin username [admin]:
Enter admin password: 
Confirm admin password: 
Saving configuration to : /etc/coolwsd/coolwsd.xml ...
Saved

12.4. Crea un override per al servei Apache2

sudo systemctl edit apache2.service

Afegeix aquestes línies:

[Service]
ReadWritePaths=/var/dadesnuvol
ReadWritePaths=/var/www/nextcloud/config
MemoryDenyWriteExecute=no

12.5. Reinicia els dimonis principals

Reinicia Collabora:

sudo systemctl restart coolwsd.service

Reinicia Apache:

sudo systemctl restart apache2.service

Cal reiniciar tots dos serveis perquè recullin tots els canvis de configuració fets fins ara (certificats, vHosts, paràmetres de PHP, etc.).

13. Resolució de noms al client (/etc/hosts)

Perquè el navegador del client pugui localitzar el servidor pel nom nextcloud.thos.local (en lloc de fer-ho per IP), cal que aquest nom es resolgui a alguna adreça. En un entorn de producció això es faria amb un servidor DNS (intern o públic), però per a proves locals n’hi ha prou amb afegir una entrada al fitxer /etc/hosts, que el sistema consulta abans de fer cap consulta DNS:

echo "192.168.1.10 nextcloud.thos.local" | sudo tee -a /etc/hosts
💡
Nota

La IP 192.168.1.10 correspon a la IP del servidor Nextcloud en aquest exemple de configuració. Substitueix-la per la IP del teu servidor.

14. Finalització de la instal·lació des del navegador

Amb tota la part de servidor preparada, cal completar la configuració des de la interfície web:

  1. Accedeix a Nextcloud: obre https://nextcloud.thos.local en un navegador. Com que el certificat és autosignat, el navegador mostrarà un avís de seguretat (normalment cal clicar “Avançat” i després “Accepto el risc i vull continuar” o similar, segons el navegador).

    Avís de seguretat

    Accepta el risc
  2. Assistent d’instal·lació de Nextcloud: en accedir per primera vegada, Nextcloud mostra un formulari per crear el primer compte d’administrador i configurar la connexió a la base de dades:

    Compte d’administrador i informació de la base de dades
  3. Aplicacions recomanades: Nextcloud et suggereix d’instal·lar algunes aplicacions recomanades. Et demanarà diverses vegades la contrasenya d’administrador.

    Aplicacions recomanades
    💡
    Nota

    És conegut que l’última versió estable, 34.0.2 a la data d’edició d’aquest document, conté un bug conegut. Et demanarà diverses vegades la contrasenya d’administrador.

    Fitxers de l’usuari

15. Configura Collabora Online dins de Nextcloud

Un cop dins de Nextcloud com a administrador, cal vincular l’aplicació amb el servidor de Collabora que s’ha instal·lat. Aquest pas és el que permet que, en obrir un document de text, full de càlcul o presentació, Nextcloud sàpiga a qui ha de demanar que el renderitzi.

15.1. Accepta el risc del certificat autosignat

Des del navegador accedeix a l’URL del servidor de Collabora i accepta el risc de seguretat.

https://nextcloud.thos.local:9980

15.2. Configura l’adreça del servidor

  1. Ves als Paràmetres d’administració.

    Paràmetres d’administració
  2. Tria Nextcloud Office (Collabora).

    Nextcloud Office (Collabora)
  3. Tria Utilitza el teu propi servidor i introdueix l’URL del servidor Collabora instal·lat:

    https://nextcloud.thos.local:9980
URL del servidor Collabora

15.3. Paràmetres avançats

Just sota la configuració del servidor, el mateix panell Oficina Nextcloud mostra un bloc de Paràmetres avançats amb diverses opcions addicionals. No són obligatòries per fer funcionar la integració bàsica, però val la pena conèixer-les:

Per defecte sol aparèixer el valor 0.0.0.0/0, que vol dir “qualsevol adreça IPv4” (és a dir, sense restricció). Aquest valor és còmode per fer proves ràpides, però en un entorn real convé restringir-lo a la IP (o xarxa) concreta del servidor on s’executa coolwsd, per exemple 192.168.1.0/24 si Collabora corre en una màquina amb aquesta xarxa, o 127.0.0.1/32 si Collabora i Nextcloud comparteixen el mateix servidor i només s’hi accedeix en local. Es poden indicar diversos valors separats per comes. Restringir aquesta llista evita que un tercer pugui suplantar el servidor de Collabora i fer-se passar per ell per llegir o manipular documents dels usuaris.

Un cop modificat el valor, cal clicar el botó Desa que apareix al costat mateix del camp (és un botó independent de la resta del formulari).

Paràmetres avançats

15.4. Resolució de problemes habituals

Com que tant Nextcloud com Collabora utilitzen certificats autosignats (generats a la secció 10), és freqüent topar amb errors de verificació de certificat en aquest punt. Algunes situacions habituals:

15.5. Verificar la integració

  1. Ves a Fitxers.

  2. Clica al botó + Nou i selecciona, per exemple, Document.

    Nou document
  3. Si la integració és correcta, el document s’obrirà directament al navegador amb l’editor de Collabora (interfície similar a LibreOffice Writer), sense necessitat de descarregar cap fitxer ni instal·lar cap programa addicional.

    Document en blanc

    Versió de Collabora

16. Consola d’administració de Collabora Online

A banda del panell de Nextcloud, Collabora Online disposa d’una consola d’administració pròpia per supervisar documents oberts i sessions actives:

https://<IP_SERVER>:9980/browser/dist/admin/admin.html

S’hi accedeix amb les credencials definides a la secció 12.3 (coolconfig set-admin-password).

Consola d’administració de Collabora

17. Millores del rendiment

sudo -u www-data php /var/www/nextcloud/occ db:add-missing-indices
sudo -u www-data php /var/www/nextcloud/occ maintenance:repair --include-expensive
sudo -u www-data php /var/www/nextcloud/occ config:system:set maintenance_window_start --type=integer --value=1
sudo -u www-data php /var/www/nextcloud/occ config:system:set allow_local_remote_servers --type=bool --value=true
sudo -u www-data php /var/www/nextcloud/occ config:system:set default_phone_region --value="ES"
sudo -u www-data php /var/www/nextcloud/occ config:system:set memcache.local --value='\OC\Memcache\APCu'
sudo -u www-data php /var/www/nextcloud/occ config:system:set filelocking.enabled --value=true
sudo -u www-data php /var/www/nextcloud/occ config:system:set memcache.locking --value='\OC\Memcache\APCu'
sudo systemctl restart apache2.service

Canvia a cron del sistema, que és l’opció recomanada per Nextcloud en producció:

Afegeix una entrada de crontab per a www-data:

sudo crontab -u www-data -e
*/5 * * * * php -f /var/www/nextcloud/cron.php

A Nextcloud, com a usuari administrador ves a Paràmetres d’administracióParàmetres BàsicsTasques de fons i selecciona Cron en lloc d’AJAX.

Cron per a les tasques de fons

Consideracions de seguretat i bones pràctiques

Versions d’aquest document

Domini Públic (CC0)