Glossaire
Les mots techniques utilisés dans cette documentation, expliqués simplement.
Général
API : Un programme qui ne fait pas d'écran : il reçoit des demandes (requêtes) et renvoie des données. Ici, l'API TimeManager reçoit par exemple « donne-moi les heures de l'utilisateur 12 » et répond une liste en JSON.
Requête HTTP : Un message envoyé à une adresse web. Il a une méthode : GET pour lire, POST pour créer, PUT pour modifier, DELETE pour supprimer. Le serveur répond avec un code : 200 tout va bien, 401 pas connecté, 403 pas le droit, 404 introuvable, 422 données refusées, 500 erreur du serveur.
JSON : Un format de texte pour échanger des données : { "id": 12, "email": "a@b.fr" }.
Client : Ce qui appelle l'API : le site web et l'application mobile.
Frontend / Backend : Le frontend est la partie visible (les écrans). Le backend est la partie serveur (l'API et la base).
Base de données : L'endroit où les données sont rangées durablement. Ici, PostgreSQL.
Monorepo : Un seul dépôt Git qui contient plusieurs projets.
Authentification
Cookie : Un petit texte que le serveur demande au navigateur (ou au téléphone) de garder et de renvoyer à chaque requête.
HttpOnly : Un cookie que le code JavaScript ne peut pas lire. Même si un script malveillant tournait dans l'app, il ne pourrait pas voler la session.
JWT (JSON Web Token) : Un jeton signé par le serveur qui prouve qui tu es. Ici il dure 1 heure.
Refresh token : Un second jeton, valable 30 jours, qui sert uniquement à obtenir un nouveau JWT quand l'ancien a expiré. On reste ainsi connecté sans retaper son mot de passe.
CSRF : Une attaque où un autre site essaie d'envoyer une requête à ta place en profitant de tes cookies. Pour l'empêcher, l'API exige en plus un jeton CSRF dans un en-tête, que seul le vrai client connaît.
Mobile
React : Une bibliothèque pour construire des interfaces avec des composants : des fonctions qui renvoient ce qu'il faut afficher.
React Native : React pour les applications mobiles. Au lieu de <div>, on écrit <View>, et React Native le transforme en vrai composant iOS ou Android.
Expo : Une boîte à outils autour de React Native : elle gère la compilation, l'accès aux fonctions du téléphone (vibrations, stockage sécurisé, partage...) et permet de tester l'app sans Xcode ni Android Studio.
Expo Go : Une application à installer sur ton téléphone. Elle lit un QR code et lance ton app en développement, instantanément.
Hook : Une fonction React dont le nom commence par use (useState, useQuery...). Elle donne à un composant de la mémoire ou un comportement.
Context / Provider : Un moyen de partager une valeur (l'utilisateur connecté par exemple) avec tous les composants en dessous, sans la passer de main en main.
Route : Une adresse dans l'app, comme /sign-in ou /team. Avec expo-router, chaque fichier de src/app/ est une route.
TypeScript : JavaScript avec des types. Il signale les erreurs (une faute de nom, un mauvais type) avant même de lancer l'app.
DevOps
Machine virtuelle (VM) : Un ordinateur simulé, loué chez un hébergeur (ici Google Cloud). On s'y connecte en SSH.
SSH : Une connexion sécurisée pour taper des commandes sur une machine distante.
Docker : Un outil qui emballe une application et tout ce dont elle a besoin dans une image. On lance ensuite cette image en conteneur, de la même façon partout.
Image / conteneur : L'image est le modèle figé (comme un fichier d'installation). Le conteneur est une copie de l'image en train de tourner.
Docker Compose : Un fichier YAML qui décrit plusieurs conteneurs qui vont ensemble (front, back, base) et les lance d'une commande.
Registry : Un entrepôt d'images Docker. Ici, GitHub Container Registry (ghcr.io).
Reverse proxy : Un aiguilleur placé devant les applications. Il reçoit toutes les requêtes et les envoie au bon conteneur selon l'adresse demandée. Ici, Traefik.
TLS / HTTPS / Let's Encrypt : HTTPS, c'est HTTP chiffré grâce à TLS. Il faut un certificat, fourni gratuitement par Let's Encrypt.
Ansible : Un outil qui configure des serveurs à partir de fichiers YAML. Au lieu de taper 50 commandes à la main, on décrit l'état voulu et Ansible le met en place.
Playbook / rôle / tâche : Une tâche est une action (installer un paquet). Un rôle regroupe des tâches sur un sujet (Docker, Traefik). Un playbook dit quels rôles appliquer sur quelles machines.
Ansible Vault : Un fichier chiffré qui contient les secrets (mots de passe, clés). Il est dans Git, mais illisible sans le mot de passe du vault.
CI/CD : Intégration continue et déploiement continu : à chaque changement, un robot teste, construit et met en ligne automatiquement.
Jenkins : Le robot de CI/CD utilisé ici.
Pipeline : La suite d'étapes que Jenkins exécute : tests, build, scan, push, déploiement.
Trivy : Un scanner qui cherche des failles de sécurité connues dans une image Docker.
UFW : Le pare-feu d'Ubuntu. Il bloque tous les ports sauf ceux qu'on autorise.