El día 2 (22 de mayo de 2026) se centra en el perímetro de autenticación y en madurar el stack OpenCloud ya desplegado el día anterior: actualización de versión, broker OIDC con Dex (Google y Apple), ajustes de Nginx, primer backup integral de la instalación y documentación operativa. El despliegue inicial (Debian, Docker, TLS, hostnames separados) quedó cerrado el 21; hoy se trabaja sobre esa base en producción en cloud.km0.amvara.de.
Estado verificado al cierre del día
| Componente | Detalle | Binding |
|---|---|---|
| OpenCloud | opencloudeu/opencloud-rolling:7.0.0 | 127.0.0.1:9200 |
| Dex (OIDC) | ghcr.io/dexidp/dex:v2.41.1 | 127.0.0.1:5556 |
| Nginx vhost | /etc/nginx/sites-available/opencloud | TLS → /dex/ + / |
OC_DOMAIN | cloud.km0.amvara.de | INSECURE=false |
| Emisor Dex | https://cloud.km0.amvara.de/dex | Conectores Google + Apple |
Comprobaciones habituales: docker compose ps, nginx -t y cabeceras HTTP contra la URL pública del cloud.
Arquitectura actual (autenticación + aplicación)
Browser ── HTTPS :443 cloud.km0.amvara.de ── Nginx
├─ /dex/ → Dex 127.0.0.1:5556
├─ /login.html → /var/www/opencloud-auth/ (selector de proveedor)
└─ / → OpenCloud 127.0.0.1:9200
└─ volúmenes opencloud_* + dex_dex-data
La web corporativa en el mismo host sigue en otro virtual host: km0.amvara.de → contenedor estático en loopback (documentado en el resumen de trabajo de km0-web del mismo día).
Actualización OpenCloud (6.2.0 → 7.0.0)
- Se solicitó acercarse a la rama 7.0.1; la imagen 7.0.0 fue la etiqueta aplicada y validada en ejecución (7.0.1 no se desplegó al no estar disponible o no validada).
- Variable
OC_DOCKER_TAG=7.0.0en/opt/opencloud/opencloud-compose/.env. - Tras el upgrade, corrección en
opencloud.yamlruntime: entradasharing.service_accountrequerida en OpenCloud 7.x para comparticiones. - Reinicio controlado:
docker compose pull && docker compose up -ddesde el directorio de compose. - Revisión de logs en niveles
fatal/error; servicio dejado en marcha.
El hito queda reflejado en la tabla de historial de despliegues del runbook bajo /opt/opencloud/docs/.
OIDC multi-proveedor con Dex (Google + Apple)
Se descartó el experimento ad hoc con Keycloak (existen plantillas nginx bajo keycloak*.conf pero no están habilitadas en sites-enabled) en favor de un broker Dex ligero.
Estructura en /opt/opencloud/dex/
docker-compose.yml— servicio Dex, volumendex_dex-data, publicación sólo en loopback del puerto 5556.config.yaml— emisor, almacenamiento SQLite, clientes OAuth2, conectores.docker-entrypoint.sh— renderiza configuración desde variables de entorno (emisor, secretos de Google/Apple fuera del blog).web/themes/km0/— UI de login con marca KM0 (logo, CSS,i18n.jsCA / ES / EN).web/templates/—header.html,login.html,footer.html.setup-apple.sh— genera el JWT de cliente Apple (~180 días).README.md— pasos de consola Google y portal Apple Developer.
OpenCloud queda con emisor externo (OC_OIDC_ISSUER apuntando al path público /dex, cliente opencloud-web). La pantalla de Dex replica la línea visual del sitio corporativo (navy, Inter, gradiente, logo KM0). alwaysShowLoginScreen: true fuerza el selector Google vs Apple.
Puntos de entrada públicos
| URL | Uso |
|---|---|
| https://cloud.km0.amvara.de/ | Interfaz web OpenCloud |
| https://cloud.km0.amvara.de/dex/ | Emisor OIDC / login Dex |
| https://cloud.km0.amvara.de/login.html | Selector estático Google / Apple |
En Google Cloud Console el redirect URI registrado es https://cloud.km0.amvara.de/dex/callback. Para Apple Sign In se usan ficheros de credenciales bajo /opt/ gestionados por el equipo y el script de setup — sin detallar secretos aquí.
Integración Nginx
En el vhost activo de OpenCloud:
location /dex/→http://127.0.0.1:5556/dex/con cabeceras reenviadas adecuadas para OIDC.location = /login.html→ fichero estático en/var/www/opencloud-auth/login.html.location /→ OpenCloud en127.0.0.1:9200manteniendo directivas para SSE, TUS y WebSockets del día 1.
Con INSECURE=false y dominio FQDN estable, el stack abandona el modo laboratorio relajado del primer despliegue.
Ajuste del overlay Compose (resolución DNS en contenedor)
En external-proxy/opencloud.yml se añadió extra_hosts: ${OC_DOMAIN}:host-gateway para que el contenedor resuelva el hostname público como el host. Sin ello pueden aparecer fallos de login tras OAuth de Google (access-denied o sesiones incoherentes) cuando el runtime no alcanza el mismo nombre que ve el navegador.
Backup integral de la instalación (nuevo)
Script: /opt/opencloud/scripts/backup-opencloud-installation.sh — documentado en el README homónimo del mismo directorio.
Primera ejecución registrada: 2026-05-22 19:51 → árbol bajo /opt/backup_opencloud_installation/20260522-195106/ con enlace simbólico latest.
| Área del archivo | Contenido |
|---|---|
opt-opencloud/ | Árbol completo /opt/opencloud/ (compose, dex, scripts, docs) |
host-nginx/ | Vhost activo + plantillas del repo |
host-www/ | opencloud-auth, material certbot |
letsencrypt/ | TLS del hostname del cloud |
opt-credentials/ | JSON OIDC de proveedores (copia operativa — tratar como secreto) |
docker-volumes/ | Tarballs opencloud-data, opencloud-config, dex-data |
manifest/ | Snapshot de runtime y log del backup |
No incluye el vhost de la web corporativa km0 ni otros stacks ajenos a OpenCloud.
Documentación actualizada
/opt/opencloud/README.md— arquitectura v7, Dex, diagrama dual-host con km0./opt/opencloud/docs/runbook.md— sección Dex OIDC, troubleshooting, fila de historial 2026-05-22.- Espejos orientados a Redmine (
README.red, notas enredminenotes/) para resumen de stack y operaciones.
Investigación sin despliegue
- Collabora / WOPI: revisión profunda de opciones oficiales para edición Office en navegador. Conclusión: mantener sólo core de momento; posible addon futuro Collabora Online autohospedado + subdominio WOPI — no implementado hoy.
- Apache HTTP Server: confirmado que no se usa en host ni contenedores en ejecución (sólo Nginx). Apache Tika mencionado en docs upstream del compose no está desplegado.
Branding (contexto)
En sesiones previas se probó un overlay “KM0 - Cloud” en la barra superior de OpenCloud Web; el usuario pidió revertir por completo al branding por defecto de OpenCloud (21 de mayo). No queda tema custom en la UI web del producto. El branding KM0 en la pantalla de login de Dex es independiente y sí se mantiene.
Incidencias y soluciones documentadas
| Síntoma | Causa / remedio |
|---|---|
GET .../photo/$value 404 | Sin avatar subido — ruido benigno en consola del navegador |
502 en URLs antiguas /signin/ | Sesión obsoleta antes del corte Dex — limpiar datos del sitio o ventana privada |
access-denied tras login Google | Lista blanca en role_assignment o DNS — usar driver: default o extra_hosts |
| Dex en bucle de reinicio | Revisar docker logs del contenedor Dex; validar ficheros JSON de proveedores en /opt/ |
Trabajo paralelo en km0-web (mismo día)
El resumen de trabajo de la web corporativa del 22 de mayo (Astro, i18n, despliegue en /opt/km0-web) vive en la documentación de proyecto aparte; en el mismo host conviven dos frontales TLS independientes sin mezclar configuración nginx del marketing con la del cloud.
Pendientes y siguientes pasos
- Valorar OpenCloud 7.0.1 cuando la imagen esté disponible y validada (hoy en 7.0.0).
- Completar Apple Sign In si aún falta: credenciales en
/opt/+ ejecutarsetup-apple.sh. - Instalar cron para el script de backup integral (el script ya existe).
- Revisar rotación del acceso de administración inicial desde la UI (recomendación operativa).
- Suite Collabora/WOPI: sólo investigada — sin despliegue.
Referencias operativas: /opt/opencloud/docs/runbook.md, /opt/opencloud/dex/README.md, README del script de backup para restauración.