- Application FastAPI avec SQLite et Jinja2 - Gestion des véhicules (VIN, immatriculation, infos libres) - Gestion des interventions avec statut (en_attente/en_cours/termine) - Gestion des pièces détachées avec photos - Tableau de bord avec statistiques - Déploiement Docker + Traefik (HTTPS) - README complet en français
6.9 KiB
🔧 GarageManager
Application web de gestion de garage automobile — véhicules, interventions, pièces détachées.
🌐 URL de production : https://garage.nas.percolouco.com
📋 Description
GarageManager est une application web légère permettant de gérer un garage automobile personnel ou professionnel. Elle permet de suivre les véhicules, leurs interventions mécaniques et les pièces utilisées, avec un tableau de bord synthétique.
Pensée pour être self-hostée, elle tourne dans un conteneur Docker derrière un reverse proxy Traefik.
🛠️ Stack technique
| Composant | Technologie | Rôle |
|---|---|---|
| Backend | FastAPI 0.109 | API REST + rendu SSR |
| Base de données | SQLite | Stockage persistant, fichier unique |
| Templates | Jinja2 3.1 | Rendu HTML côté serveur |
| CSS | Tailwind CSS (CDN) | Interface responsive moderne |
| Serveur ASGI | Uvicorn | Serveur HTTP haute performance |
| Conteneur | Docker + Compose | Déploiement clé en main |
| Reverse proxy | Traefik | HTTPS automatique (Let's Encrypt) |
✨ Fonctionnalités
🚗 Gestion des véhicules
- Ajout de véhicules avec les informations clés :
- Immatriculation (clé unique, mise en majuscules automatiquement)
- Marque, modèle, année, kilométrage
- Numéro VIN (Vehicle Identification Number)
- Infos libres par véhicule : notes texte, liens URL, photos — système extensible
- Recherche par immatriculation, marque, modèle ou VIN
- Compteur d'interventions par véhicule
- Suppression en cascade (interventions + pièces supprimées automatiquement)
🔩 Gestion des interventions
- Création d'interventions liées à un véhicule
- Champs disponibles :
- Description de l'intervention
- Statut :
En attente/En cours/Terminé - Coût main-d'œuvre
- Technicien responsable
- Notes internes
- Suivi du coût total (main-d'œuvre + pièces)
- Filtrage par statut
🔧 Gestion des pièces détachées
- Association de pièces à chaque intervention :
- Nom de la pièce
- Référence constructeur
- Marque de la pièce
- Prix unitaire et quantité
- Photo (upload d'image)
- Calcul automatique du coût total par intervention
📊 Tableau de bord
- Vue synthétique en temps réel :
- Nombre de véhicules enregistrés
- Interventions par statut (en attente / en cours / terminées)
- Coût total des interventions terminées (pièces + main-d'œuvre)
- 5 dernières interventions avec accès rapide
📁 Structure du projet
garagemanager/
├── app/
│ ├── __init__.py
│ └── main.py # Application FastAPI (routes, DB, logique)
├── templates/
│ ├── base.html # Template de base (nav, layout)
│ ├── dashboard.html # Tableau de bord
│ ├── vehicules.html # Liste des véhicules
│ ├── vehicule_form.html # Formulaire ajout/édition véhicule
│ ├── vehicule_detail.html # Détail véhicule + interventions + infos
│ ├── interventions.html # Liste des interventions
│ ├── intervention_form.html # Formulaire ajout/édition intervention
│ └── intervention_detail.html # Détail intervention + pièces
├── data/ # Volume persistant (ignoré par git)
│ └── garage.db # Base SQLite
├── Dockerfile # Image Docker Python 3.12-slim
├── docker-compose.yml # Déploiement avec Traefik
├── requirements.txt # Dépendances Python
└── README.md
🚀 Installation
Prérequis
- Docker & Docker Compose installés
- (Optionnel) Traefik configuré pour HTTPS automatique
1. Cloner le dépôt
git clone http://192.168.1.29:3500/perco/garagemanager.git
cd garagemanager
2. Démarrer avec Docker Compose
Avec Traefik (production) :
docker compose up -d
L'application sera accessible via https://garage.nas.percolouco.com si Traefik est configuré avec le réseau proxy.
Sans Traefik (local/dev) :
Modifier docker-compose.yml pour exposer un port directement :
ports:
- "8000:8000"
Puis :
docker compose up -d
Accessible sur : http://localhost:8000
3. Développement local (sans Docker)
# Créer un environnement virtuel
python3 -m venv venv
source venv/bin/activate
# Installer les dépendances
pip install -r requirements.txt
# Lancer le serveur avec rechargement automatique
DB_PATH=./data/garage.db uvicorn app.main:app --reload --port 8000
Accessible sur : http://localhost:8000
🗄️ Base de données
La base SQLite est initialisée automatiquement au démarrage. Le schéma comprend 4 tables :
| Table | Description |
|---|---|
vehicules |
Véhicules (immat, marque, modèle, VIN, km) |
vehicule_infos |
Infos libres par véhicule (texte/url/image) |
interventions |
Interventions mécaniques avec statut et coûts |
pieces |
Pièces détachées liées aux interventions |
Les suppressions en cascade sont gérées par des contraintes SQLite (ON DELETE CASCADE).
🐳 Variables d'environnement
| Variable | Défaut | Description |
|---|---|---|
DB_PATH |
/data/garage.db |
Chemin de la base SQLite |
UPLOAD_DIR |
/data/uploads |
Dossier de stockage des photos |
🔄 Mise à jour
# Arrêter le conteneur
docker compose down
# Récupérer les dernières modifications
git pull
# Reconstruire l'image et redémarrer
docker compose up -d --build
📝 Notes
- Les données sont persistées dans le dossier
./data/(volume Docker) - Les photos uploadées sont stockées dans
./data/uploads/ - Le dossier
data/est exclu du dépôt git (.gitignore) - L'application ne gère pas d'authentification — à protéger via Traefik middleware si nécessaire
🏷️ Versions
| Version | Notes |
|---|---|
| v2.1 | Infos libres véhicule (texte/url/image), upload photos pièces |
| v2.0 | Ajout gestion des pièces détachées |
| v1.0 | Gestion véhicules + interventions |
Développé avec ❤️ pour la gestion de garage automobile