@@ -6,14 +6,17 @@ echo "=== [Entrypoint] Initialisation du container ==="
66# Usage: docker run ... <image> [mode]
77# Modes:
88# import - run import_data_dashboard.R then exit (useful for data-only runs)
9- # serve - attempt non-blocking import then start `quarto serve` (default)
9+ # serve - start quarto serve WITHOUT importing (assumes data exists)
10+ # serve-import - attempt import then start quarto serve (safe: keeps old data on failure)
1011# help - show this message
1112
12- MODE=" ${1:- serve} "
13+ MODE=" ${1:- serve-import } "
1314shift || true
1415
1516# Fichier témoin pour indiquer que des données valides existent
1617DATA_MARKER=" /data/.data_imported"
18+ # Fichier pour tracer la dernière tentative d'import
19+ LAST_IMPORT=" /data/.last_import_attempt"
1720
1821run_import () {
1922 if [ -f " import_data_dashboard.R" ]; then
@@ -24,15 +27,16 @@ run_import() {
2427 echo " === Sauvegarde des données existantes ==="
2528 BACKUP_DIR=" /data/.backup_$( date +%Y%m%d_%H%M%S) "
2629 mkdir -p " $BACKUP_DIR "
27- # Copier tous les fichiers sauf les backups
28- find /data -maxdepth 1 -type f ! -path " */ .*" -exec cp {} " $BACKUP_DIR /" \; 2> /dev/null || true
30+ # Copier tous les fichiers sauf les backups et fichiers cachés système
31+ find /data -maxdepth 1 -type f ! -name " .*" -exec cp {} " $BACKUP_DIR /" \; 2> /dev/null || true
2932 echo " Sauvegarde créée dans : $BACKUP_DIR "
3033 fi
3134
3235 if R -e " source('import_data_dashboard.R')" ; then
3336 echo " === Importation des données : OK ==="
3437 # Marquer l'import comme réussi
3538 touch " $DATA_MARKER "
39+ date +%s > " $LAST_IMPORT "
3640 # Nettoyer les anciennes sauvegardes (garder les 3 plus récentes)
3741 if [ -d " /data" ]; then
3842 ls -dt /data/.backup_* 2> /dev/null | tail -n +4 | xargs rm -rf 2> /dev/null || true
@@ -71,8 +75,19 @@ serve_qmd() {
7175 exit 1
7276 fi
7377
78+ # Vérifier que des données existent avant de lancer le serveur
79+ if [ ! -f " $DATA_MARKER " ]; then
80+ echo " ERREUR : Aucune donnée importée détectée."
81+ echo " Veuillez d'abord exécuter le mode 'import' ou 'serve-import'."
82+ exit 1
83+ fi
84+
7485 echo " === Lancement du serveur Quarto/Shiny ==="
7586 echo " Fichier : $QMD_FILE "
87+ if [ -f " $LAST_IMPORT " ]; then
88+ LAST_DATE=$( date -d " @$( cat $LAST_IMPORT ) " " +%Y-%m-%d %H:%M:%S" 2> /dev/null || echo " inconnue" )
89+ echo " Dernière importation réussie : $LAST_DATE "
90+ fi
7691 exec quarto serve " $QMD_FILE " --port 3838 --host 0.0.0.0
7792}
7893
@@ -90,8 +105,14 @@ case "$MODE" in
90105 ;;
91106
92107 serve)
93- # En mode serve, on tente l'import mais on continue même en cas d'échec
94- # si des données valides existent déjà
108+ # Mode serve pur : ne fait PAS d'import, démarre directement
109+ echo " === Mode SERVE : démarrage sans import ==="
110+ serve_qmd
111+ ;;
112+
113+ serve-import)
114+ # Mode serve avec import : tente l'import puis démarre le serveur
115+ echo " === Mode SERVE-IMPORT : import puis démarrage ==="
95116 run_import || {
96117 EXIT_CODE=$?
97118 if [ " $EXIT_CODE " -eq 1 ]; then
@@ -105,20 +126,32 @@ case "$MODE" in
105126 ;;
106127
107128 help|-h|--help)
108- sed -n ' 1,200p' " $0 " | sed -n ' 1,80p'
109- echo
110- echo " Usage: docker run ... <image> [import|serve]"
129+ echo " Usage: docker run ... <image> [mode]"
130+ echo " "
131+ echo " Modes disponibles:"
132+ echo " import - Exécute uniquement l'import puis quitte"
133+ echo " (avec sauvegarde/restauration automatique)"
134+ echo " "
135+ echo " serve - Lance UNIQUEMENT le serveur Quarto/Shiny"
136+ echo " (sans import, suppose que les données existent)"
137+ echo " "
138+ echo " serve-import - Import PUIS lance le serveur (défaut)"
139+ echo " (sécurisé : garde les anciennes données si échec)"
140+ echo " "
141+ echo " help - Affiche ce message"
142+ echo " "
143+ echo " Workflow recommandé:"
144+ echo " 1. docker run --rm <image> import # Import initial"
145+ echo " 2. docker run <image> serve # Démarre l'app (pas de ré-import)"
111146 echo " "
112- echo " Modes:"
113- echo " import - Exécute uniquement l'import (avec sauvegarde automatique)"
114- echo " serve - Lance l'application (tente l'import, utilise les données existantes si échec)"
115- echo " help - Affiche ce message"
147+ echo " OU en une seule commande:"
148+ echo " docker run <image> serve-import # Import + serve en une fois"
116149 exit 0
117150 ;;
118151
119152 * )
120153 echo " Mode inconnu: $MODE "
121- echo " Usage: docker run ... <image> [import|serve] "
154+ echo " Utilisez 'help' pour voir les modes disponibles. "
122155 exit 2
123156 ;;
124157esac
0 commit comments