# 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](https://proferamon.com/tic/imatges/nextcloud/nextcloud01.png)

![Collabora Online logo](https://proferamon.com/tic/imatges/nextcloud/nextcloud02.png)

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:

- **Apache2**: servidor web que atén les peticions HTTP/HTTPS i serveix l'aplicació Nextcloud (escrita en PHP).
- **PHP**: llenguatge en què està programat Nextcloud; Apache delega l'execució del codi PHP a l'intèrpret instal·lat.
- **MariaDB**: sistema de gestió de bases de dades on Nextcloud desa metadades (usuaris, permisos, estructura de carpetes, etc.). Els fitxers en si es desen al sistema de fitxers, no a la base de dades.
- **Collabora Online (coolwsd)**: dimoni independent que s'executa en el mateix servidor (o en un altre) i que Nextcloud invoca quan un usuari vol editar un document ofimàtic. Es comunica amb Nextcloud mitjançant una API pròpia (WOPI) sobre HTTPS.
- **Certificats SSL**: tant Apache com Collabora necessiten xifrar les seves comunicacions; per això es generaran certificats autosignats per a totes dues bandes.

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

# 2. Requisits previs

- Ubuntu Server ja instal·lat i actualitzat, amb accés `root` o `sudo`.
- Connexió a Internet activa.
- Un nom de domini o nom de host que es vulgui utilitzar per accedir a Nextcloud. En aquest document s'utilitzarà, com a exemple, `nextcloud.thos.local`, pensat per a proves en una xarxa local.
- Coneixements bàsics de Linux: edició de fitxers de text, gestió de paquets amb `apt`, gestió de serveis amb `systemctl`.

> [!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.

# 3. Afegir 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):

```bash
sudo mkdir -p /etc/apt/keyrings
cd /etc/apt/keyrings
```

## 3.2. Descàrrega de la clau pública

```bash
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. Definició del dipòsit

```bash
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:

- `Types: deb` indica que es tracta de paquets binaris.
- `URIs` apunta a la ubicació del dipòsit.
- `Suites: ./` indica que els paquets es troben directament a l'arrel de l'URL (no organitzats per "distribucions" com a Debian/Ubuntu oficial).
- `Signed-By` apunta a la clau que ha de validar la signatura dels paquets.

# 4. Actualització del 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:

```bash
sudo apt update
sudo apt upgrade
```

# 5. Instal·lació dels paquets necessaris

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

```bash
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**

- `apache2`: el servidor web.
- `libapache2-mod-php`: mòdul que permet a Apache executar codi PHP directament (en lloc de necessitar PHP-FPM com a procés separat).
- `php`: l'intèrpret de PHP.

**Extensions de PHP requerides per Nextcloud**

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

- `php-gd` i `php-imagick`: generació de miniatures d'imatges.
- `php-curl`: comunicació HTTP amb serveis externs (per exemple, amb el mateix Collabora).
- `php-mysql`: connexió amb la base de dades MariaDB/MySQL.
- `php-ldap`: integració amb directoris LDAP per a autenticació centralitzada.
- `php-mbstring` i `php-xml`: processament de text i XML.
- `php-zip`: gestió de fitxers comprimits (necessari per a l'app store de Nextcloud).
- `php-apcu`: sistema de memòria cau que millora significativament el rendiment de Nextcloud.
- `php-bcmath` i `php-gmp`: operacions matemàtiques de precisió arbitrària, usades per algunes funcions de xifratge.
- `php-bz2` i `php-intl`: compressió i internacionalització.

**Base de dades**

- `mariadb-server`: el motor de base de dades on Nextcloud desarà totes les seves metadades.

**Collabora Online**

- `coolwsd`: el dimoni (*Collabora Online WebSocket Daemon*) que renderitza i gestiona l'edició dels documents.
- `code-brand`: el paquet amb la interfície i marca de la versió comunitària (*Collabora Online Development Edition*).

**Utilitats**

- `unzip`: necessari per descomprimir el paquet de Nextcloud, que es distribueix en format `.zip`.

# 6. Descàrrega i verificació de la integritat de Nextcloud

## 6.1. Descàrrega

```bash
cd /tmp
wget https://download.nextcloud.com/server/releases/latest.zip
wget 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:

```bash
sha256sum latest.zip | sha256sum -c
```

```ini
ramon@server:/tmp$ sha256sum latest.zip | sha256sum -c
latest.zip: OK
ramon@server:/tmp$ 
```

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. Desplegament dels fitxers al directori web

```bash
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

```bash
sudo chown -R www-data:www-data /var/www/nextcloud
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

```bash
sudo mkdir /var/dadesnuvol
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.

# 8. Ajust dels 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.3/apache2/php.ini`) i editar-hi els paràmetres següents:

```bash
sudo sed -i 's/memory_limit = .*/memory_limit = 512M/' /etc/php/*/apache2/php.ini
sudo sed -i 's/upload_max_filesize = .*/upload_max_filesize = 200M/' /etc/php/*/apache2/php.ini
sudo sed -i 's/post_max_size = .*/post_max_size = 200M/' /etc/php/*/apache2/php.ini
sudo sed -i 's/max_file_uploads = .*/max_file_uploads = 200/' /etc/php/*/apache2/php.ini
sudo sed -i "s/;date.timezone =/date.timezone = Europe\/Madrid/" /etc/php/*/apache2/php.ini
```

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

- **`memory_limit`**: la quantitat màxima de memòria RAM que un sol script PHP pot consumir. Nextcloud recomana com a mínim 512 MB, especialment si s'utilitzen apps addicionals (com el reconeixement facial o l'escaneig de virus).
- **`upload_max_filesize`**: la mida màxima d'un fitxer individual que es pot pujar en una sola petició HTTP. Sense augmentar-ho, no es podrien pujar fitxers grans (vídeos, arxius comprimits, etc.).
- **`post_max_size`**: la mida màxima total d'una petició HTTP de tipus POST (ha de ser igual o superior a `upload_max_filesize`, ja que la pujada de fitxers es fa per aquest mètode).
- **`max_file_uploads`**: el nombre màxim de fitxers que es poden pujar en una sola petició (rellevant quan es pugen carpetes senceres amb molts fitxers petits).
- **`date.timezone`**: la zona horària per defecte de PHP; si no es configura, PHP genera avisos i pot mostrar hores incorrectes als registres i a la interfície.

