if-Panel Documentation version 0.1

Documentation · version 0.1

if-Panel, pas à pas

if-Panel est le portail client et de facturation des hébergeurs, édité en France par IF-Net. Il prend les commandes, émet des factures conformes, livre les services automatiquement sur vos panneaux et accueille le support, sur votre propre serveur.

DémarrerCe que fait if-Panel

if-Panel réunit trois espaces :

  • le site public : page d'accueil, boutique, pages éditoriales ;
  • l'espace client : services, factures, commandes, e-mails reçus, tickets de support, double authentification ;
  • l'administration (/admin) : le quotidien (clients, commandes, factures, services, support) et les Paramètres.

La facturation suit les règles françaises : TVA au taux normal, autoliquidation ou franchise en base, mentions obligatoires contrôlées sur chaque PDF, numérotation continue, avoirs. Les services se livrent seuls dès le paiement grâce aux connecteurs.

Essayer avant d'installer : la démonstration ouvre l'administration et l'espace client avec des données fictives, remises à zéro toutes les deux heures.

Prérequis

  • PHP 8.3 ou plus récent (8.4 et 8.5 conviennent), avec les extensions pdo_mysql, mbstring, openssl, sodium, curl, fileinfo, zip, dom, ctype, tokenizer et xml ;
  • MySQL 8 ou MariaDB 10.11 et plus ;
  • un nom de domaine en HTTPS, par exemple clients.votre-domaine.fr ;
  • une tâche planifiée lancée chaque minute ;
  • votre clé de licence, de la forme IFPN-XXXX-XXXX-XXXX-XXXX.

Dans le dossier d'une installation, cette commande vérifie tout sans rien modifier :

php artisan ifpanel:install --check

Installation en une commande

Pour un VPS ou un serveur dédié vierge sous Debian 12 ou 13, ou Ubuntu 22.04 ou 24.04, avec au moins 1 Go de mémoire et 5 Go de disque. Le domaine doit déjà pointer vers le serveur. En root :

curl -fsSL https://licences.if-net.fr/install.sh -o install-if-panel.sh && bash install-if-panel.sh

L'installateur demande l'adresse du portail, la clé de licence (saisie masquée), puis l'e-mail, le prénom et le nom de l'administrateur. Ensuite, il :

  1. vérifie le système, la mémoire et le disque, et refuse un serveur qui porte déjà un panneau d'hébergement ;
  2. vérifie la licence et télécharge la dernière version qui lui est ouverte ;
  3. installe nginx, PHP, MariaDB et Certbot, puis vérifie l'empreinte et la signature de l'archive avec les clés d'IF-Net ;
  4. crée la base de données, la configuration et le compte d'administration, avec un mot de passe généré ;
  5. configure nginx, obtient le certificat HTTPS, active la licence et pose la tâche planifiée.

Le récapitulatif est affiché à la fin et gardé dans /root/if-panel-installation.txt, lisible par root seulement. Le journal complet est dans /var/log/if-panel-install.log.

Sans questions

IFPANEL_LICENSE_KEY=IFPN-XXXX-XXXX-XXXX-XXXX bash install-if-panel.sh \
  --domain clients.exemple.fr --email vous@exemple.fr \
  --firstname Prénom --lastname Nom --yes
Après l'installation : connectez-vous, changez le mot de passe généré, activez la double authentification, puis supprimez le fichier récapitulatif.

Installation sur un serveur existant

Sur un serveur qui porte déjà des sites (CloudPanel, Plesk…), l'installation se fait à la main. Exemple avec CloudPanel :

  1. Créer le site. Sites → Add Site → Create a PHP Site, PHP 8.3 ou plus, racine web sur le dossier public. Puis une base de données et son utilisateur, et un certificat Let's Encrypt.
  2. Déposer le code. Téléchargez l'archive depuis votre espace client sur if-panel.fr (fiche de votre licence, bouton Télécharger). Envoyez le contenu de son dossier if-panel dans le dossier du site. Les dépendances et les styles sont déjà inclus.
  3. Configurer. Copiez .env.example en .env et remplissez au minimum :
    VariableValeur
    APP_URLhttps://clients.votre-domaine.fr. La licence est activée pour ce domaine.
    DB_DATABASE, DB_USERNAME, DB_PASSWORDLa base créée à l'étape 1.
    TRUSTED_PROXIES127.0.0.1 sous CloudPanel, dont le nginx relaie les visiteurs.
  4. Installer. La commande vérifie le serveur, génère la clé de l'application, crée les tables et les réglages de départ, puis demande le premier compte d'administration. Elle peut être relancée sans risque.
    php artisan ifpanel:install
  5. Tâche planifiée. Chaque minute (sous CloudPanel : Cron Jobs) :
    * * * * * php /home/utilisateur/htdocs/clients.votre-domaine.fr/artisan schedule:run >> /dev/null 2>&1
