Application complète de saisie et de suivi des trajets kilométriques avec calcul de distance routière (OpenRouteService), barème kilométrique, résumés et régularisation annuelle. Backend (ASP.NET Core .NET 8, EF Core, SQLite) : - Trajets (CRUD, réordonnancement, insertion), calcul de distance ORS avec fallback Haversine, géométrie d'itinéraire stockée par trajet, recalcul en masse. - Profil, véhicules (avec dénomination), carnet d'adresses nommées, cache d'adresses. - Barème kilométrique : tranches multiples par puissance fiscale, borne max exclusive avec 'illimité' (KmMax nullable), coefficient à 3 décimales, recopie du dernier barème connu. - Résumés mensuel/annuel, montants réglés, régularisation, export PDF. Frontend (Angular 22, zoneless + signals) : - Consultation par jour, navigation temporelle synchronisée, carte Leaflet, formulaire de trajet (adresses nommées, domicile, autocomplétion BAN). - Détection de changement zoneless (indépendante de zone.js). Hébergement : Docker Compose (nginx + backend), scripts run-dev.sh / run-docker.sh.
93 lines
3.1 KiB
Bash
Executable File
93 lines
3.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Lancement de SchotzIAD KM Tracker SANS docker compose (topologie équivalente).
|
|
# Utile quand docker compose est indisponible/cassé.
|
|
#
|
|
# Usage :
|
|
# ./run-docker.sh up # build + démarre backend et frontend
|
|
# ./run-docker.sh down # arrête et supprime les conteneurs (garde le volume/les données)
|
|
# ./run-docker.sh destroy # arrête tout ET supprime le volume SQLite (perte des données)
|
|
# ./run-docker.sh logs # affiche les logs des deux conteneurs
|
|
#
|
|
# Selon votre config Docker, préfixez par sudo : sudo ./run-docker.sh up
|
|
set -euo pipefail
|
|
|
|
# Détecte s'il faut sudo (utilisateur hors du groupe docker).
|
|
DOCKER="docker"
|
|
if ! docker info >/dev/null 2>&1; then
|
|
if sudo -n docker info >/dev/null 2>&1 || sudo docker info >/dev/null 2>&1; then
|
|
DOCKER="sudo docker"
|
|
echo "[info] Docker requiert sudo — utilisation de 'sudo docker'."
|
|
else
|
|
echo "[erreur] Démon Docker inaccessible (ni direct, ni via sudo)." >&2
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
ROOT="$(cd "$(dirname "$0")" && pwd)"
|
|
NET="schotziad-net"
|
|
VOL="trajets-data"
|
|
ORS_KEY="${ORS_API_KEY:-}"
|
|
|
|
# Charge ORS_API_KEY depuis .env s'il existe et n'est pas déjà défini.
|
|
if [[ -z "$ORS_KEY" && -f "$ROOT/.env" ]]; then
|
|
ORS_KEY="$(grep -E '^ORS_API_KEY=' "$ROOT/.env" | head -n1 | cut -d= -f2- || true)"
|
|
fi
|
|
|
|
up() {
|
|
echo "[1/5] Réseau et volume…"
|
|
$DOCKER network inspect "$NET" >/dev/null 2>&1 || $DOCKER network create "$NET"
|
|
$DOCKER volume inspect "$VOL" >/dev/null 2>&1 || $DOCKER volume create "$VOL"
|
|
|
|
echo "[2/5] Build backend…"
|
|
$DOCKER build -t schotziad-backend "$ROOT/backend"
|
|
|
|
echo "[3/5] Build frontend…"
|
|
$DOCKER build -t schotziad-frontend "$ROOT/frontend"
|
|
|
|
echo "[4/5] Démarrage backend (nom d'hôte réseau: backend)…"
|
|
$DOCKER rm -f schotziad-backend >/dev/null 2>&1 || true
|
|
$DOCKER run -d --name schotziad-backend --network "$NET" --network-alias backend \
|
|
-e "ASPNETCORE_URLS=http://+:8080" \
|
|
-e "ConnectionStrings__Default=Data Source=/data/trajets.db" \
|
|
-e "ORS__ApiKey=${ORS_KEY}" \
|
|
-v "$VOL:/data" \
|
|
--restart unless-stopped \
|
|
schotziad-backend
|
|
|
|
echo "[5/5] Démarrage frontend (http://localhost:8080)…"
|
|
$DOCKER rm -f schotziad-frontend >/dev/null 2>&1 || true
|
|
$DOCKER run -d --name schotziad-frontend --network "$NET" \
|
|
-p 8080:80 \
|
|
--restart unless-stopped \
|
|
schotziad-frontend
|
|
|
|
echo
|
|
echo "Prêt. Ouvrez http://localhost:8080"
|
|
echo "Logs : ./run-docker.sh logs | Arrêt : ./run-docker.sh down"
|
|
}
|
|
|
|
down() {
|
|
$DOCKER rm -f schotziad-frontend schotziad-backend >/dev/null 2>&1 || true
|
|
echo "Conteneurs arrêtés (le volume '$VOL' et les données sont conservés)."
|
|
}
|
|
|
|
destroy() {
|
|
down
|
|
$DOCKER volume rm "$VOL" >/dev/null 2>&1 || true
|
|
$DOCKER network rm "$NET" >/dev/null 2>&1 || true
|
|
echo "Volume, réseau et données supprimés."
|
|
}
|
|
|
|
logs() {
|
|
echo "=== backend ==="; $DOCKER logs --tail 40 schotziad-backend 2>&1 || true
|
|
echo "=== frontend ==="; $DOCKER logs --tail 20 schotziad-frontend 2>&1 || true
|
|
}
|
|
|
|
case "${1:-up}" in
|
|
up) up ;;
|
|
down) down ;;
|
|
destroy) destroy ;;
|
|
logs) logs ;;
|
|
*) echo "Usage: $0 {up|down|destroy|logs}" >&2; exit 2 ;;
|
|
esac
|