Apercu
La fonctionnalite multi-tenant de Fess permet d’exploiter plusieurs tenants (organisations, departements, clients, etc.) de maniere isolee avec une seule instance de Fess.
En utilisant la fonctionnalite d’hote virtuel, vous pouvez fournir pour chaque tenant :
Une interface de recherche independante
Du contenu isole
Un design personnalise
Fonctionnalite d’hote virtuel
L’hote virtuel est une fonctionnalite qui fournit differents environnements de recherche bases sur le nom d’hote de la requete HTTP.
Fonctionnement
L’utilisateur accede a
tenant1.example.comFess identifie le nom d’hote
Applique la configuration de l’hote virtuel correspondant
Affiche le contenu et l’interface specifiques au tenant
Configuration des en-tetes d’hote virtuel
Pour activer la fonctionnalite d’hote virtuel, configurez la propriete virtual.host.headers. Cette propriete est definie dans fess_config.properties.
Format de configuration
Specifiez chaque entree au format NomEnTete:ValeurEnTete=CleHoteVirtuel, une par ligne :
# fess_config.properties
virtual.host.headers=Host:tenant1.example.com=tenant1\n\
Host:tenant2.example.com=tenant2
Pour plusieurs hotes virtuels, separez les entrees par des retours a la ligne.
Restrictions des cles d’hote virtuel
Les cles d’hote virtuel ont les restrictions suivantes :
Seuls les caracteres alphanumeriques et les underscores (
a-zA-Z0-9_) sont autorises. Les autres caracteres sont automatiquement supprimes.Les noms de cles suivants sont reserves et ne peuvent pas etre utilises :
admin,common,error,login,profile
Configuration via l’ecran d’administration
Configuration du crawl
Vous pouvez isoler le contenu en specifiant l’hote virtuel dans la configuration du crawl Web :
Connectez-vous a l’ecran d’administration
Creez une configuration de crawl dans « Crawler » -> « Web »
Selectionnez une cle d’hote virtuel definie dans
virtual.host.headersdans le champ « Hote virtuel »Le contenu crawle avec cette configuration ne sera recherchable que sur l’hote virtuel specifie
Controle d’acces
Combinaison d’hote virtuel et de roles
En combinant les hotes virtuels avec le controle d’acces base sur les roles, un controle d’acces plus granulaire est possible :
Configurez l’hote virtuel et les permissions ensemble dans la configuration du crawl :
# Hote virtuel dans la configuration du crawl
tenant1
# Permissions dans la configuration du crawl
{role}tenant1_user
Recherche basee sur les roles
Pour plus de details, consultez Configuration de la recherche basée sur les rôles.
Personnalisation de l’interface
Vous pouvez personnaliser l’interface pour chaque hote virtuel.
Application de themes
Appliquer differents themes par hote virtuel :
Configurez le theme dans « Systeme » -> « Design »
Specifiez le theme dans la configuration de l’hote virtuel
CSS personnalise
Pour appliquer un CSS personnalise par hote virtuel, editez les fichiers CSS dans l’ecran d’administration sous « Systeme » -> « Design ». Vous pouvez egalement placer des templates personnalises dans le repertoire de vue correspondant a la cle de l’hote virtuel.
Configuration des labels
Limiter les labels affiches par hote virtuel :
Specifiez l’hote virtuel dans la configuration du type de label
Le label ne sera affiche que sur l’hote virtuel specifie
Authentification API
Controler l’acces API par hote virtuel :
Jetons d’acces
Emettre des jetons d’acces lies a un hote virtuel :
Creez un jeton dans « Systeme » -> « Jetons d’acces »
Associez le jeton a l’hote virtuel
Requete API
curl -H "Authorization: Bearer TENANT_TOKEN" \
"https://tenant1.example.com/api/v1/search?q=keyword"
Configuration DNS
Exemple de configuration DNS pour realiser le multi-tenant :
Sous-domaines vers le meme serveur
# Configuration DNS
tenant1.example.com A 192.168.1.100
tenant2.example.com A 192.168.1.100
# Ou avec un joker
*.example.com A 192.168.1.100
Configuration de reverse proxy
Exemple de configuration de reverse proxy avec Nginx :
server {
server_name tenant1.example.com;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
server {
server_name tenant2.example.com;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Isolation des donnees
Si une isolation complete des donnees est necessaire, considerez les approches suivantes :
Isolation au niveau de l’index
Utiliser des instances et des index Fess separes pour chaque tenant :
# Instance Fess du tenant 1 (fess_config.properties)
index.document.search.index=fess_tenant1.search
# Instance Fess du tenant 2 (fess_config.properties)
index.document.search.index=fess_tenant2.search
Note
index.document.search.index ne peut etre defini qu’a une seule valeur par instance. Pour une isolation complete au niveau de l’index, vous devez executer des instances Fess separees par tenant ou implementer du code personnalise. Pour un multi-tenant classique, l’isolation logique via la fonctionnalite d’hote virtuel est suffisante.
Bonnes pratiques
Convention de nommage claire : Utiliser une convention de nommage coherente pour les hotes virtuels et les roles
Tests : Tester suffisamment le fonctionnement de chaque tenant
Surveillance : Surveiller l’utilisation des ressources par tenant
Documentation : Documenter la configuration des tenants
Limitations
L’ecran d’administration est partage entre tous les tenants
Les parametres systeme affectent tous les tenants
Certaines fonctionnalites peuvent ne pas etre compatibles avec les hotes virtuels
Informations de reference
Configuration de la recherche basée sur les rôles - Controle d’acces base sur les roles
Hôtes virtuels - Details de la configuration des hotes virtuels
Conception de page - Personnalisation du design