Documentation technique

Documentation

Guide d'intégration, déploiement SaaS et on-premise, gestion des licences et référence API.

Vue d'ensemble

MileoApp est disponible en deux modes de déploiement : SaaS (hébergé par Mileo Technology) et on-premise (sur votre infrastructure). Les deux modes partagent le même code, la même sécurité, les mêmes fonctionnalités.

SaaS (Cloud)

  • Hébergé en France (OVH)
  • Mises à jour automatiques
  • Licences par utilisateur / module / mois
  • Zéro maintenance côté client
  • Sauvegardes quotidiennes incluses

On-Premise

  • Déployé sur votre infrastructure
  • Clé de licence JWT signée RSA
  • Fonctionne 100% hors ligne
  • Vous contrôlez vos données
  • Mises à jour manuelles

Mode SaaS

En mode SaaS, les licences sont gérées par Mileo Technology. Chaque utilisateur se voit attribuer des licences module par module depuis le panneau d'administration.

Fonctionnement

  1. L'administrateur attribue une licence à un utilisateur via Admin > Licences > Attribuer
  2. L'utilisateur voit le module apparaître dans son Hub
  3. Chaque module est facturé au tarif HT mensuel (ex: MileoMap = 29€/mois)
  4. Les licences peuvent être en essai 14 jours ou actives
  5. L'administrateur peut révoquer ou réattribuer les licences à tout moment

Numéros de licence

Chaque licence attribuée reçoit un numéro unique au format MTXXXXXXXXXXXX (MT + 12 caractères hexadécimaux). Ce numéro est visible dans le profil utilisateur et dans l'admin.

Mode On-Premise

Le mode on-premise permet de déployer MileoApp sur votre propre infrastructure, totalement isolé d'internet. L'accès aux modules est contrôlé par une clé de licence signée cryptographiquement.

Pré-requis

Infrastructure

  • Docker + Docker Compose
  • PostgreSQL 16+
  • 2 vCPU / 4 Go RAM minimum
  • 20 Go SSD (+ stockage données)

Réseau

  • Port 443 (HTTPS) si accessible
  • Certificat TLS (ou Caddy auto)
  • DNS interne si réseau fermé
  • Aucune connexion internet requise

Installation

1. Copier les fichiers

docker-compose.yml
.env
migrations/
Caddyfile

2. Configurer le .env

# Mode on-premise activé
ON_PREMISE=true

# Clé de licence fournie par Mileo Technology
LICENSE_KEY=eyJhbGciOiJSUzI1NiIs...

# Base de données
DATABASE_URL=postgres://mileo:CHANGE_ME@postgres:5432/suite_mileo?sslmode=disable

# Clés JWT (générées pour votre instance)
JWT_PRIVATE_KEY_FILE=/run/secrets/jwt.key
JWT_PUBLIC_KEY_FILE=/run/secrets/jwt.pub

3. Démarrer

docker compose up -d

4. Vérifier la licence

curl https://votre-domaine/api/v1/license/status

Important

  • La clé de licence est un JWT signé RSA-256 — elle ne peut pas être modifiée ou forgée.
  • Si la clé est expirée, l'application démarre en mode dégradé (aucun module accessible).
  • Contactez hello@mileoapp.fr pour le renouvellement.

Clé de licence

La clé de licence on-premise est un token JWT signé avec l'algorithme RS256. Elle contient toutes les informations nécessaires pour contrôler l'accès aux modules sans connexion internet.

Contenu de la clé

{
  "org": "Nom de l'organisation",
  "oid": 42,
  "modules": ["mileomap", "mileofield", "mileoproject"],
  "max_users": 50,
  "plan": "enterprise",
  "lid": "LIC-a1b2c3d4e5f6g7h8",
  "iat": 1711100400,
  "exp": 1742636400,
  "iss": "mileoapp-license",
  "type": "on-premise"
}

Champs

orgNom de l'organisation
oidID de l'organisation
modulesListe des modules autorisés
max_usersNombre max d'utilisateurs
planstarter / pro / enterprise
lidIdentifiant unique de la licence
expDate d'expiration (Unix timestamp)

Sécurité

  • Signature RSA-256 — impossible à falsifier sans la clé privée
  • Expiration vérifiée à chaque requête
  • Modules verrouillés — seuls ceux listés sont accessibles
  • Aucune connexion internet nécessaire pour la vérification
  • Identifiant unique pour révocation ciblée si nécessaire

Cycle de vie