Plusieurs versions de PHP sur le serveur ? Utilisez partout la même que celle du site, par exemple php8.5 artisan …, y compris dans la tâche planifiée.

Licence

Une licence couvre une installation. Activez-la dans Paramètres → Licence, ou en ligne de commande (la clé est demandée en saisie masquée) :

php artisan license:activate
  • Vérification hors ligne. L'installation reçoit un jeton signé qu'elle vérifie seule, et le renouvelle environ une fois par jour. Si le serveur de licences ne répond pas, le site continue de fonctionner, avec une tolérance de plusieurs jours.
  • Préproduction gratuite. localhost, les domaines en .test ou .local et les adresses privées ne consomment aucun emplacement.
  • Changer de serveur. Sur l'ancienne installation, Paramètres → Licence → Retirer la licence, puis activez la clé sur la nouvelle.
  • Marque blanche. Selon votre offre, la mention « Propulsé par if-Panel » en pied de page peut être retirée ou remplacée (Paramètres → Apparence).

Premiers pas

Avant d'ouvrir les commandes, dans cet ordre :

  1. Paramètres → Facturation et TVA : raison sociale, adresse, SIRET, régime de TVA, délais de paiement et de relance. Ces informations figurent sur chaque facture.
  2. Paramètres → Serveur d'envoi : le serveur SMTP, puis un e-mail de test.
  3. Paramètres → Moyens de paiement : virement (IBAN) et clés Stripe.
  4. Paramètres → Apparence : nom du site, logo, couleurs, pied de page.
  5. Paramètres → Pages : rédigez vos conditions générales de vente, vos mentions légales et votre politique de confidentialité. Elles sont livrées vierges, et le tableau de bord le rappelle tant qu'elles ne sont pas complétées.
  6. Paramètres → Modules et thèmes : installez et activez les connecteurs dont vous avez besoin.
  7. Paramètres → Serveurs puis Catalogue : vos serveurs, vos gammes et vos offres.
  8. Activez la double authentification sur votre compte (Sécurité, en cliquant sur votre nom).

VendreCatalogue et boutique

Tout se règle dans Paramètres → Catalogue, Options et Codes promo.

  • Gammes et produits. Une gamme regroupe des produits dans la boutique (/commander/…). Une gamme ou un produit peut être désactivé ou masqué.
  • Tarifs. Un prix hors taxes par cycle : paiement unique, mensuel, trimestriel, semestriel, annuel, bisannuel ou triennal. Un changement de tarif ne touche pas les services déjà souscrits. Devises : euro, dollar, franc suisse.
  • Connecteur. Chaque produit indique comment il est livré (manuellement, Plesk, KeyHelp, Pterodactyl…) et ses réglages propres.
  • Options configurables. Listes de choix tarifés, quantités tarifées à l'unité ou champs libres. Le prix se saisit par mois et se décline sur tous les cycles.
  • Codes promo. Pourcentage ou montant fixe, avec montant minimum, dates de validité, nombre d'utilisations (au total et par client), réservés ou non à la première commande, appliqués ou non aux renouvellements.
  • Suppressions prudentes. Un produit, une gamme ou un code déjà utilisés ne se suppriment pas : on les désactive.

Ouvrir ou fermer les commandes

En tête du catalogue, le bloc Commandes permet de suspendre les ventes sans rien cacher : la boutique reste consultable avec ses prix, mais l'ajout au panier, la validation de commande et les demandes sur devis sont refusés avec votre message. Les clients existants continuent de renouveler, payer, gérer leurs services et contacter le support.

