Sessió: Dia 2 (refresc + pràctica 2)
Durada: ~20 minuts de teoria abans de la pràctica
docker compose: servei app (Apache+PHP) + servei db (MariaDB)occ (CLI). occ és el camí per automatitzar.# Engegar/Aturar
docker compose up -d
docker compose down
# Logs
docker compose logs -f app
# occ (CLI de Nextcloud)
docker compose exec -u www-data app php occ <comanda>
# Crear usuari via occ
OC_PASS="pass" docker compose exec -u www-data -e OC_PASS app \
php occ user:add --password-from-env --display-name "Nom" --group "Grup" usuari
FileBrowser és un gestor de fitxers web autònom (no necessita cap altre servei extern). Permet:
A diferència de Nextcloud, FileBrowser és molt lleuger (~20 MB) i no té bases de dades ni instal·lació complexa. Ideal per a:
FileBrowser exposa una API REST que permet:
Flux d'autenticació JWT:
Client FileBrowser
| |
|-- POST /api/login |
| {"username":"...","password":"..."}
| |
|<-- {"token": "eyJ..."} |
| |
|-- GET /api/resources/ |
| Authorization: Bearer eyJ... |
| |
|<-- [{nom: "fitxer1.txt",...}] |
El token JWT té una caducitat (per defecte 2 hores). En scripts s'obté el token al principi i es reutilitza per a totes les operacions.
Cada usuari de FileBrowser té:
scope): la ruta a la qual té accés. No pot sortir d'aquesta ruta.L'usuari admin pot gestionar altres usuaris i té accés a tot.
Un microservei és un servei petit, amb una responsabilitat concreta, que exposa una API (generalment HTTP/REST) i pot ser invocat per altres serveis o aplicacions.
[Aplicació principal PHP]
|
| HTTP POST (fitxer .docx)
▼
[Microservei Gotenberg] ←── contenidor Docker independent
|
| retorna PDF
▼
[Aplicació principal PHP]
|
| desa el PDF
▼
[disc / Nextcloud]
Avantatges dels microserveis:
Inconvenient principal:
En un compose.yaml, els serveis de la mateixa xarxa es parlen per nom de servei:
services:
app: # PHP/web
networks: [interna]
gotenberg:
networks: [interna]
# app accedeix a gotenberg via http://gotenberg:3000
networks:
interna:
Des del contenidor app, la URL de Gotenberg és http://gotenberg:3000 (no localhost:3000).
Error típic dels alumnes: intentar usar
localhost:3000des d'un contenidor per accedir a un altre.localhostdins un contenidor es refereix al propi contenidor, no a l'amfitrió.
Gotenberg és una API REST containeritzada que converteix documents a PDF. Usa internament:
.docx, .xlsx, .pptx, .odt...) a PDFDes del punt de vista del client: envieu un fitxer per HTTP, rebeu un PDF. No cal instal·lar LibreOffice ni Chromium al vostre servidor principal.
| Endpoint | Entrada | Sortida |
|---|---|---|
POST /forms/chromium/convert/url |
URL web | |
POST /forms/chromium/convert/html |
fitxer HTML | |
POST /forms/libreoffice/convert |
.docx/.xlsx/.odt/... | |
POST /forms/pdfengines/merge |
múltiples PDFs | PDF combinat |
Totes les peticions usen multipart/form-data.
Convertir una URL a PDF (Bash + curl):
curl -s -X POST http://localhost:3000/forms/chromium/convert/url \
-F "url=https://example.com" \
-o resultat.pdf
Convertir un fitxer DOCX a PDF:
curl -s -X POST http://localhost:3000/forms/libreoffice/convert \
-F "files=@document.docx" \
-o document.pdf
Des de PHP (usant cURL):
$ch = curl_init('http://gotenberg:3000/forms/libreoffice/convert');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, [
'files' => new CURLFile('/ruta/al/fitxer.docx')
]);
$pdf = curl_exec($ch);
file_put_contents('resultat.pdf', $pdf);
Per defecte, Gotenberg no té cap mecanisme d'autenticació. Qualsevol que pugui accedir al port 3000 pot fer conversions il·limitades (costoses en CPU).
Per tant, en producció:
En la nostra pràctica, el port 3000 de Gotenberg sí que l'exposem a l'amfitrió perquè fem proves directes des de la terminal. En un desplegament real, es llevaría la secció ports i s'accediria via xarxa interna Docker.
compose.yaml final: tres serveis integratsAl final de la Pràctica 2 tindreu un compose.yaml que aixeca tres serveis junts:
┌──────────────────────────────────────────────────────────┐
│ amfitrió (Debian 13) │
│ │
│ port 8080 ──► [nextcloud] ─┐ │
│ port 8181 ──► [filebrowser]│ xarxa interna │
│ port 3000 ──► [gotenberg] │ (nc_net) │
│ │ │
│ [mariadb] (sense port extern) │
└──────────────────────────────────────────────────────────┘
La clau pedagògica: cada servei té la seva responsabilitat, però es poden combinar per crear fluxos de treball (pujar un DOCX a FileBrowser → convertir-lo a PDF via Gotenberg → desar el PDF).
| Criteri | Com es treballa a la Pràctica 2 |
|---|---|
| 4.3 Instal·lació | Desplegar FileBrowser i Gotenberg amb Docker Compose |
| 4.4 Configuració en intranet | Xarxa interna, ports i seguretat de Gotenberg |
| 4.5 Gestió de comptes | Creació d'usuaris a FileBrowser via web i API REST |
| 4.6 Criteris de seguretat | Permisos per ruta a FileBrowser, Gotenberg sense accés extern |
| 4.8 Documentació | docker-compose.yaml final comentat + breu manual |
Documentació oficial: