Objectif
À quoi sert le projet ?
FitLab est une application pensée pour centraliser le suivi sportif d’un utilisateur :
entraînements, nutrition, progression, abonnements et accompagnement par un coach.
Le projet distingue plusieurs profils : athlètes, coachs et administrateurs. Chaque profil
dispose de besoins différents, de la consultation des performances jusqu’à la gestion complète
des utilisateurs, rôles, données et aspects de sécurité.
Fonctionnalités
Ce que permet l’application
Suivi sportif
Suivi des entraînements, historique, objectifs et progression quotidienne.
Nutrition
Gestion des repas, données nutritionnelles et suivi alimentaire personnalisé.
Coaching
Choix d’un coach, affectation de programmes et supervision des athlètes.
Abonnements
Modèle freemium avec plusieurs offres et logique de paiement prévue.
Communauté
Demandes d’amis, messagerie et interactions entre utilisateurs.
Administration
Gestion des rôles, utilisateurs, données et sécurité de la plateforme.
Architecture
Architecture technique
FitLab repose sur une architecture moderne en plusieurs couches. Le client Flutter communique
avec une API via HTTPS/TLS. Supabase assure l’authentification, la base PostgreSQL, le temps réel
et le stockage. L’infrastructure est pensée pour isoler le backend et exposer uniquement un point
d’entrée maîtrisé.
Client Flutter
Nginx
API Backend
Supabase
Base de données
Supabase & PostgreSQL
Supabase a été utilisé comme backend tout-en-un : authentification, base PostgreSQL,
données temps réel, Edge Functions et stockage. Ce choix permet une communication directe
avec le SDK Flutter tout en gardant une base relationnelle robuste.
- Base PostgreSQL structurée avec plusieurs tables interconnectées.
- Gestion des comptes utilisateurs et de l’authentification.
- Relations entre athlètes, coachs, entraînements, repas, messages et abonnements.
- Synchronisation et logique temps réel selon les besoins applicatifs.
Réseau & infrastructure
Déploiement et isolation
La partie réseau repose sur une logique de conteneurisation avec Docker. Le frontend Flutter Web
est servi via Nginx, tandis que le backend reste isolé dans le réseau Docker interne.
L’utilisateur ne contacte qu’un point d’entrée unique, ce qui simplifie l’architecture et réduit
l’exposition du backend.
- Déploiement sur VM Ubuntu.
- Docker et Docker Compose pour lancer les services.
- Nginx comme serveur de fichiers Flutter Web et reverse proxy.
- Backend non exposé directement à Internet.
- Résolution des problématiques Flutter Web : CanvasKit, CSP, assets et Single Page Application.
Sécurité
Sécurisation mise en place
Une attention particulière a été portée à la sécurité : durcissement SSH, isolation du backend,
reverse proxy, en-têtes de sécurité, Content Security Policy, WAF ModSecurity, tests de sécurité
et supervision.
- Connexion SSH par clé uniquement.
- Désactivation du mot de passe et de l’accès root.
- Protection contre XSS, clickjacking et content sniffing via headers.
- Content Security Policy pour limiter les sources chargées par le navigateur.
- WAF ModSecurity pour filtrer les requêtes malveillantes.
- Scans de vulnérabilités avec OWASP ZAP, Nikto et Wapiti.
Supervision & continuité
Monitoring, PCA/PRA
Le projet intègre une réflexion sur la supervision et la continuité de service. Prometheus,
Grafana et Node Exporter permettent de suivre les ressources serveur, tandis que des sauvegardes
et procédures de reprise assurent une meilleure résilience.
- Surveillance CPU, RAM, disque et trafic réseau.
- Détection des comportements anormaux.
- Sauvegarde automatique des configurations critiques.
- Procédure de reconstruction du serveur en moins d’une heure.
Compétences mobilisées
Ce que ce projet démontre
Flutter
Supabase
PostgreSQL
Docker
Nginx
Reverse proxy
VM Ubuntu
SSH sécurisé
Headers HTTP
CSP
ModSecurity
OWASP ZAP
Nikto
Wapiti
Prometheus
Grafana
Apports
Ce que ce projet m’a apporté
FitLab m’a permis de travailler sur un projet complet mêlant application mobile, base de données,
backend, infrastructure et cybersécurité. Mon rôle sur la partie réseau m’a permis de renforcer mes
compétences en déploiement, reverse proxy, sécurisation de serveur, Docker et supervision.
Le projet m’a aussi permis d’aborder des problématiques réalistes : exposition minimale des services,
sécurisation des communications, durcissement d’une VM, gestion des erreurs, logs, tests de sécurité
et continuité d’activité.