**Atenció amb `sed` i les barres (`/`)**: quan el valor que es vol inserir conté una barra (com `Europe/Madrid`), cal escapar-la (`Europe\/Madrid`) perquè `sed` no la confongui amb el delimitador de fi de l'expressió.

# 9. Creació de 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).

```bash
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. Generació de 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)

```bash
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
    -keyout /etc/ssl/private/nextcloud-certificat-autosignat.key \
    -out /etc/ssl/certs/nextcloud-certificat-autosignat.crt \
    -subj "/C=ES/ST=Barcelona/L=Mataró/O=IES Thos i Codina/OU=IT/CN=nextcloud.thos.local/emailAddress=admin@thos.local"
```

Desglossant les opcions:

- `-x509`: genera directament un certificat autosignat (en lloc d'una sol·licitud de certificat, CSR, que caldria enviar a una CA).
- `-nodes`: la clau privada no es xifra amb cap contrasenya (necessari perquè Apache la pugui carregar automàticament en arrencar, sense intervenció humana).
- `-days 365`: validesa d'un any.
- `-newkey rsa:2048`: genera alhora una nova clau privada RSA de 2048 bits.
- `-subj "..."`: proporciona totes les dades del certificat (país, província, localitat, organització, unitat organitzativa, *Common Name* —que ha de coincidir amb el nom de domini— i correu electrònic) directament a l'ordre, evitant que `openssl` les demani de forma interactiva.

## 10.2. Certificat per a Collabora Online

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

```bash
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
```

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.

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

```bash
sudo coolconfig set ssl.cert_file_path /etc/coolwsd/fullchain.pem
sudo coolconfig set ssl.key_file_path /etc/coolwsd/privatekey.pem
sudo coolconfig set ssl.ca_file_path ''
```

`coolconfig` és una utilitat que modifica el fitxer de configuració XML de `coolwsd` (`/etc/coolwsd/coolwsd.xml`) sense necessitat d'editar-lo manualment. El tercer paràmetre (`ca_file_path` buit) indica que no s'utilitza una cadena de certificació d'una CA externa, coherent amb l'ús d'un certificat autosignat.

# 11. Configuració dels vHosts d'Apache

## 11.1. Punt de partida: el vHost SSL predeterminat

Ubuntu inclou, per defecte, una plantilla de configuració per a llocs amb SSL activat. En lloc de partir de zero, és més senzill copiar-la i adaptar-la:

```bash
sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/nextcloud-ssl.conf
```

## 11.2. Adaptació del vHost a Nextcloud

Cal editar el fitxer `nextcloud-ssl.conf` (per exemple, amb `nano`) per fer-hi els canvis següents:

1. Afegir, just després de l'etiqueta `<VirtualHost _default_:443>`, la línia:

   ```apache
   ServerName nextcloud.thos.local
   ```

2. Canviar la ruta `DocumentRoot /var/www/html` per:

   ```apache
   DocumentRoot /var/www/nextcloud
   ```

3. Substituir les rutes dels certificats per defecte:

   ```apache
   SSLCertificateFile /etc/ssl/certs/nextcloud-certificat-autosignat.crt
   SSLCertificateKeyFile /etc/ssl/private/nextcloud-certificat-autosignat.key
   ```

També es pot fer de forma automatitzada amb `sed`, per exemple:

```bash
sudo sed -i '/VirtualHost _default_:443/a\\tServerName nextcloud.thos.local' /etc/apache2/sites-available/nextcloud-ssl.conf
sudo sed -i 's#/var/www/html#/var/www/nextcloud#' /etc/apache2/sites-available/nextcloud-ssl.conf
sudo sed -i 's#ssl-cert-snakeoil.pem#nextcloud-certificat-autosignat.crt#' /etc/apache2/sites-available/nextcloud-ssl.conf
sudo sed -i 's#ssl-cert-snakeoil.key#nextcloud-certificat-autosignat.key#' /etc/apache2/sites-available/nextcloud-ssl.conf
```

Què fa cada canvi:

1. Indica a Apache amb quin nom de domini ha de respondre aquest vHost concret (rellevant si el servidor allotja més d'un lloc web).
2. Substitueix la ruta per defecte `/var/www/html` per `/var/www/nextcloud`, fent que Apache serveixi els fitxers de Nextcloud en lloc de la pàgina de benvinguda per defecte.
3. Substitueix les referències als certificats `snakeoil` (els certificats autosignats genèrics que Ubuntu genera automàticament en instal·lar Apache, pensats només per a proves immediates) pels certificats propis generats al [punt 10.1](#certificat-per-a-nextcloud-apache).

## 11.3. Redirecció automàtica de HTTP a HTTPS

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

```bash
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. Habilitació de mòduls d'Apache