Préparer un catalogue invisible : laissez la gamme désactivée ou masquée jusqu'au lancement, puis rendez-la visible et ouvrez les commandes.

Commandes et espace client

  1. Le visiteur remplit son panier sans compte ; le compte est demandé au moment de payer. Le panier est repris à la connexion.
  2. La validation crée la commande, la facture et les services, dans une seule opération.
  3. Au paiement de la facture, chaque service est livré par son connecteur. Un échec de livraison apparaît sur le tableau de bord de l'administration, et la livraison peut être relancée sans créer de doublon.

Dans son espace, le client retrouve ses services (accès au panneau en un clic quand le connecteur le permet), ses factures en PDF, ses commandes, la copie des e-mails reçus, ses tickets, ses coordonnées de facturation et sa double authentification.

Changements d'offre

Sur la fiche d'un produit, cochez les offres vers lesquelles un service peut basculer. Le client les voit sur la fiche de son service.

  • Montée en gamme : facture de la différence, au prorata du temps restant. L'offre change au paiement, l'échéance ne bouge pas.
  • Descente en gamme : programmée à l'échéance, sans remboursement. La facture de renouvellement porte déjà le nouveau prix.
  • Si le connecteur le permet (Plesk, KeyHelp, Pterodactyl), le changement est appliqué chez le fournisseur ; sinon seul le portail change, et l'équipe reporte le changement.
  • Une seule demande à la fois par service, et aucune tant qu'une facture de renouvellement reste impayée.

FacturerFactures et TVA

Réglages dans Paramètres → Facturation et TVA et Modèle de facture.

  • Régimes : TVA au taux applicable, autoliquidation pour un professionnel de l'Union européenne, exonération à l'export, franchise en base avec la mention de l'article 293 B du Code général des impôts.
  • Numérotation continue, réservée au moment de l'émission : deux factures émises en même temps ne peuvent pas se croiser.
  • Coordonnées figées : une facture garde les coordonnées du client et les vôtres telles qu'elles étaient à son émission.
  • Mentions de la réforme : SIREN du client, nature de l'opération (biens, services ou mixte) et option pour la TVA sur les débits.
  • Modèles de facture : Classique, Bandeau et Épuré, avec couleur, police, logo et pied de page, et un aperçu PDF. Un modèle qui oublie une mention obligatoire est automatiquement remplacé par le modèle Classique.

Moyens de paiement

MoyenFonctionnement
Carte bancaire (Stripe)Clés Stripe dans Paramètres → Moyens de paiement. La facture est marquée payée à la confirmation signée de Stripe, jamais deux fois.
Virement bancaireLe client voit votre IBAN et la référence à indiquer. À réception des fonds, rapprochez le virement depuis le tableau de bord : la facture est payée et les services livrés.
Solde du compteUn solde créditeur, par exemple après un avoir, règle les factures suivantes, y compris d'office pour les renouvellements.

Renouvellements et relances

Chaque jour, if-Panel :

  • émet les factures de renouvellement quelques jours avant l'échéance (7 par défaut), réglées d'office sur le solde s'il suffit ;
  • envoie un rappel avant l'échéance, puis des relances par paliers ;
  • suspend les services impayés après le délai choisi (3 jours par défaut), puis les supprime et annule la facture (30 jours par défaut).

Tous les délais se règlent dans Paramètres → Facturation et TVA. Un renouvellement payé réactive un service suspendu. Une période déjà facturée ne l'est jamais une seconde fois.

Avoirs et solde

Une facture payée ne s'annule pas : on émet un avoir, numéroté dans sa propre série, depuis la fiche de la facture. Le montant revient au client par le moyen de paiement d'origine s'il sait rembourser (Stripe), sur son solde, ou par un virement que vous effectuez.

Facturation électronique

if-Panel prépare la réforme française : réception pour toutes les entreprises depuis le 1er septembre 2026, émission pour les PME et micro-entreprises au 1er septembre 2027.

  • Factur-X : chaque facture et chaque avoir PDF embarque le fichier XML du profil EN 16931. Désactivable dans Paramètres → Modèle de facture.
  • Transmission : Paramètres → Facturation électronique choisit la plateforme et la date de départ. Les factures partent automatiquement, en facture électronique pour un professionnel français ou en e-reporting pour les autres, avec nouvelles tentatives et suivi des statuts sur la fiche de chaque facture.
