Application de gestion de flotte automobile pour entreprise. SPA vanilla JS + API REST Node.js/Express + PostgreSQL, orchestrée par Docker Compose.
| Couche | Technologie |
|---|---|
| Frontend | HTML/CSS/JS vanilla (frontend/index.html) |
| API | Node.js + Express |
| Base de données | PostgreSQL 16 |
| Reverse proxy | Nginx |
| Orchestration | Docker Compose |
- Docker + Docker Compose installés
- Git
# 1. Cloner le dépôt
git clone <url-du-repo>
cd flotte_pro
# 2. Configurer les variables d'environnement
cp .env.example .env
# Éditer .env et remplacer les valeurs "changeme"
# 3. Démarrer tous les services
docker compose up -d --buildL'application est accessible sur http://localhost (port 80 par défaut, configurable via PORT dans .env).
Les migrations SQL s'exécutent automatiquement au démarrage de l'API.
| Variable | Description | Valeur par défaut |
|---|---|---|
PORT |
Port d'écoute Nginx | 80 |
POSTGRES_USER |
Utilisateur PostgreSQL | flotte |
POSTGRES_PASSWORD |
Mot de passe PostgreSQL | — |
POSTGRES_DB |
Nom de la base | flotte_pro |
JWT_SECRET |
Clé de signature JWT | — |
ADMIN_PRENOM |
Prénom du compte admin prod | Admin |
ADMIN_NOM |
Nom du compte admin prod | Prod |
ADMIN_EMAIL |
Email du compte admin prod | — |
ADMIN_PASSWORD |
Mot de passe du compte admin prod | — |
# Démarrer tous les services
docker compose up -d
# Arrêter
docker compose down
# Rebuild API uniquement (après modification du code API)
docker compose up -d --build api
# Voir les logs API en direct
docker compose logs api -f
# Voir les logs de tous les services
docker compose logs -fLe script seed.js remet à zéro la base, injecte un jeu de données complet, puis recrée l'admin depuis le .env.
docker compose exec api node src/seed.jsComptes créés (mot de passe unique : flotte123) :
| Rôle | |
|---|---|
| Gestionnaire | m.dupont.rh@entreprise.fr |
| Gestionnaire | jp.blanc@entreprise.fr |
| Gestionnaire | c.rousseau@entreprise.fr |
| Salarié | (plusieurs, voir seed.js) |
Le script wipe-prod.js vide toutes les tables et recrée uniquement le compte admin depuis le .env (sans données de test).
docker compose exec api node src/wipe-prod.jsLes variables ADMIN_EMAIL et ADMIN_PASSWORD sont obligatoires dans le .env.
flotte_pro/
├── frontend/
│ └── index.html # SPA complète
├── api/
│ ├── Dockerfile
│ ├── package.json
│ ├── db/
│ │ └── schema.sql # Schéma PostgreSQL initial
│ └── src/
│ ├── index.js # Entry point Express + migrations auto
│ ├── db.js # Pool PostgreSQL
│ ├── seed.js # Données de test (wipe complet + admin depuis .env)
│ ├── wipe-prod.js # Wipe prod : vide tout + recrée admin depuis .env
│ ├── middleware/
│ │ └── auth.js # Vérification JWT + requireRole()
│ └── routes/ # auth, users, vehicules, km, contacts,
│ # entretien, sinistres, documents,
│ # messages, regles, dashboard
├── nginx.conf # Config reverse proxy
├── docker-compose.yml
├── .env.example
└── .env # Non versionné
- gestionnaire : accès complet (tableau de bord, validation km, gestion comptes, etc.)
- salarie : accès limité à ses propres données (saisie km, signalements, messagerie, etc.)
Le rôle est stocké en base et transmis dans le JWT. Il n'est pas modifiable côté client.
node api/src/reset-pwd.jsServeur OVH : farid@10.0.10.130 — /home/farid/flotte-pro — port 8081
# 1. Créer le dossier sur le serveur
ssh farid@10.0.10.130 "mkdir -p ~/flotte-pro"
# 2. Envoyer les fichiers (depuis la machine locale)
rsync -avz --exclude='.git' --exclude='node_modules' --exclude='.next' \
--exclude='uploads' --exclude='*.log' --exclude='.DS_Store' \
--exclude='.rtk' --exclude='.venv' \
/home/farid/Documents/projets_accro/flotte-pro/ farid@10.0.10.130:~/flotte-pro/
# 3. Envoyer le .env (non transféré par rsync)
scp .env farid@10.0.10.130:~/flotte-pro/.env
# 4. Builder et démarrer
ssh farid@10.0.10.130 "cd ~/flotte-pro && docker compose up -d --build"rsync -avz --exclude='.git' --exclude='node_modules' --exclude='.next' \
--exclude='uploads' --exclude='*.log' --exclude='.DS_Store' \
--exclude='.rtk' --exclude='.venv' \
/home/farid/Documents/projets_accro/flotte-pro/ farid@10.0.10.130:~/flotte-pro/
ssh farid@10.0.10.130 "cd ~/flotte-pro && docker compose up -d --build api"# Dump local
docker exec flotte-pro-db-1 pg_dump -U flotte flotte_pro > /tmp/flotte-pro-dump.sql
# Envoyer
scp /tmp/flotte-pro-dump.sql farid@10.0.10.130:/tmp/
# Vider et recréer la BDD sur le serveur
ssh farid@10.0.10.130 "docker exec flotte-pro-db-1 dropdb -U flotte flotte_pro && \
docker exec flotte-pro-db-1 createdb -U flotte -O flotte flotte_pro"
# Restaurer
ssh farid@10.0.10.130 "docker exec -i flotte-pro-db-1 psql -U flotte flotte_pro < /tmp/flotte-pro-dump.sql"