```bash
sudo a2enmod rewrite headers env dir mime ssl
```

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

- **`rewrite`**: permet reescriure URL, imprescindible per al fitxer `.htaccess` de Nextcloud, que genera enllaços "nets" (sense paràmetres visibles a l'URL).
- **`headers`**: permet afegir capçaleres HTTP de seguretat (com `Strict-Transport-Security`), que Nextcloud recomana i que el seu panell d'administració verifica.
- **`env`**: permet passar variables d'entorn a scripts, usat per algunes configuracions de Nextcloud.
- **`dir`**: gestiona els documents índex per defecte (com `index.php`) quan s'accedeix a una carpeta.
- **`mime`**: determina el tipus de contingut (*Content-Type*) que s'envia segons l'extensió del fitxer.
- **`ssl`**: habilita el suport per a connexions xifrades amb TLS/SSL, imprescindible per a HTTPS.

## 11.5. Activació dels llocs

```bash
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. Reinici de serveis i ajustos finals de permisos

## 12.1. MariaDB

```bash
sudo systemctl restart mariadb.service
```

## 12.2. Permisos de Collabora

```bash
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](#certificat-per-a-collabora-online)) per poder-los llegir en arrencar.

## 12.3. Contrasenya d'administració de Collabora

```bash
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).

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

## 12.4. Reinici dels dimonis principals

```bash
sudo systemctl restart coolwsd.service
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. Neteja de fitxers temporals

```bash
rm /tmp/latest.zip /tmp/latest.zip.sha256
```

Un cop instal·lat tot correctament, els fitxers descarregats ja no fan falta i es poden eliminar per mantenir net el directori de treball.

# 14. 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:

```bash
echo "192.168.1.10 nextcloud.thos.local" | sudo tee -a /etc/hosts
```

> [!NOTE] 
> 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.

# 15. 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. **Accedir a Nextcloud**: obrir `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).

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:
   - Usuari i contrasenya d'administrador de Nextcloud (diferents de les credencials de la base de dades).
   - Carpeta de dades: `/var/dadesnuvol` (creada al [punt 7.2](#carpeta-de-dades)).
   - Base de dades: seleccionar MySQL/MariaDB i indicar l'usuari `usuari`, la contrasenya definida al [punt 9](#creació-de-la-base-de-dades) i el nom de base de dades `nextcloud`.

3. **Configurar Collabora Online dins de Nextcloud**:
   - Anar a **Configuració > Administració > Ofimàtica (Nextcloud Office / Collabora Online)**, sigui des de l'app integrada o, si cal, instal·lant prèviament l'app "Nextcloud Office" des de la botiga d'aplicacions.
   - Indicar com a adreça del servidor de Collabora: `https://<IP_o_nom_del_servidor>:9980`.
   - Si Nextcloud i Collabora utilitzen certificats autosignats diferents, és possible que calgui marcar l'opció per ignorar la verificació del certificat en entorns de prova (no recomanat en producció).

# 16. Configurar 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.

## 16.1. Instal·lar l'app "Oficina Nextcloud"

Per defecte, Nextcloud no porta integrada cap eina d'edició ofimàtica; cal instal·lar-la des de la botiga d'aplicacions:

1. Iniciar sessió com a administrador.
2. Clicar a la icona del compte d'usuari (cantonada superior dreta) i seleccionar **Aplicacions**.
3. A la barra lateral esquerra, anar a la categoria **Oficina i textos** (o cercar directament "Oficina Nextcloud" / "Nextcloud Office" al cercador d'aplicacions).
4. Clicar a **Baixa i habilita** sobre l'app **Oficina Nextcloud**. Aquesta app és el connector que permet a Nextcloud parlar amb un servidor Collabora extern (com el que s'ha instal·lat als punts anteriors), a diferència d'altres opcions que inclouen un Collabora "incrustat" només per a ús personal.

## 16.2. Configurar l'adreça del servidor

Un cop habilitada l'app:

1. Anar a la icona d'engranatge (cantonada superior dreta) i seleccionar **Configuració**.
2. Al menú lateral, dins del bloc **Administració**, clicar a **Oficina Nextcloud**.
3. Es mostrarà un formulari amb diverses opcions; la rellevant en aquest cas és **Utilitza el teu propi servidor** (en contraposició a "Utilitza un servidor CODE-online demo" o a l'opció de servidor incrustat). Cal seleccionar-la i, al camp d'adreça, introduir l'URL del servidor Collabora instal·lat:

   ```
   https://nextcloud.thos.local:9980
   ```

   o bé, si Collabora s'executa en una altra màquina diferent de Nextcloud:

   ```
   https://<IP_o_nom_del_servidor_collabora>:9980
   ```

4. Clicar a **Desa**. Nextcloud farà una comprovació de connexió contra aquesta adreça; si tot és correcte, apareixerà un missatge de confirmació indicant que el servidor respon correctament.

## 16.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:

- **Fes servir Office Open XML (OOXML) en lloc del format OpenDocument (ODF)**: per defecte, Nextcloud crea els documents nous en format obert ODF (`.odt`, `.ods`, `.odp`). Si la majoria d'usuaris treballen amb Microsoft Office o necessiten màxima compatibilitat amb fitxers `.docx`, `.xlsx` i `.pptx`, val la pena activar aquesta casella perquè els documents nous es creïn directament en aquest format.

- **Restringeix l'ús a grups específics**: per defecte, Oficina Nextcloud està disponible per a tots els usuaris del servidor. Activant aquesta opció apareix un selector per triar quins grups concrets hi tindran accés, útil si només es vol oferir l'edició ofimàtica a determinats departaments o cursos.

- **Restringeix l'edició a grups específics**: similar a l'anterior, però més granular: permet que tothom pugui *veure* els documents amb Collabora, però que només els grups seleccionats puguin *editar-los*. Per defecte, qualsevol usuari amb permisos d'edició sobre un fitxer el pot modificar amb Collabora.

- **Fes servir webroot Canònic**: opció pensada per a desplegaments amb una configuració de xarxa més complexa (per exemple, quan Nextcloud s'exposa a través d'un proxy invers amb una ruta diferent de l'arrel). En la majoria d'instal·lacions senzilles com la d'aquest document no cal tocar-la.

- **Activa l'accés a les aplicacions externes**: habilita el mecanisme que permet a Collabora (o a altres apps externes compatibles) integrar-se més profundament amb Nextcloud més enllà de la simple edició de documents. Només cal activar-ho si s'utilitzen extensions o integracions addicionals que ho requereixin explícitament.

- **Allow list for WOPI requests**: aquest és el camp més rellevant des del punt de vista de seguretat. WOPI (*Web Application Open Platform Interface*) és el protocol que Nextcloud i Collabora utilitzen per comunicar-se: Collabora demana a Nextcloud el contingut del fitxer i, quan acaba, li retorna els canvis. Aquest camp defineix **des de quines adreces IP s'accepten aquestes peticions WOPI** cap al servidor Nextcloud.

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).

## 16.4. Resolució de problemes habituals

Com que tant Nextcloud com Collabora utilitzen certificats autosignats (generats al [punt 10](#generació-de-certificats-ssl-autosignats)), és freqüent topar amb errors de verificació de certificat en aquest punt. Algunes situacions habituals:

- **"Could not establish connection to the CODE server" o error similar**: sol indicar que el port 9980 no és accessible des del servidor de Nextcloud (per tallafocs, o perquè `coolwsd` no s'ha arrencat correctament — es pot comprovar amb `sudo systemctl status coolwsd`).
- **Avís relacionat amb el certificat SSL**: a la mateixa pantalla de configuració de l'app "Oficina Nextcloud" sol aparèixer una opció avançada per **desactivar la verificació del certificat** quan s'utilitzen certificats autosignats. És útil per a proves o entorns interns, però **no es recomana en producció**, ja que elimina una capa de protecció contra atacs d'intermediari (*man-in-the-middle*). La solució correcta a llarg termini és substituir els certificats autosignats per certificats vàlids (per exemple, amb Let's Encrypt).
- **El servidor respon, però els documents no s'obren**: convé revisar que el `ServerName` configurat al vHost de Collabora coincideixi amb l'adreça introduïda aquí, i que el tallafocs permeti tràfic WebSocket (no només HTTP normal) cap al port 9980, ja que Collabora utilitza WebSockets per a l'edició en temps real.

## 16.5. Verificar la integració

Per comprovar que tot funciona, des de la mateixa Nextcloud:

1. Anar a **Fitxers**.
2. Clicar al botó **+** (afegir) i seleccionar, per exemple, **Document de text**.
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.

# 17. 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:

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

S'hi accedeix amb les credencials definides al [punt 12.3](#contrasenya-dadministració-de-collabora) (`coolconfig set-admin-password`).

# 18. Verificació del funcionament

Un cop completats tots els passos, es pot comprovar que tot funciona correctament:

- Pujar un fitxer qualsevol a Nextcloud i comprovar que apareix correctament a `/var/dadesnuvol`.
- Crear un document nou (per exemple, un document de text) des de la interfície de Nextcloud i comprovar que s'obre l'editor de Collabora dins del navegador, sense necessitat de descarregar-lo.
- Revisar els registres (`sudo journalctl -u apache2`, `sudo journalctl -u coolwsd`) per assegurar-se que no hi ha errors en arrencar els serveis.

# Consideracions de seguretat i bones pràctiques

- **Contrasenyes**: cal substituir totes les contrasenyes d'exemple (base de dades, administrador de Collabora) per valors robustos i únics, i no reutilitzar-les entre serveis.
- **Certificats en producció**: els certificats autosignats són adequats per a proves o xarxes internes tancades, però en un entorn accessible des d'Internet és recomanable utilitzar certificats vàlids (per exemple, mitjançant Let's Encrypt i Certbot), per evitar avisos al navegador i garantir la confiança dels usuaris.
- **Tallafocs**: només cal exposar els ports estrictament necessaris. Si Collabora només l'utilitza Nextcloud des del mateix servidor, el port 9980 no caldria obrir-lo cap a Internet.
- **Còpies de seguretat**: cal establir una política periòdica de còpia de seguretat tant de la base de dades (`mysqldump`) com de la carpeta de dades (`/var/dadesnuvol`) i del fitxer `config.php` de Nextcloud.
- **Actualitzacions**: tant el sistema (`apt update && apt upgrade`) com la mateixa aplicació Nextcloud (des del seu panell d'administració o amb l'eina `occ upgrade`) reben actualitzacions de seguretat periòdiques que convé no deixar acumular.
- **Usuari LDAP/AD**: si l'entorn ja disposa d'un [directori d'usuaris](https://proferamon.com/tic/ldap.html), es pot configurar Nextcloud per autenticar-se contra aquest directori en lloc de gestionar comptes locals, evitant duplicar la gestió d'usuaris.

#### Versions d'aquest document

+ HTML - [nextcloud.html](https://proferamon.com/tic/nextcloud.html)
+ PDF - [nextcloud.pdf](https://proferamon.com/tic/docs/nextcloud.pdf)
+ ODT - [nextcloud.odt](https://proferamon.com/tic/odt/nextcloud.odt)
+ MD - [nextcloud.md](https://proferamon.com/tic/md/nextcloud.md)

[Domini Públic (CC0)](https://creativecommons.org/publicdomain/zero/1.0/deed.ca)