1 Génération
2 Transmission
3 Activation
4 Active
5 Renouvellement

API Reference

Endpoints liés à la gestion des licences. Tous les endpoints admin nécessitent un JWT valide avec le rôle owner ou admin.

Endpoints publics

GET /api/v1/license/status

Retourne le statut de la licence (SaaS ou on-premise).

Réponse (on-premise)
{
  "mode": "on-premise",
  "status": "active",
  "license_id": "LIC-a1b2c3d4e5f6g7h8",
  "org": "Client XYZ",
  "plan": "enterprise",
  "modules": ["mileomap", "mileofield"],
  "max_users": 50,
  "expires_at": "2027-03-22T00:00:00Z",
  "days_left": 365
}
POST /api/v1/license/verify

Vérifie la validité d'une clé de licence.

Body
{ "license_key": "eyJhbGciOi..." }
Réponse
{
  "valid": true,
  "license_id": "LIC-a1b2c3d4e5f6g7h8",
  "org": "Client XYZ",
  "modules": ["mileomap", "mileofield"],
  "max_users": 50,
  "expires_at": "2027-03-22T00:00:00Z"
}
GET /api/v1/modules

Liste tous les modules disponibles avec leur tarif.

Endpoints utilisateur

Auth requise
GET /api/v1/licenses/me

Retourne les licences de l'utilisateur connecté.

GET /api/v1/licenses/check/{moduleId}

Vérifie si l'utilisateur a accès à un module spécifique.

Endpoints admin

Owner / Admin
GET /api/v1/admin/licenses

Liste toutes les licences (paginé).

GET /api/v1/admin/licenses/stats

Statistiques : licences actives, essais, revenu mensuel par module.

POST /api/v1/admin/licenses

Attribuer une licence à un utilisateur.

{
  "user_id": 1,
  "module_id": "mileomap",
  "trial": false,
  "months": 12
}
POST /api/v1/admin/licenses/generate-key

Générer une clé de licence on-premise.

{
  "org_name": "Client XYZ",
  "org_id": 42,
  "modules": ["mileomap", "mileofield"],
  "max_users": 50,
  "plan": "enterprise",
  "months": 12
}
POST /api/v1/admin/licenses/{id}/revoke

Révoquer une licence.

POST /api/v1/admin/licenses/{id}/activate

Convertir un essai en licence active.

Modules

mileomap

MileoMap

Conception CCTV & sécurité électronique. Calculs DORI IEC 62676-4:2025, raycasting 3D.

29€

HT / mois / user

mileofield

MileoField

Rapports d'intervention terrain. PWA hors ligne, signature électronique.

10€

HT / mois / user

mileoproject

MileoProject

Gestion de projets & chantiers. Kanban, Gantt, suivi budgétaire.

10€

HT / mois / user

mileogmao

MileoGMAO

Maintenance & gestion des équipements. Tickets, maintenance préventive.

10€

HT / mois / user

mileodocs

MileoDocs

Documentation technique & DOE. Templates, stockage versionné.

10€

HT / mois / user

hyperviseur

Hyperviseur

Centralisateur alarmes SIA DC-09. Parsing UDP/TCP, interface opérateur temps réel.

29€

HT / mois / user

Sécurité

MileoApp applique les mêmes standards de sécurité en SaaS et en on-premise. L'infrastructure est durcie selon les recommandations ANSSI.

Authentification

  • JWT RS256 avec rotation des clés
  • MFA TOTP obligatoire pour les admins
  • Hachage Argon2id (mémoire-hard)
  • Protection brute-force avec lockout
  • Rotation des refresh tokens

Données

  • Chiffrement TLS 1.2/1.3 en transit
  • Chiffrement AES-256-XTS au repos (LUKS2)
  • Isolation multi-tenant (PostgreSQL RLS)
  • Audit log avec intégrité SHA-256
  • Sauvegardes chiffrées GPG quotidiennes

Infrastructure

  • Durcissement ANSSI (15 contrôles)
  • SSH key-only, curve25519
  • Fail2ban, AppArmor, auditd
  • AIDE (File Integrity Monitoring)
  • Docker read-only, no-new-privileges

Conformité

  • RGPD (11 articles couverts)
  • NIS 2 (10 objectifs)
  • ANSSI (guides & recommandations)
  • DPIA documentée (Art. 35)
  • DPA signé à l'inscription (Art. 28)

Besoin d'aide ?

Notre équipe vous accompagne pour le déploiement, la configuration et le renouvellement de vos licences.