Lemon Learning préconise cette Architecture seulement si elle est imposée par la sécurité de votre entreprise.
L’installation On Premise consiste en une installation sur les serveurs même du client. Cette installation permet l’utilisation de Lemon Learning en interne dans une entreprise (intranet), respectant donc les contraintes de sécurité même de l’entreprise.
Utilisation en intranet
Personnalisation des règles d’utilisation
Coût d’installation
Support et mise à jour à charge du client
Fréquence de mise à jour bi-annuelle
Fonctionnalités réduites (Analytics et IA)
Un accès à l’instance depuis les bureaux de Lemon Learning permet de faciliter le support et les mises à jour.
L’installation de la distribution On Premise se fait grâce à une archive contenant un script d’installation.
Elle peut être faite en self-service en suivant la documentation technique ou en donnant temporairement l’accès distant à un serveur à un administrateur Lemon Learning. Cette instance devra avoir au moins le dimensionnement préconisé par Lemon Learning, basé sur le nombre d’utilisateur (Voir tableau ci-dessous).
< 200 utilisateurs : 8 go de RAM, processeur 2 coeurs, 80Go de stockage
< 2 000 utilisateurs : 16 go de RAM, processeur 4 coeurs, 80Go de stockage
> 10 000 utilisateurs : 32 go de RAM, processeur 8 coeurs, 80Go de stockage
L’environnement préconisé par Lemon Learning est Linux Debian 12/13 ou Ubuntu 24.04 ou Oracle Linux 8.
Si le support d’une autre distribution Linux est demandé, il faudra en informer votre contact Lemon Learning.
Voici la liste des composants nécessaires à Lemon Learning afin de réaliser l’installation :
Logiciels
Docker version >20.10
Docker-compose version >1.29
Réseau
Ports 80 et 443 ouverts
Enregistrements DNS configurés pour votre domaine
Services
Serveur SMTP ainsi que ses identifiants
Certificats (au format PEM)
Certificat TLS
Clé privée
Certificat CA
Connaissances
Familiarité avec Docker et docker-compose
Lemon Learning tient une documentation technique à jour pour permettre au client une installation et une montée de version rapide en toute autonomie.
Lemon Learning se tient à disposition du client pour toute question relative à l'installation, à la mise à jour ou au support fonctionnel ou technique à l'adresse suivante : https://support.lemonlearning.com/tickets-view/new
Lors d'un déploiement par extension avec une installation on premise, il est nécessaire d'ajouter deux clés à votre déploiement. Plusieurs cas sont possibles :
Le package MSI transmis par votre Solutions Engineer contiendra déjà les clés supplémentaires nécessaires.
Ce mode déploiement est recommandé pour les organisations qui mettent déjà en place des extensions via GPO et/ou Intune et qui souhaite minimiser les risques de conflits.
Lemon Learning peut vous accompagner afin d'effectuer un déploiement via GPO, en vous fournissant un set de trois clés de registres pour chacun des navigateurs que vous souhaitez embarquer. Ces clés sont :
La clé [...\ExtensionInstallAllowlist], qui permet d'autoriser l'installation de l'extension Player
La clé [...\ExtensionInstallForcelist], qui permet de forcer l'installation de l'extension Player
La clé [...\3rdparty\extensions\[...]\policy], qui contiendra
La valeur chaîne configKey : votre clé de configuration récupérable depuis votre back-office on premise.
La valeur chaîne domain : votre domain pour l'instance Lemon Learning
La valeur chaîne statsUrl : la syntaxe est https://stats.domain.ext
Lemon Learning peut vous accompagner dans la mise en place d’un déploiement via Intune. Deux approches sont possibles :
Après réception du package MSI, il s’agit de générer un fichier .intunewin à l’aide du Microsoft Win32 Content Prep Tool, puis d’ajouter l’application à Intune depuis le portail Microsoft Endpoint Manager.
Une fois les clés de registre personnalisées fournies, il convient de créer un profil de configuration, de le paramétrer et d’y ajouter les entrées OMA-URI correspondant aux clés. Ce profil peut ensuite être attribué aux utilisateurs ou groupes concernés.
{
"configKey": {
"Value": "XXX"
},
"domain": {
"Value": "XXX"
},
"statsUrl": {
"Value": "XXX"
}
}
domain est votre domain sur lequel l'instance Lemon Learning est hébergée
statsUrl prend la syntaxe suivante : https://stats.domain.ext
<script type="text/javascript">
function LemonLearningReady(player) {
player
.set({
projectKey: '...',
namespace: '...',
backend: {
domain: "...",
statsUrl: "..."
},
user: {
name: '...',
email: '...',
profiles: [id profil ou 0],
tags: [{
category: "Pays",
values: ["variable permettant de récupérer la valeur Pays de l'utilisateur connecté"]
}, {
category: "Role",
values: ["variable permettant de récupérer la valeur Role de l'utilisateur connecté"]
}]
}
})
.start()
}
</script>
projectKey vous sera fournie par votre Solutions Engineer
namespace permet d'identifier textuellement le projet pour éviter les conflits entre intégrations
backend
domain est votre domain sur lequel l'instance Lemon Learning est hébergée
statsUrl prend la syntaxe suivante : https://stats.domain.ext
user
name et email correspondent aux variables pour le nom et l'e-mail de l'utilisateur dans votre outil
profiles vous sera fourni par votre Solutions Engineer
tags correspond à des tags qui peuvent être envoyés à Lemon Learning pour faire de la différenciation pédagogique.
Angular lors de son initialisation remplace intégralement le contenu du body. Le snippet d'intégration doit être légèrement modifié afin de s'adapter à cette situation :
<!DOCTYPE html>
<html>
<head>
<!-- HOST HTML HEAD HERE -->
<!-- LEMONLEARNING INCLUSION IN THE HTML HEAD -->
<link href="https://static.lemonlearning.com/player/bundle.css" rel="stylesheet" type="text/css" />
<script src="https://static.lemonlearning.com/player/bundle.js" async defer id="lemonlearning-player-embed"></script>
<!-- DAP CUSTOM BOOTSTRAP -->
<script type="text/javascript">
Promise.all([
new Promise((resolve) => {
//Legacy, the DAP needs LemonLearningReady as a global leak
window.LemonLearningReady = (player) => {
//Reuse the LemonLearningReady required global to store the player instance
LemonLearningReady.player = player;
resolve(1)
}
}),
//Wait for the custom LEMONLEARNING_HOST_READY event, triggered from angular
new Promise((resolve) => {
window.document.addEventListener('LEMONLEARNING_HOST_READY', (e) => {
//See https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/detail
resolve(e.detail)
}, false);
})
])
//As soon as LemonLearningReady is called and LEMONLEARNING_HOST_READY customevent is catched, start the player
.then((values) => {
if (LemonLearningReady.player) {
LemonLearningReady.player.set({
projectKey: '[PROJECT KEY]',
backend: {
domain: '...',
statsUrl: '...'
},
user: {
name: values[1].name,
email: values[1].email,
profiles: [0],
tags: [{
category: "Country",
values: [values[1].country]
}]
}
}).start()
}
});
</script>
</head>
<body>
<!-- ... -->
Lorque le custom event LEMONLEARNING_HOST_READY est attrapé, la promesse reçoit les données de l'utilisateur via event.detail. On peut alors configurer une authentification automatique standard. Le site hôte doit dispatcher un custom event :
//somewhere within the host codebase, when the app is ready
window.document.dispatchEvent(new CustomEvent('LEMONLEARNING_HOST_READY', {
detail: {
name: "John Doe",
email: "john.doe@gmail.com",
country: "fr"
}
}));
projectKey vous sera fournie par votre Solutions Engineer
namespace permet d'identifier textuellement le projet pour éviter les conflits entre intégrations
backend
domain est votre domain sur lequel l'instance Lemon Learning est hébergée
statsUrl prend la syntaxe suivante : https://stats.domain.ext
user
name et email correspondent aux variables pour le nom et l'e-mail de l'utilisateur dans votre outil
profiles vous sera fourni par votre Solutions Engineer
tags correspond à des tags qui peuvent être envoyés à Lemon Learning pour faire de la différenciation pédagogique.
<script type="text/javascript">
function LemonLearningReady(player) {
player.set({
backend: {
domain: '...',
statsUrl: '...'
},
namespace: '...',
companyKey: '...',
ssoId: '...'
}).start();
}
</script>
backend
domain est votre domain sur lequel l'instance Lemon Learning est hébergée
statsUrl prend la syntaxe suivante : https://stats.domain.ext
namespace permet d'identifier textuellement le projet pour éviter les conflits entre intégrations
companyKey vous sera fournie par votre Solutions Engineer
ssoId vous sera fourni par votre Solution Engineer
<script type="text/javascript">
function LemonLearningReady(player) {
player.set({
backend: {
domain: '...',
statsUrl: '...'
},
projectKey: '...',
namespace: '...',
user: player.userKey('...')
}).start()
}
</script>
backend
domain est votre domain sur lequel l'instance Lemon Learning est hébergée
statsUrl prend la syntaxe suivante : https://stats.domain.ext
projectKey vous sera fournie par votre Solutions Engineer
namespace permet d'identifier textuellement le projet pour éviter les conflits entre intégrations
player.userKey vous sera fournie par votre Solutions Engineer