RA4 — Teoria 1: Ofimàtica Web i Contenidors

Assignatura: Implantació d'Aplicacions Web · ASIX 2n curs
Resultat d'Aprenentatge: RA4 — Gestiona aplicacions d'ofimàtica web
Sessió: Dia 1 (introducció + pràctica 1)


1. Ofimàtica web: panorama actual

1.1 Què és l'ofimàtica web?

L'ofimàtica web engloba les aplicacions que permeten crear, editar, emmagatzemar i compartir documents (textos, fulls de càlcul, presentacions, fitxers en general) directament des d'un navegador web, sense instal·lar programari al client.

Des del punt de vista d'un administrador de sistemes, l'element clau no és l'usuari final sinó on s'executa i qui controla el servei:

Model Exemples Control de dades Cost
SaaS públic Google Workspace, Microsoft 365 Proveïdor extern Subscripció
Self-hosted Nextcloud, OnlyOffice, FileBrowser L'organització Infraestructura pròpia
Híbrid Nextcloud + Microsoft 365 Mixt Mixt

En entorns corporatius i educatius, el model self-hosted és molt rellevant per raons de:

1.2 Classificació d'eines (criteri 4.2)

Suite ofimàtica col·laborativa completa

Editor de documents en línia

Gestió de fitxers web

Microserveis de conversió


2. Docker Compose: arquitectura multi-servei

Prerequisit: ja heu treballat amb Docker a la VM. Aquí ampliem cap a composicions de múltiples contenidors.

2.1 Repàs: contenidor vs imatge vs volum

Imatge (read-only)
   └── Contenidor (instància en execució, read-write layer)
            └── Volum (dades persistents, fora del contenidor)

Quan esborreu un contenidor, les dades del seu sistema de fitxers desapareixen. Els volums garanteixen persistència.

2.2 docker compose: per què és necessari

En una instal·lació típica de Nextcloud calen com a mínim dos serveis:

  1. El servidor web amb PHP (Nextcloud)
  2. La base de dades (MariaDB)

Gestionar-los manualment amb docker run és possible però fràgil: cal crear xarxes manualment, passar variables d'entorn correctament, garantir l'ordre d'arrencada...

docker compose resol això amb un fitxer compose.yaml:

# Estructura conceptual d'un compose.yaml
services:
  servei_a:        # nom del servei (nom DNS intern)
    image: ...
    environment: ...
    volumes: ...
    networks: ...

  servei_b:
    image: ...
    depends_on:
      - servei_a   # espera que servei_a estigui healthy

networks:
  xarxa_interna:   # xarxa privada entre contenidors

volumes:
  dades_a:         # volum named persistent

2.3 Xarxes internes en Docker Compose

Concepte clau: en un compose.yaml, els serveis de la mateixa xarxa es comuniquen entre ells pel nom del servei (DNS intern de Docker). Cap port necessita estar exposat a l'amfitrió per a la comunicació interna.

