Compare commits
2
Commits
f6445d66af
..
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
df259258a0 | ||
|
|
d857ccb879 |
@@ -1674,6 +1674,8 @@ La génération PDF est enveloppée dans un `CancellationToken` avec délai de 1
|
||||
|
||||
## Déploiement (Docker Compose)
|
||||
|
||||
> **Procédure de déploiement (Git + Docker)** : le serveur récupère les sources depuis le dépôt Gitea (`http://192.168.1.55:3000/MadJax/SchotzIAD`, branche `master`) et reconstruit les conteneurs — l'ancienne méthode par copie d'archive est abandonnée. Le script `deploy.sh` (à la racine du dépôt) vérifie les prérequis (git, Docker, Docker Compose, présence du `.env`), détecte via `git fetch` si une nouvelle version de `master` est disponible et ne reconstruit (`docker compose up -d --build`) **que** dans ce cas (option `--force` pour forcer un rebuild sans nouveau commit). Le guide complet — installation des prérequis, premier `git clone`, création du `.env` à partir de `.env.example`, mises à jour et dépannage — figure dans **`DEPLOY.md`** à la racine du dépôt.
|
||||
|
||||
### Architecture des conteneurs
|
||||
|
||||
La solution est hébergée via **Docker Compose** avec deux services :
|
||||
|
||||
@@ -0,0 +1,133 @@
|
||||
# Déploiement de SchotzIAD KM Tracker
|
||||
|
||||
Déploiement via **Git (Gitea) + Docker Compose**. Le serveur récupère les
|
||||
sources depuis Gitea et reconstruit les conteneurs — plus besoin de copier une
|
||||
archive.
|
||||
|
||||
- Dépôt Gitea : `http://192.168.1.55:3000/MadJax/SchotzIAD`
|
||||
- Branche déployée : `master`
|
||||
- Frontend exposé sur le port hôte **2202** (derrière le reverse-proxy Caddy externe).
|
||||
|
||||
---
|
||||
|
||||
## 1. Premier déploiement (une seule fois sur le serveur)
|
||||
|
||||
### 1.1 Installer les prérequis
|
||||
|
||||
Le serveur a besoin de **git** et de **Docker** (avec le plugin Compose v2).
|
||||
|
||||
Sur Debian/Ubuntu :
|
||||
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt install -y git
|
||||
# Docker + plugin compose : voir https://docs.docker.com/engine/install/
|
||||
# (paquets docker-ce, docker-ce-cli, containerd.io, docker-compose-plugin)
|
||||
```
|
||||
|
||||
Vérification :
|
||||
|
||||
```bash
|
||||
git --version
|
||||
docker --version
|
||||
docker compose version
|
||||
```
|
||||
|
||||
### 1.2 Cloner le dépôt
|
||||
|
||||
```bash
|
||||
git clone http://192.168.1.55:3000/MadJax/SchotzIAD SchotzIAD
|
||||
cd SchotzIAD
|
||||
```
|
||||
|
||||
Au premier `git clone`/`push`, Gitea demande identifiant + token. Avec le
|
||||
credential helper `store` déjà en place, ils ne sont demandés qu'une fois.
|
||||
|
||||
### 1.3 Créer le fichier `.env`
|
||||
|
||||
Le `.env` n'est **jamais** versionné (il contient les secrets). On le crée à
|
||||
partir du modèle fourni :
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
```
|
||||
|
||||
Puis éditer `.env` et renseigner au minimum :
|
||||
|
||||
- `JWT_SECRET_KEY` : **obligatoire**. Générer une valeur aléatoire longue, ex. :
|
||||
```bash
|
||||
openssl rand -base64 48
|
||||
```
|
||||
(sans cette clé, le backend refuse de démarrer.)
|
||||
- `AUTH_FRONTEND_BASE_URL` : l'URL publique du site (ex. `https://schotz.exemple.fr`),
|
||||
utilisée dans les liens de réinitialisation de mot de passe.
|
||||
- `ORS_API_KEY` : clé OpenRouteService (sinon distances à vol d'oiseau).
|
||||
- `SMTP_*` : facultatif. Si `SMTP_HOST` est vide, le lien de réinitialisation
|
||||
est seulement journalisé côté serveur.
|
||||
|
||||
### 1.4 Premier démarrage
|
||||
|
||||
```bash
|
||||
./deploy.sh --force
|
||||
```
|
||||
|
||||
(`--force` car il n'y a pas de « version précédente » à comparer la première fois.)
|
||||
|
||||
---
|
||||
|
||||
## 2. Mettre à jour le site (à chaque nouvelle version)
|
||||
|
||||
Depuis le dossier du dépôt sur le serveur :
|
||||
|
||||
```bash
|
||||
./deploy.sh
|
||||
```
|
||||
|
||||
Le script :
|
||||
|
||||
1. vérifie les prérequis (git, docker, docker compose, présence du `.env`) ;
|
||||
2. récupère les références distantes (`git fetch`) ;
|
||||
3. **ne reconstruit que si une nouvelle version existe** sur `master` :
|
||||
- si le serveur est déjà à jour, il s'arrête sans rien reconstruire ;
|
||||
- sinon il fait `git pull --ff-only` puis `docker compose up -d --build` ;
|
||||
4. affiche l'état des conteneurs.
|
||||
|
||||
Pour forcer une reconstruction sans nouveau commit (par exemple après avoir
|
||||
modifié `.env`) :
|
||||
|
||||
```bash
|
||||
./deploy.sh --force
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. Données et persistance
|
||||
|
||||
- La base SQLite est persistée via un bind mount dans `./data/trajets.db`
|
||||
(créé au premier démarrage). Elle **survit** aux redéploiements et n'est pas
|
||||
versionnée.
|
||||
- Sauvegarde : il suffit de copier `./data/trajets.db` (idéalement conteneurs
|
||||
arrêtés, ou via une copie à chaud suivie d'un `VACUUM INTO`).
|
||||
|
||||
---
|
||||
|
||||
## 4. Dépannage
|
||||
|
||||
- **`.env absent`** : copier `.env.example` vers `.env` et le renseigner (étape 1.3).
|
||||
- **`git pull --ff-only a échoué`** : l'historique local du serveur a divergé
|
||||
(commits locaux non souhaités). Revenir à l'état distant :
|
||||
```bash
|
||||
git fetch origin
|
||||
git reset --hard origin/master # ⚠ écrase les modifs locales non commitées
|
||||
```
|
||||
- **`JWT_SECRET_KEY requis`** au démarrage du backend : la clé est absente du
|
||||
`.env` (voir étape 1.3).
|
||||
- **Voir les logs** :
|
||||
```bash
|
||||
docker compose logs -f backend
|
||||
docker compose logs -f frontend
|
||||
```
|
||||
- **Redémarrer sans rebuild** :
|
||||
```bash
|
||||
docker compose restart
|
||||
```
|
||||
@@ -0,0 +1,70 @@
|
||||
#!/usr/bin/env bash
|
||||
# Déploiement / mise à jour de SchotzIAD KM Tracker via Git + Docker Compose.
|
||||
#
|
||||
# Récupère la dernière version depuis Gitea (branche master) et ne reconstruit
|
||||
# les conteneurs QUE si une nouvelle version est disponible. À exécuter sur le
|
||||
# serveur, dans le dépôt cloné (voir DEPLOY.md pour le premier déploiement).
|
||||
#
|
||||
# Usage :
|
||||
# ./deploy.sh Met à jour puis rebuild uniquement si nouveau commit.
|
||||
# ./deploy.sh --force Rebuild même sans nouveau commit (ex. après édition du .env).
|
||||
#
|
||||
# Codes de sortie : 0 = succès (ou déjà à jour), 1 = erreur de prérequis/déploiement.
|
||||
|
||||
set -uo pipefail
|
||||
|
||||
RACINE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
cd "$RACINE"
|
||||
|
||||
BRANCHE="master"
|
||||
FORCER=0
|
||||
[[ "${1:-}" == "--force" ]] && FORCER=1
|
||||
|
||||
echo "→ Déploiement SchotzIAD (dépôt : $RACINE, branche : $BRANCHE)"
|
||||
|
||||
# --- 1. Prérequis -----------------------------------------------------------
|
||||
erreur() { echo "✗ $1" >&2; exit 1; }
|
||||
|
||||
command -v git >/dev/null 2>&1 || erreur "git n'est pas installé (voir DEPLOY.md)."
|
||||
command -v docker >/dev/null 2>&1 || erreur "docker n'est pas installé (voir DEPLOY.md)."
|
||||
|
||||
# Docker Compose v2 (plugin « docker compose ») ou v1 (« docker-compose »).
|
||||
if docker compose version >/dev/null 2>&1; then
|
||||
COMPOSE="docker compose"
|
||||
elif command -v docker-compose >/dev/null 2>&1; then
|
||||
COMPOSE="docker-compose"
|
||||
else
|
||||
erreur "docker compose introuvable (ni le plugin v2, ni docker-compose v1)."
|
||||
fi
|
||||
|
||||
[[ -f "$RACINE/.env" ]] || erreur "Fichier .env absent. Copiez .env.example vers .env et renseignez-le (voir DEPLOY.md)."
|
||||
|
||||
# --- 2. Détection d'une nouvelle version ------------------------------------
|
||||
echo "→ Récupération des références distantes (git fetch)…"
|
||||
git fetch --quiet origin "$BRANCHE" || erreur "git fetch a échoué (accès à Gitea ?)."
|
||||
|
||||
LOCAL="$(git rev-parse "$BRANCHE")"
|
||||
DISTANT="$(git rev-parse "origin/$BRANCHE")"
|
||||
|
||||
if [[ "$LOCAL" == "$DISTANT" && "$FORCER" -eq 0 ]]; then
|
||||
echo "✓ Déjà à jour (commit ${LOCAL:0:8}). Aucun rebuild."
|
||||
echo " (Utilisez ./deploy.sh --force pour reconstruire malgré tout.)"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# --- 3. Mise à jour du code -------------------------------------------------
|
||||
if [[ "$LOCAL" != "$DISTANT" ]]; then
|
||||
echo "→ Nouvelle version détectée : ${LOCAL:0:8} → ${DISTANT:0:8}. Mise à jour…"
|
||||
git pull --ff-only origin "$BRANCHE" || erreur "git pull --ff-only a échoué (historique divergent ? voir DEPLOY.md)."
|
||||
else
|
||||
echo "→ Pas de nouveau commit, mais --force demandé : reconstruction."
|
||||
fi
|
||||
|
||||
# --- 4. (Re)construction et démarrage ---------------------------------------
|
||||
echo "→ Construction et démarrage des conteneurs ($COMPOSE up -d --build)…"
|
||||
$COMPOSE up -d --build || erreur "Le déploiement Docker a échoué."
|
||||
|
||||
echo "→ État des conteneurs :"
|
||||
$COMPOSE ps
|
||||
|
||||
echo "✓ Déploiement terminé (version ${DISTANT:0:8})."
|
||||
@@ -123,6 +123,18 @@ table.synthese {
|
||||
border-bottom: 1px solid #ccc;
|
||||
}
|
||||
|
||||
// Surbrillance de la ligne survolée (lignes de données : 12 mois + ligne TOTAL),
|
||||
// orange clair dérivé de la charte, pour aider l'utilisateur à se situer.
|
||||
tbody tr,
|
||||
tfoot tr {
|
||||
transition: background-color 0.12s ease;
|
||||
}
|
||||
|
||||
tbody tr:hover,
|
||||
tfoot tr:hover {
|
||||
background: #fce3cc;
|
||||
}
|
||||
|
||||
td input {
|
||||
width: 7rem;
|
||||
padding: 0.35rem 0.4rem;
|
||||
|
||||
Reference in New Issue
Block a user