À savoir : la version 0.1 livre une plateforme « Test », qui ne transmet rien. Le raccordement à une plateforme agréée arrivera sous forme de module.

LivrerServices et serveurs

Un connecteur livre et pilote un service chez un fournisseur : création, suspension, réactivation, changement de mot de passe, changement d'offre, suppression. Les connecteurs s'installent depuis Paramètres → Modules et thèmes.

  • Fiche serveur (Paramètres → Serveurs) : adresse, identifiants d'API (chiffrés, jamais réaffichés), nombre maximal de comptes. Le bouton Tester la connexion vérifie l'accès.
  • Placement : un nouveau service va sur un serveur du bon type qui a encore de la place. La limite de comptes ne compte qu'à la création : un serveur plein gère toujours les services qu'il héberge.
  • Journal : chaque action sur un service est tracée sur sa fiche, sans jamais y écrire de mot de passe.
  • Livraison manuelle : pour ce qui n'a pas de connecteur, le service est activé et l'équipe s'en occupe.
Derrière un proxy (CloudPanel), réglez TRUSTED_PROXIES, sinon la connexion directe aux panneaux peut échouer.

Plesk

  • Préparer Plesk : créez une clé d'API sur le serveur : plesk bin secret_key --create -description "if-Panel".
  • Fiche serveur : adresse, port (8443 par défaut), clé d'API, adresse IP des sites, et « Ne pas vérifier le certificat » pour un serveur de test.
  • Produit : nom exact du plan de services Plesk. Le produit doit demander un nom de domaine.
  • Livraison : client Plesk retrouvé ou créé, puis abonnement avec le plan. Une livraison relancée retrouve l'abonnement existant.
  • Client : connexion directe au panneau Plesk, sans ressaisir de mot de passe.

KeyHelp

  • Préparer KeyHelp : Configuration → API, activer l'API, créer une clé et y autoriser l'adresse IP d'if-Panel. Créer au moins une formule d'hébergement.
  • Fiche serveur : adresse, port (vide pour 443), clé d'API. Tester la connexion liste les formules disponibles.
  • Produit : nom exact de la formule, et Let's Encrypt en option (le domaine doit déjà pointer vers le serveur).
  • Livraison : un compte client par service, puis son domaine. Un domaine déjà présent sur un autre compte bloque la livraison avec un message clair.
  • Client : panneau et serveur FTP affichés, connexion directe au panneau.

Pterodactyl

Le connecteur Pterodactyl livre des serveurs de jeux avec une clé d'application ptla_… du panneau.

  • Produit : nid, œuf, emplacements, mémoire, disque, processeur, bases, sauvegardes, ports supplémentaires, image Docker et variables.
  • Pilotage : avec une clé client ptlc_… sur la fiche serveur, le client voit l'état en direct et peut démarrer, redémarrer ou arrêter son serveur.

Espace client complet (module payant)

Le module « Pterodactyl, espace client complet » ajoute sur la fiche du service :

  • la console en direct ;
  • le gestionnaire de fichiers : parcourir, modifier, envoyer, télécharger ;
  • les sauvegardes, les bases de données et les tâches planifiées ;
  • les réglages de démarrage.
Console : ajoutez l'adresse de votre if-Panel dans allowed_origins du fichier /etc/pterodactyl/config.yml de chaque nœud Wings, sinon la console refuse la connexion.

Projets de développement

Le module Projets vend du développement sur devis.

  1. Le client envoie sa demande depuis la boutique : description, budget, date souhaitée, fichiers.
  2. L'équipe rédige un devis (Clientèle → Projets) et l'envoie.
  3. Le client télécharge le PDF, le signe avec la mention manuscrite « Bon pour accord » et le renvoie.
  4. L'équipe vérifie la signature et valide : la facture d'acompte est émise. Les étapes et le solde se facturent ensuite depuis le devis.

Sur la fiche de son service, le client suit l'avancement, échange avec l'équipe, récupère les livrables, les versions et le manuel d'utilisation.

