Arquitectura Multi-Tenant
El ecosistema qwc-services permite usar la arquitectura Multi-Tenant, es decir, que una sola instancia (instalación) de QWC2 pueda alojar diferentes visores, cada uno con su propia configuración de Temas, apariencia, Plugins, usuarios, etc.
Cada tenant debe tener los ficheros de configuración config.json y tenantConfig.json. El directorio donde se almacenan es configurable, pero por defecto están en qwc-docker/volumes/config-in/<tenant>/.
┌─────────────────────────────────────────────────────────────┐
│ QWC2 MULTI-TENANT │
│ (Una sola instalación) │
└─────────────────────────────────────────────────────────────┘
│
│
┌─────────────────────┼─────────────────────┐
│ │ │
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│ TENANT 1 │ │ TENANT 2 │ │ TENANT 3 │
│ (tenant a) │ │ (tenant b) │ │ (tenant c) │
└───────────────┘ └───────────────┘ └───────────────┘
│ │ │
├─ config.json ├─ config.json ├─ config.json
├─ tenantConfig.json ├─ tenantConfig.json ├─ tenantConfig.json
│ │ │
├─ Temas propios ├─ Temas propios ├─ Temas propios
├─ Usuarios propios ├─ Usuarios propios ├─ Usuarios propios
├─ Roles propios ├─ Roles propios ├─ Roles propios
└─ Autenticación └─ Autenticación └─ Autenticación
La configuración de API-Gateway nginx.conf extrae el nombre del tenant, que debe estar definido, para redirigir a los servicios.
server {
listen 80;
server_name localhost;
proxy_redirect off;
server_tokens off;
location ~ ^/(?<t>tenant1|tenant2)/ {
# Extract tenant
proxy_set_header Tenant $t;
# Set headers for original request host
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
location ~ ^/[^/]+/auth {
rewrite ^/[^/]+(.+) $1 break;
proxy_pass http://qwc-auth-service:9090;
}
location ~ ^/[^/]+/ows {
rewrite ^/[^/]+(.+) $1 break;
proxy_pass http://qwc-ogc-service:9090;
}
location ~ ^/[^/]+/api/v1/featureinfo {
rewrite ^/[^/]+(.+) $1 break;
proxy_pass http://qwc-feature-info-service:9090;
}
# etc...
location ~ ^/[^/]+/qwc_admin {
rewrite ^/[^/]+(.+) $1 break;
proxy_pass http://qwc-admin-gui:9090;
}
# Place these last to give precedence to the other rules:
# Redirect request without trailing slash
location ~ ^(/[^/]+)$ {
return 301 $scheme://$http_host$1/;
}
location ~ ^/[^/]+/ {
rewrite ^/[^/]+(.+) $1 break;
proxy_pass http://qwc-map-viewer:9090;
}
}
}
Por lo que, con una sola instalación de QWC2 podemos tener diferentes visores con diferentes comportamientos. Por ejemplo:
Y en cada uno de ellos una autenticación diferente, temas diferentes, etc.