[Navegador de l'alumne]
        |
   port 8080 (amfitrió)
        |
[contenidor: nextcloud] ← xarxa interna → [contenidor: db]
                                                (port 3306, NO exposat)

En aquest esquema:

Això és una pràctica de seguretat fonamental: mai exposar la base de dades directament a la xarxa exterior.

2.4 depends_on i healthcheck

services:
  app:
    depends_on:
      db:
        condition: service_healthy   # espera fins que db és healthy

  db:
    healthcheck:
      test: ["CMD", "healthcheck.sh", "--connect"]
      interval: 10s
      retries: 5

Sense healthcheck, depends_on només garanteix que el contenidor ha arrencat, no que el servei dins estigui llest (MariaDB pot trigar uns segons a acceptar connexions).


3. Nextcloud: arquitectura i conceptes

3.1 Components d'una instal·lació Nextcloud

┌─────────────────────────────────────────────┐
│              Nextcloud (contenidor)          │
│                                             │
│  Apache + mod_php + PHP 8.x                 │
│  Codi Nextcloud (/var/www/html)              │
│  Fitxers d'usuari (/var/www/html/data)       │
└───────────────────┬─────────────────────────┘
                    │ PDO / MySQL driver
┌───────────────────▼─────────────────────────┐
│              MariaDB (contenidor)            │
│                                             │
│  BD: nextcloud (metadades, usuaris, apps)   │
│  Volum: /var/lib/mysql                      │
└─────────────────────────────────────────────┘

La base de dades guarda:

Els fitxers reals es guarden al sistema de fitxers del contenidor (o volum muntat).

3.2 Gestió d'usuaris a Nextcloud

Nextcloud té un sistema de gestió d'usuaris complet:

Des de la interfície web (panell d'administració):

Des de la línia de comandes amb occ:

occ (ownCloud Console) és l'eina CLI de Nextcloud. A Docker s'executa així:

docker compose exec -u www-data app php occ <comanda>

Exemples útils:

# Llistar usuaris
docker compose exec -u www-data app php occ user:list

# Crear usuari
OC_PASS="contrasenya" docker compose exec -u www-data -e OC_PASS app \
  php occ user:add --password-from-env --display-name "Nom Cognom" nomUsuari

# Afegir usuari a grup (el grup es crea si no existeix)
docker compose exec -u www-data app php occ group:adduser professors alice

# Canviar quota d'emmagatzematge
docker compose exec -u www-data app php occ user:setting alice files quota 1GB

# Veure info d'un usuari
docker compose exec -u www-data app php occ user:info alice

3.3 Permisos i compartició

Nextcloud distingeix entre:

Permisos de compartició disponibles: lectura, descàrrega, edició, creació, eliminació, compartició a tercers.

3.4 occ vs interfície web: quan usar cadascun

Tasca Recomanació
Administració quotidiana (1-5 usuaris) Interfície web
Creació massiva d'usuaris (curs escolar) occ + script Bash
Automatització / scripts de desplegament occ sempre
Diagnòstic de problemes occ (més informació)
Manteniment (mode manteniment, actualitzacions) occ obligatori

4. Seguretat en entorn d'aula (criteri 4.6)

4.1 HTTP vs HTTPS en intranet

Per a proves en una xarxa local aïllada (classe, laboratori), HTTP és acceptable. En producció real cal HTTPS sempre. Les raons:

Per a HTTPS en local es pot usar un certificat autosignat, però genera advertiments al navegador.

4.2 Principi de mínim privilegi

Cada usuari ha de tenir exactament els permisos que necessita, ni més ni menys:

A Nextcloud: no doneu mai accés d'administrador a usuaris normals. Useu grups per gestionar permisos de forma escalable.

4.3 Contrasenyes i polítiques

Nextcloud permet configurar polítiques de contrasenyes (longitud mínima, caràcters especials, etc.) a Administració → Seguretat.

Per a un entorn d'aula, almenys:


5. Resum dels criteris d'avaluació coberts

Criteri Com es treballa a la Pràctica 1
4.1 Utilitat de les aplicacions d'ofimàtica web Introducció i panorama (teoria)
4.2 Classificació per funcionalitat Taula comparativa (teoria)
4.3 Instal·lació Desplegar Nextcloud + MariaDB amb Docker Compose
4.4 Configuració en intranet compose.yaml amb xarxa interna, sense domini
4.5 Gestió de comptes d'usuari Crear usuaris i grups via web i via occ
4.6 Criteris de seguretat Permisos per grup, polítiques de contrasenya
4.7 Ús cooperatiu Pujar i compartir fitxers entre usuaris
4.8 Documentació Es demana al final de la pràctica

Podeu consultar la documentació oficial de Nextcloud a docs.nextcloud.com i la referència de occ a docs.nextcloud.com/server/stable/admin_manual/occ_command.html