Prise en main de Dalibi, de A à Z

Installez, configurez, lancez et comprenez Dalibi. Ce guide vous mène du dépôt vide à une instance fonctionnelle que vous maîtrisez.

Découvrir

Qu'est-ce que Dalibi ?

Dalibi est un logiciel libre et open-source(GPL v3) de gestion d'établissement scolaire, pensé pour le Togo et l'Afrique (primaire, collège, lycée). Il couvre toute la vie de l'école : élèves, notes, examens, présences, finances, personnel et documents.

Techniquement, c'est une application Laravel 12 (PHP 8.3+) avec une interface React 19 + TypeScript reliée par Inertia.js (SPA sans API séparée), sur PostgreSQL. En auto-hébergement, vos données restent chez vous.

Version stable : v1.0.0

La version stable actuelle. Ce guide décrit la v1.0.0 — voir le journal des versions.

Scolarité

Élèves & inscriptions, notes & bulletins, examens officiels, présences, emploi du temps.

Gestion

Comptabilité & écolage, personnel & paie, caisses, dépenses, statistiques de pilotage.

Cadre

Rôles & permissions fins, documents PDF, archives, sauvegardes et portail parents/élèves.

Étape 1

Prérequis

Sur votre machine (ou serveur), installez :

  • PHP 8.3+ avec les extensions usuelles (pdo_pgsql, mbstring, zip, gd, intl).
  • Composer (gestionnaire de dépendances PHP).
  • PostgreSQL 12+ (recommandé). SQLite convient pour un test rapide.
  • Node.js 20+ et npm (build de l'interface).
  • Git.

Optionnel mais recommandé

Les binaires pg_dump / pg_restore (client PostgreSQL) pour les sauvegardes SQL natives, et Docker pour un déploiement de production reproductible.

Étape 2

Installation locale

1

Cloner le dépôt et installer les dépendances

Terminal
$ git clone https://github.com/wearedalibi/dalibi.git
$ cd dalibi
$ composer install
$ npm install
2

Préparer l'environnement

Terminal
$ cp .env.example .env
$ php artisan key:generate

Ouvrez ensuite .env et renseignez la base de données (voir Configuration).

3

Créer le schéma et les données de base

Terminal
# Développement : schéma + données de référence + comptes de démo
$ php artisan migrate --seed
# Lien symbolique pour les fichiers publics
$ php artisan storage:link

--seed exécute le DatabaseSeeder (données de démonstration, dont des comptes prêts à l'emploi). Pour la production, on seede uniquement les données de référence — voir Seeding & premier démarrage.

4

Compiler l'interface et lancer le serveur

Terminal
# Développement (rechargement à chaud)
$ npm run dev
$ php artisan serve
 
# …ou build de production
$ npm run build
$ php artisan serve

L'application est disponible sur http://localhost:8000.

5

Traitements en arrière-plan (files d'attente & planificateur)

Les e-mails et les sauvegardes manuellespassent par une file d'attente ; les sauvegardes planifiées par le planificateur. En local :

Terminal
$ php artisan queue:work # worker (e-mails, sauvegardes manuelles)
$ php artisan schedule:work # planificateur (tâches automatiques)

Sans worker actif

Les sauvegardes lancées depuis l'interface et les e-mails restent en attente et ne s'exécutent jamais. Gardez un queue:work en service.

Alternative

Installation Docker (production)

Pour un déploiement reproductible, une image et une configuration Docker sont fournies dans le dépôt (services app, worker, scheduler, PostgreSQL). Le schéma type :

Terminal
$ cp .env.example .env # renseigner APP_KEY, DB_*, MAIL_*
$ docker compose up -d --build
$ docker compose exec app php artisan migrate --seed
$ docker compose exec app php artisan storage:link
Le service scheduler doit tourner en un seul exemplaire (sinon sauvegardes en double). Détails et fichiers de déploiement dans le guide de déploiement.

Étape 3

Configuration (.env)

Les variables essentielles à renseigner dans .env :

.env
APP_NAME=Dalibi
APP_URL=http://localhost:8000
 
# Base de données (PostgreSQL)
DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=dalibi
DB_USERNAME=postgres
DB_PASSWORD=secret
 
# Files d'attente (recommandé : database)
QUEUE_CONNECTION=database
 
# E-mails (pour notifications, ex. échec de sauvegarde)
MAIL_MAILER=smtp
MAIL_HOST=...
MAIL_USERNAME=...
MAIL_PASSWORD=...
 
# Génération des matricules
MATRICULE_COUNTRY_CODE=TG

Le stockage des fichiers(local ou S3/R2) se configure ensuite depuis l'interface (Paramètres → Fichiers & Stockage), pas seulement via .env. Voir aussi la référence complète du .env.

Étape 3b

Configurer les e-mails (SMTP)

Dalibi envoie des e-mails (notifications, alerte d'échec de sauvegarde, accès portail…). La messagerie se configure via les variables MAIL_* de Laravel. En développement, la valeur par défaut MAIL_MAILER=log écrit les mails dans les logs (aucun envoi réel).

.env — envoi réel (SMTP)
MAIL_MAILER=smtp
MAIL_HOST=smtp.votre-fournisseur.com
MAIL_PORT=587
MAIL_USERNAME=...
MAIL_PASSWORD=...
MAIL_FROM_ADDRESS=no-reply@votre-domaine.tg # sur un domaine que vous contrôlez
MAIL_FROM_NAME="${APP_NAME}"

Délivrabilité : éviter les spams

Pour que les mails arrivent en boîte de réception, l'adresse MAIL_FROM_ADDRESS doit être sur un domaine authentifié : configurez SPF, DKIM et DMARC dans votre DNS, via un fournisseur transactionnel (Brevo, Mailgun, Postmark, Resend…). Un domaine non authentifié part en spam. Testez avec mail-tester.com.

Rappel : les e-mails et les sauvegardes manuelles passent par la file d'attente — un worker doit tourner (voir Installation et Mise en production).

Étape 4

Seeding & premier démarrage

Le seeding pré-remplit la base. C'est aussi par là que naît le premier utilisateur: l'inscription publique est désactivée, aucun compte ne peut s'auto-créer. Quatre points d'entrée existent, du plus minimal au plus complet :

SeederContenuUsage
RolesAndPermissionsSeeder~145 permissions + les rôles de base.Minimum vital.
ReferenceDataSeederRôles/permissions + catalogues: pays, types de classes, classes PS→Tle, matières, catégories de frais, types d'évaluation, bourses, tags. Idempotent, sans données de démo.Production.
DefaultUsersSeederÉcole « École Centrale » + 1 compte par rôle (mot de passe password).Démo / dev.
DatabaseSeeder (défaut de db:seed)ReferenceData + DefaultUsers + modèles de documents + élèves fictifs (inscrits à l'année active).Dev / démo — bloqué en prod.
DemoSeederUne année scolaire complètesur toutes les classes (≥ 20 élèves) : notes, moyennes, bulletins, factures & paiements, présences, emploi du temps, calendrier, paie — noms et villes réels (Togo).Démo riche — bloqué en prod.

Le choix du seeder est manuel

Il n'y a pas de bascule automatique selon l'environnement: c'est vous qui choisissez le seeder à lancer (démo en dev, ReferenceDataSeeder en prod). Laravel ajoute toutefois un garde-fou — en production, db:seed et migrate --seeddemandent une confirmation et refusent de s'exécuter sans --force (utile en déploiement non-interactif).

Développement / démo — connexion immédiate

php artisan migrate --seed exécute le DatabaseSeeder : vous obtenez une école et cinq comptes prêts à l'emploi, tous avec le mot de passe password.

Comptes de démonstration
admin@dalibi.tg → Administrateur
directeur@dalibi.tg → Directeur
enseignant@dalibi.tg → Enseignant
comptable@dalibi.tg → Comptable
secretaire@dalibi.tg → Secrétaire
# Mot de passe commun : password

Changement de mot de passe imposé

Ces comptes portent un mot de passe connu : à la première connexion, l'application oblige à en définir un nouveauavant de donner accès au reste de l'interface.

Protection automatique en production

Les seeders de démonstration (DefaultUsersSeeder, StudentTestSeeder) sont automatiquement ignorés lorsque APP_ENV=production — même avec db:seed --force. Un db:seeden production n'installe donc que les données de référence.

Données de démonstration complètes

Pour présenter l'application avec une école qui « vit », le DemoSeeder génère une année scolaire entièresur toutes les classes actives (au moins 20 élèves par classe) : dossiers d'élèves, programme et affectations des enseignants, évaluations notées et moyennes par matière, bulletins figés, facturation et paiements, présences, emploi du temps, calendrier, cycles de paie et dossiers courants (justificatifs, réclamations, primes, documents). Les noms, prénoms et villes sont réels (divisions administratives du Togo).

Il se lance aprèsun seed de base (qui pose l'école, l'année, les classes et les matières) — il ne fait pas partie de DatabaseSeeder, trop lourd pour chaque installation :

Terminal
# 1. socle : école, année, classes, matières, comptes de démo
$ php artisan migrate --seed
 
# 2. jeu de démonstration complet (une année scolaire vivante)
$ php artisan db:seed --class=DemoSeeder

Idempotent et déterministe

Relançable sans doublon (il complète chaque classe jusqu'à l'effectif cible) et reproductible d'une machine à l'autre (graine fixe). Comme les autres seeders de démonstration, il est ignoré en production.

Production — seeding prod-safe + premier admin

En production, on migre puis on ne seede que les données de référence (aucun compte de démo, aucun élève fictif) :

Terminal
$ php artisan migrate --force
$ php artisan db:seed --class=ReferenceDataSeeder --force

Il ne reste plus qu'à créer votre premier administrateur. Via Tinker :

php artisan tinker
$u = App\Models\User::create([
'firstname' => 'Admin',
'lastname' => 'École',
'email' => 'admin@monecole.tg',
'gender' => 'male',
'password' => 'un-mot-de-passe-fort', // haché automatiquement
]);
$u->assignRole(App\Constants\Roles::ADMINISTRATOR); // le matricule est généré automatiquement

Alternative rapide : lancer db:seed --class=DefaultUsersSeeder puis changer immédiatement le mot de passe du compte admin@dalibi.tg et supprimer les comptes de démo superflus.

Configurer l'établissement

Connectez-vous, puis suivez l'ordre logique (les catalogues classes/matières/frais sont déjà pré-remplis par ReferenceDataSeeder — il reste à les adapter à votre école) :

Provisionnement automatique

À la création d'un établissement, son en-tête de documents et son modèle de bulletin par défaut sont générés automatiquement — rien à seeder.
1

Paramétrer l'établissement

École (nom, logo, en-tête des documents), année académique active, périodes (trimestres/semestres), classes et matières.
2

Définir la scolarité financière

Structures de frais (à partir des catégories seedées), bourses éventuelles, caisses.
3

Créer les comptes du personnel

Utilisateurs (enseignants, secrétariat, comptabilité) avec leurs rôles.
4

Inscrire les élèves

Dossiers élèves, inscriptionsà l'année active, affectation aux classes.
5

Faire vivre l'année

Appel des présences, saisie des notes, génération des bulletins, encaissement de l'écolage, documents et archives.

Étape 5

Mise en production

Passer d'un lancement local à une instance de production demande quelques réglages de robustesse et de sécurité.

1

Régler l'environnement

.env
APP_ENV=production
APP_DEBUG=false
APP_URL=https://ecole.votre-domaine.tg
# APP_KEY doit être défini (php artisan key:generate) et gardé secret
2

Installer et compiler pour la prod

Terminal
$ composer install --no-dev --optimize-autoloader
$ npm ci && npm run build
$ php artisan optimize # config:cache + route:cache + view:cache
$ php artisan storage:link
3

Servir derrière HTTPS

Un reverse proxy(Nginx ou Caddy) devant PHP-FPM, avec un certificat TLS (Let's Encrypt). Assurez-vous qu'il transmet l'en-tête X-Forwarded-Proto pour que Laravel génère des URLs en https.

4

Worker de file d'attente en service

Indispensable (sinon e-mails et sauvegardes manuelles ne partent jamais). À superviser avec systemd ou Supervisor pour redémarrage automatique :

Terminal
$ php artisan queue:work --tries=3
5

Planificateur (tâches automatiques)

Une seule entrée cron qui déclenche le planificateur Laravel :

crontab
* * * * * cd /chemin/app && php artisan schedule:run >> /dev/null 2>&1
6

Droits & prérequis

storage/ et bootstrap/cache/ accessibles en écriture par le serveur web ; pg_dump / pg_restore installés pour les sauvegardes SQL natives.

Un seul planificateur

N'exécutez qu'un seul scheduler (une seule machine / un seul conteneur) — sinon les sauvegardes planifiées se déclenchent en double.

Une image et une configuration Docker (services app / worker / scheduler / PostgreSQL) sont fournies — voir le guide de déploiement.

Comprendre

Comment l'application est construite

Dalibi est un monolithe modulaire : une seule application Laravel qui rend directement des pages React via Inertia.js. Il n'y a donc pas d'API REST séparée pour l'interface — le contrôleur renvoie une page et ses données en une fois. Une API REST distincte existe uniquement pour le portail parents/élèves (voir la section API). La logique métier est regroupée dans des services, et l'accès est filtré par permission à chaque route.

Modules

Un contrôleur et un jeu de pages par module ; la navigation (menu.ts) est la source unique des entrées, filtrée par permission.

Services métier

La logique complexe (paie, moyennes, compta, PDF…) vit dans des services testables, réutilisés par les contrôleurs et les commandes.

Front

React 19 + TypeScript dans resources/js/pages, design-system maison, listes normalisées (filtres + bouton « Rechercher » + pagination).

Données

PostgreSQL, migrations Laravel, identifiants UUID, journal d'audit des actions, dictionnaire des tables documenté.

Le cycle d'une requête

Un clic sur un lien Inertia déclenche une requête serveur classique ; Laravel répond avec la page et ses données, React met à jour l'écran sans rechargement complet.

De l'URL à l'écran
Navigateur (Link Inertia)
Route routes/web.php ──► middleware can:view_students
Contrôleur StudentController@index
Service métier ──► Modèles Eloquent ──► PostgreSQL
Inertia::render('Eleves/Index', props)
Page React resources/js/pages/Eleves/Index.tsx

Données partagées à chaque page

Inertia partage automatiquement, sur toutes les pages : l'utilisateur connecté, ses rôles et la liste de ses permissions, ainsi que la monnaiede l'établissement. C'est ce qui permet au front de n'afficher que les menus, cartes et actions autorisés — sans requête supplémentaire.

Structure du code

Arborescence
app/
├── Http/Controllers/ ← 1 contrôleur par écran / ressource
├── Models/ ← entités Eloquent (UUID)
├── Services/ ← logique métier réutilisable et testable
├── Jobs/ ← tâches en file d'attente (sauvegardes, e-mails)
├── Notifications/ ← e-mails (ex. échec de sauvegarde)
└── Constants/ ← Roles, Permissions
resources/js/
├── pages/ ← pages React (Inertia)
├── components/ ← design-system + composants partagés
└── types/menu.ts ← navigation (source des modules)
routes/web.php ← routes + gardes can:*
database/
├── migrations/ ← schéma
└── seeders/ ← données de référence & démo

Les services métier

Le « cerveau » de l'application. Chaque service isole une logique précise, ce qui la rend testable et réutilisable (contrôleurs, commandes CLI, jobs) :

  • GradingServicecalcul des moyennes et règles de notation (par type de classe, trimestre/semestre)
  • ReportCardBuilder / BulletinRendererconstruction des données puis rendu PDF fidèle des bulletins
  • PayrollServicepaie : ancienneté, CNSS/ITS, génération des bulletins de salaire
  • AccountingServiceécritures comptables : écolage, dépenses, mouvements de caisse
  • InvoiceServicereçus et factures
  • StatisticsServiceindicateurs de pilotage et exports
  • DocumentRendererdocuments PDF (certificats) avec en-tête et filigrane
  • MatriculeServicegénération des matricules et numéros d'enregistrement
  • BackupServicesauvegardes, archives d'année et restauration

Conventions transverses

  • Identifiants UUID sur toutes les tables (pas d'entiers auto-incrémentés exposés).
  • Contrôle d'accès par permission à chaque route (can:*), et permissions partagées au front.
  • Journal d'audit : les actions sensibles sont tracées (qui, quoi, quand).
  • Listes normalisées : filtres + bouton « Rechercher » explicite + pagination, partout.
  • Files d'attente (e-mails, sauvegardes manuelles) + planificateur (tâches automatiques).
  • Stockage séparé : disque media (public) et disque secure (privé), local ou S3/R2.
  • Observabilité optionnelle : logs JSON (Loki/Grafana) + capture d'exceptions (Sentry/GlitchTip).

Comprendre

Les modules en détail

Dalibi s'organise en modules accessibles depuis le menu latéral. Chacun regroupe des fonctions cohérentes, filtrées par vos permissions. Voici ce que couvre chaque module.

Tableau de bord

Synthèse d'activité, composée par permission — chaque profil ne voit que ses sections.

  • Finances : facturé / encaissé / reste, évolution mensuelle, caisses, répartition par moyen de paiement
  • Inscriptions & effectifs : totaux, parité, inscriptions récentes, répartition par classe
  • Vie scolaire : présences du jour, permissions en attente, prochains examens
  • Vue enseignant : emploi du temps du jour, notes à saisir, accès rapide « Faire l'appel »

Élèves & inscriptions

Le cœur de la scolarité : dossiers des élèves et leur parcours d'une année à l'autre.

  • Dossiers élèves complets (état civil, parents, contacts, photo)
  • Inscriptions à l'année académique active et affectation aux classes
  • Effectifs & listes de classe, passage de classe (promotion) en fin d'année
  • Bourses d'étudiants et statistiques élèves (parité, répartition)
  • Emploi du temps hebdomadaire par classe

Présences

Suivi de l'assiduité au quotidien.

  • Saisie de l'appel par classe et par séance
  • Statistiques d'assiduité (taux de présence, absences répétées)
  • Demandes et justificatifs de permission d'absence

Examens

Organisation des évaluations, des devoirs de classe aux examens officiels.

  • Modèles d'évaluation réutilisables
  • Évaluations par classe et planning des examens
  • Examens officiels (CEPD, BEPC, BAC) et suivi des résultats

Notes & bulletins

De la saisie des notes au bulletin PDF fidèle.

  • Saisie des notes par matière et par évaluation
  • Calcul des moyennes paramétrable (par type de classe, trimestre ou semestre)
  • Génération des bulletins PDF avec en-tête et modèle configurables
  • Réclamations et révisions de notes

Comptabilité & écolage

Toute la gestion financière de l'établissement.

  • Structures et catégories de frais, écolage par classe
  • Encaissements, reçus vérifiables, situation financière par classe
  • Dépenses et journal des transactions
  • Caisses multiples (dont Mobile Money) et soldes

Personnel & Paie

Ressources humaines et paie du personnel, connectées à la comptabilité.

  • Fiches employés, grilles salariales et rubriques de paie
  • Cycles de paie mensuels : bulletins PDF, validation et décaissement en caisse
  • Ancienneté, CNSS et ITS calculés automatiquement (paramétrables)

Archives & documents

Production et conservation des documents administratifs.

  • Modèles de documents (certificats, attestations) avec en-tête et filigrane par école
  • Archivage des documents générés, corbeille et restauration
  • Classement par tags

Statistiques & pilotage

Indicateurs de direction alignés sur la carte scolaire (MEPSTA).

  • Filtres par année, classe et sexe
  • Indicateurs d'effectifs, de réussite et de vie scolaire
  • Export PDF et Excel sur chaque section

Calendrier

Les événements de l'année scolaire.

  • Événements, échéances et jalons de l'année académique active

Portail parents & élèves

Consultation à distance via une API dédiée (voir la section API).

  • Notes, bulletins PDF, présences et scolarité par enfant
  • Calendrier et informations de l'établissement
  • Authentifié par token (Laravel Sanctum)

Administration

Gestion des accès et traçabilité.

  • Utilisateurs, rôles et permissions (contrôle d'accès fin)
  • Affectations enseignant / matière / classe
  • Journal d'audit des actions et gestion des accès portail

Paramètres

La configuration de référence de l'établissement.

  • École, classes, types de classes, matières, pays
  • Années et périodes académiques, types d'évaluation
  • Catégories et structures de frais, bourses, calcul des moyennes
  • Fichiers & stockage (local / S3), modèles de documents, sauvegardes

Comprendre

Rôles & permissions

L'accès est piloté par les permissions ({capacité}_{module}, ex. view_students, create_marks, delete_backups) — environ 145au total. Un rôle est simplement un ensemble de permissions ; il n'existe pas de super-rôle magique.

  • Administrateur — accès complet, configuration, gestion des comptes.
  • Directeur — école, années, classes, suivi, rapports.
  • Enseignant — ses classes, notes, présences.
  • Comptable — finances, rapports, exports.
  • Secrétaire — élèves & inscriptions, utilisateurs.
  • Parent / Élève — portail de consultation.

Vous pouvez créer un rôle personnalisé depuis Administration → Rôles & permissions : il fonctionne aussitôt (menus, routes, cartes). Détails : guide rôles & permissions.

Ce que le contrôle d'accès garantit

  • Une permission par verbe : un droit de lecture (view_*) ne permet jamais de créer, modifier ou supprimer.
  • Cloisonnement enseignant : un professeur ne saisit notes et appels que dans les classes où il est affecté.
  • Contrôle d'appartenance : on ne note ni ne pointe qu'un élève réellement inscrit dans la classe visée.
  • Comptes à privilèges : seul un administrateur peut modifier ou supprimer un compte administrateur.
  • Un mot de passe défini par un tiers doit être changé à la première connexion.

Comprendre

Stockage & fichiers

Deux disques applicatifs séparent les usages :

  • media — fichiers publics (logos, filigranes, exports) servis via /storage.
  • secure — fichiers sensibles(photos d'élèves, pièces des dossiers), stockés hors du dossier public et servis uniquement via des routes authentifiées.

Les deux suivent la même configuration centralisée : local par défaut, ou S3 / Cloudflare R2 activé depuis Paramètres → Fichiers & Stockage.

Exploiter

Sauvegardes & restauration

Depuis Paramètres → Sauvegardes, aux formats JSON et SQL. Conçu pour tenir sur plusieurs années : écriture en flux, compression gzip, et pg_dump natif sur PostgreSQL (repli portable sinon).

  • Médias au choix : archive .zip regroupant la base + les fichiers uploadés.
  • Archives par année scolaire : instantané verrouillé, exclu de la rétention (manuel ou à la clôture d'année).
  • Intégrité : empreinte SHA-256 vérifiable + alerte e-mail en cas d'échec.
  • Restauration : .json, .sql, .gz, .dump, .zip — avec sauvegarde de sécurité automatique préalable, et restauration sélective par table.
  • Planification : quotidienne/hebdomadaire + rétention (les archives verrouillées ne sont jamais purgées).
Terminal
$ php artisan backup:run --formats=json,sql

Intégrer

API du portail parents & élèves

Le portail expose une API REST (/api/v1) authentifiée par token Laravel Sanctum : notes, bulletins PDF, présences, scolarité et calendrier. La spécification OpenAPI 3.1 est fournie dans le dépôt.

Le portail se configure dans les réglages — désactivé par défaut

Le portail (et donc son API) s'active au niveau de l'écoledepuis Paramètres → École. Surtout, l'accès de chaque parent/élève est désactivé par défaut : il faut l'activer compte par comptedepuis Administration → Accès portail. Tant qu'un compte n'est pas activé, il ne peut ni se connecter au portail ni consommer l'API.

Côté parent/élève: une fois son accès activé (Administration → Accès portail), la personne reçoit ses identifiants, se connecte au portail et consulte — pour chacun de ses enfants — ses notes, bulletins, présences, la scolarité et le calendrier. Aucune saisie : c'est une vue en lecture seule alimentée par l'API.

Spécification OpenAPI

Exploiter

Sécurité & bonnes pratiques

  • Les comptes de démonstration sont bloqués en production et imposent un changement de mot de passe à la première connexion — ne contournez pas ce garde-fou.
  • APP_DEBUG=false en production, et ne commitez jamais l'APP_KEY ni le .env.
  • Servez toujours en HTTPS ; forcez la redirection HTTP → HTTPS.
  • Activez la double authentification (2FA) sur les comptes à privilèges (administrateur, direction).
  • Appliquez le moindre privilège : donnez à chaque rôle uniquement les permissions nécessaires.
  • Écritures financières protégées : encaissements et cycles de paie sont validés sous verrou — un double-clic ne peut pas encaisser ni décaisser deux fois.
  • La preuve d'un encaissement est indestructible : une inscription portant des paiements ne peut pas être supprimée.
  • Sauvegardez régulièrement et hors-site (règle 3-2-1) ; testez la restauration et l'intégrité (SHA-256).
  • Les pièces sensibles (photos, justificatifs) sont déjà sur un disque privé (secure), hors du dossier public.
  • Le journal d'audit trace les actions : consultez-le en cas d'incident.

Exploiter

Mettre à jour l'application

Sauvegardez d'abord

Faites une sauvegarde (base + médias) avant toute mise à jour, et lisez les notes de version.
Terminal
# 1. Récupérer la nouvelle version
$ git pull
 
# 2. Dépendances
$ composer install --no-dev --optimize-autoloader
$ npm ci && npm run build
 
# 3. Base de données
$ php artisan migrate --force
 
# 4. Rafraîchir les caches
$ php artisan optimize:clear
$ php artisan optimize
 
# 5. Redémarrer le worker (recharge le code)
$ php artisan queue:restart

Aide

Dépannage (problèmes fréquents)

Les sauvegardes ou e-mails restent « en attente »

Le worker de file d'attente ne tourne pas. Lancez php artisan queue:work (et supervisez-le en service).

Logos / images en 404

Le lien symbolique manque : php artisan storage:link.

Erreur 500 / « Permission denied » à l'écriture

Droits insuffisants sur storage/ et bootstrap/cache/ pour l'utilisateur du serveur web.

La sauvegarde SQL échoue en production

pg_dump / pg_restore ne sont pas installés. Installez le client PostgreSQL (l'app bascule sinon sur l'export portable).

Erreur 419 « Page expirée » à la connexion

Problème de session/CSRF : vérifiez APP_URL, le domaine des cookies et que le proxy transmet bien le HTTPS (X-Forwarded-Proto).

Styles/JS non chargés ou « contenu mixte »

APP_URL doit être en https et le reverse proxy doit transmettre X-Forwarded-Proto.

Les tâches planifiées ne s'exécutent pas

Le cron du planificateur est absent : ajoutez * * * * * php artisan schedule:run.

Anciennes pages après un déploiement

Videz les caches : php artisan optimize:clear puis php artisan optimize.

Référence

Glossaire métier

Dalibi gère un ou plusieurs établissements (table schools) ; certains paramètres (modèles de bulletin et de documents, en-tête, calcul des moyennes, examens officiels, emploi du temps) sont définis par école.

Année académique
Le cycle scolaire (ex. 2024-2025). Une seule est active à la fois.
Période
Découpage de l'année : trimestre ou semestre, selon le type de classe.
Type de classe
Catégorie (maternelle, primaire, collège…) qui pilote les règles de moyennes.
Structure / catégorie de frais
Le barème d'écolage et sa ventilation, par classe.
Écolage
Les frais de scolarité facturés et encaissés.
Bulletin
Le relevé de notes périodique, généré en PDF depuis un modèle.
Matricule
L'identifiant unique d'un utilisateur ou d'un élève (préfixe par rôle).
Rôle / Permission
Un rôle est un ensemble de permissions ; l'accès est piloté par permissions.
Caisse
Un compte de trésorerie (espèces, Mobile Money…) pour encaissements et dépenses.
Rubrique de paie
Un élément de bulletin de salaire (gain ou retenue).
Portail
L'espace de consultation des parents/élèves, alimenté par l'API.

Aller plus loin

Contribuer & ressources

Dalibi est ouvert aux contributions. Le workflow : branches de fonctionnalité vers develop, PR, puis main. Les tests se lancent avec php artisan test.

Licence GPL v3

Code ouvert et auditable, librement utilisable et modifiable ; il ne peut être revendu comme produit propriétaire.