if-Licences

Le connecteur if-Licences permet de vendre vos propres logiciels sous licence : la licence est émise au paiement, suspendue avec le service, prolongée au renouvellement et révoquée à la suppression. Le client voit sa clé et télécharge la dernière version depuis son espace. Il demande un compte revendeur sur un serveur if-Licences.

AccompagnerSupport

  • Départements (Paramètres → Départements et réponses types) : technique, facturation, commercial… Un membre rattaché à des départements ne voit que leurs tickets.
  • Tickets : le client écrit et joint des fichiers depuis son espace ; l'équipe répond, réaffecte, ajoute des notes internes invisibles du client, et clôt.
  • Réponses types pour les questions fréquentes.
  • Clôture automatique des tickets répondus restés sans nouvelles du client.
  • Pièces jointes stockées hors du dossier public et téléchargées après vérification.

E-mails

  • Serveur d'envoi (Paramètres → Serveur d'envoi) : SMTP, mot de passe chiffré, e-mail de test.
  • Modèles (Paramètres → Modèles d'e-mails) : chaque message aux clients se modifie, avec un aperçu. Les jetons disponibles (nom du client, montant, lien…) sont listés.
  • Journal : chaque envoi est visible sur la fiche du client, et le client en retrouve la copie dans son espace.
  • Un serveur d'envoi en panne ne bloque jamais un paiement ni une livraison.

PersonnaliserApparence et thèmes

  • Apparence (Paramètres → Apparence) : nom du site, accroche, logo, icône, couleur principale et couleur d'accent, mode sombre, bouton d'appel de l'en-tête, colonnes du pied de page.
  • Thèmes : le thème if-Panel est livré ; d'autres (Ardoise, Nuit…) s'installent depuis la boutique et s'activent dans Apparence. Un thème peut apporter ses couleurs par défaut et s'ouvrir en mode sombre ; vos couleurs restent prioritaires.
  • Marque blanche : selon la licence, la mention « Propulsé par if-Panel » se retire ou se remplace.

Site public et pages

  • Page d'accueil (Paramètres → Page d'accueil) : bandeau, état du réseau, atouts, appel au contact.
  • Pages (Paramètres → Pages) : écrites en Markdown, avec aperçu, publiées à une adresse propre comme /cgv. Une page repassée en brouillon disparaît des liens du pied de page.
  • Pages légales : conditions générales de vente, mentions légales et politique de confidentialité sont livrées vierges, avec la liste de ce qu'elles doivent contenir. Faites-les rédiger ou valider par un professionnel.

Page de maintenance

Paramètres → Page de maintenance règle deux messages, chacun avec un aperçu :

  • Maintenance : pendant une mise à jour, ou quand vous lancez php artisan down ;
  • Incident : quand une page ne peut pas s'afficher, par exemple base de données injoignable. Aucun détail technique n'est montré au visiteur.

Ces pages fonctionnent même quand la base de données est en panne : leurs textes, votre nom, votre logo et vos couleurs sont gardés dans un fichier. Les pages « introuvable » (404), « accès refusé » (403) et « session expirée » (419) sont en français.

Modules et thèmes

Paramètres → Modules et thèmes liste les extensions installées et la boutique, rangée par catégorie : connecteurs, passerelles de paiement, facturation, thèmes…

  • Installer une extension gratuite ou achetée : le paquet est signé par IF-Net et vérifié avant d'être posé sur le serveur. Un module s'active ensuite, un thème se choisit dans Apparence.
  • Mes achats regroupe les extensions payantes rattachées à votre compte.
  • Le catalogue est gardé en copie locale et rafraîchi toutes les six heures : il reste consultable même si la boutique ne répond pas.
  • Installer, activer ou retirer une extension est réservé aux comptes qui ont tous les droits.

AdministrerÉquipe et sécurité

  • Personnel (Paramètres → Personnel) : un compte par personne, jamais de compte partagé.
  • Rôles : permissions détaillées (clients, factures, services, support…). Un membre ne peut pas donner plus de droits qu'il n'en a.
  • Double authentification par application (TOTP), et adresses IP autorisées par compte.
  • Journal : chaque action de l'équipe, avec son auteur et son adresse d'origine.

