#!/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