Mises à jour

L'administration affiche la version installée dans l'en-tête, et une pastille « Mise à jour » quand une nouvelle version est disponible. Les versions sont vérifiées toutes les six heures.

  1. Sauvegardez la base de données.
  2. Lancez la mise à jour, en SSH (recommandé, sans limite de durée) ou depuis Paramètres → Mises à jour :
    php artisan ifpanel:update

La mise à jour vérifie la signature du paquet, sauvegarde les fichiers actuels (les trois dernières sauvegardes sont gardées), passe le site en maintenance, remplace le code, applique les migrations et rouvre le site. Elle ne touche jamais au .env, aux fichiers envoyés, ni aux modules et thèmes installés. En cas d'échec, les fichiers précédents sont remis en place.

Sauvegardes et déménagement

À sauvegarder chaque jour, sur un stockage distinct du serveur :

  • la base de données ;
  • le fichier .env : sa clé APP_KEY déchiffre les secrets enregistrés (clés d'API, mots de passe SMTP). Sans elle, ils sont perdus ;
  • les dossiers storage/app (pièces jointes, licence) et public/uploads (logos).

Changer de serveur : retirez la licence sur l'ancienne installation, installez la nouvelle, restaurez la base, le .env et les fichiers, puis activez la clé.

Tâches planifiées

La tâche planifiée lancée chaque minute déclenche :

QuandTâche
06:00Factures de renouvellement
06:30Suspension, puis suppression des services impayés
07:00Clôture des tickets inactifs
09:00Rappels et relances
Toutes les 15 minTransmission des factures électroniques
Toutes les heuresDescentes en gamme programmées, renouvellement du jeton de licence
Toutes les 6 hCatalogue de la boutique et recherche de mise à jour

Dépannage

Les factures de renouvellement ne partent pas

La tâche planifiée ne tourne pas, ou pas avec la bonne version de PHP. Vérifiez-la, puis lancez php artisan schedule:run à la main pour voir d'éventuelles erreurs.

« Le serveur de licences ne répond pas »

Le serveur doit pouvoir joindre https://licences.if-net.fr en sortie. Le site continue de fonctionner pendant la période de tolérance ; relancez la vérification dans Paramètres → Licence une fois la connexion rétablie.

« Cette licence est déjà activée sur le nombre maximal d'installations »

Retirez la licence de l'ancienne installation, ou demandez la libération de l'emplacement au support.

Les e-mails n'arrivent pas

Paramètres → Serveur d'envoi, bouton d'e-mail de test : le message d'erreur indique la cause (identifiants, port, chiffrement). Le journal de chaque envoi est visible sur la fiche du client.

La connexion directe au panneau échoue

Derrière un proxy, réglez TRUSTED_PROXIES. Pour KeyHelp, l'adresse IP d'if-Panel doit être autorisée sur la clé d'API.

La console Pterodactyl ne se connecte pas

Ajoutez l'adresse d'if-Panel dans allowed_origins de la configuration de Wings, puis redémarrez Wings.

Une page affiche « Service momentanément indisponible »

C'est la page d'incident : la cause est écrite dans storage/logs. Le plus souvent, la base de données ne répond pas ou le .env est incorrect.

Aller plus loinÉcrire un connecteur

Un connecteur est un module posé dans modules/<identifiant>, avec son module.json et un fournisseur de services qui l'inscrit auprès d'if-Panel.

modules/mon-panneau/
  module.json          identifiant, nom, version, catégorie, fournisseurs
  src/MonPanneauServiceProvider.php
  src/MonPanneauDriver.php
  • Le connecteur hérite de AbstractProvisioningDriver et déclare ses réglages de produit et de serveur : les formulaires de l'administration sont générés à partir de cette déclaration.
  • Il exécute et rend compte : il renvoie un résultat (succès ou échec, message, données à conserver) et ne modifie jamais l'état du service lui-même. C'est if-Panel qui tient le journal, les échéances et les états.
  • Les actions non implémentées sont refusées par défaut, plutôt que réussies en silence.

Pour publier un connecteur dans la boutique, ou pour toute question technique, écrivez à contact@if-net.fr.