4.7 KiB
Executable File
4.7 KiB
Executable File
08 – Script d'installation & Bootstrapping (install.sh)
Objectif : fournir un guide exhaustif et un script d’installation automatisée de l’application Linux BenchTools (backend + frontend + dépendances) ainsi que son organisation dans le dépôt.
Ce fichier décrit :
- Le rôle du script
install.sh - Les prérequis système
- L’installation via Docker ou native
- La génération automatique de l’arborescence
- Les variables d’environnement nécessaires
- Le lancement des services
1. Objectifs du script install.sh
Le script doit :
- Vérifier les prérequis (Docker, Docker Compose, Python si installation native)
- Créer l'arborescence du projet si inexistante
- Générer les fichiers
.envnécessaires - Installer le backend (FastAPI)
- Installer le frontend (fichiers statiques)
- Construire et lancer les conteneurs
- Vérifier que l’application fonctionne via un health check
- Afficher les URL utiles et les commandes d’usage
2. Arborescence créée automatiquement
linux-benchtools/
│
├── backend/
│ ├── app/
│ ├── Dockerfile
│ ├── requirements.txt
│ └── data/ (auto)
│
├── frontend/
│ ├── index.html
│ ├── devices.html
│ ├── device_detail.html
│ ├── settings.html
│ ├── css/
│ └── js/
│
├── uploads/ (auto)
│
├── docker-compose.yml
├── .env
└── install.sh
3. Prérequis système
Le script doit vérifier la présence de :
- curl
- git
- Docker
- Docker Compose (plugin)
Si absent → afficher un message clair (avec commande d’installation Debian/Ubuntu).
Exemple :
if ! command -v docker >/dev/null 2>&1; then
echo "[ERREUR] Docker n’est pas installé."
echo "Installez-le avec :"
echo " curl -fsSL https://get.docker.com | sh"
exit 1
fi
4. Fichier .env généré
Le script crée automatiquement un fichier .env si absent.
Exemple :
API_TOKEN=$(openssl rand -hex 32)
DATABASE_URL=sqlite:////app/data/data.db
UPLOAD_DIR=/app/uploads
BACKEND_PORT=8007
FRONTEND_PORT=8087
5. docker-compose.yml généré
Le script crée un fichier minimal :
version: "3.9"
services:
backend:
build: ./backend
ports:
- "${BACKEND_PORT}:8007"
volumes:
- ./backend/data:/app/data
- ./uploads:/app/uploads
env_file: .env
restart: unless-stopped
frontend:
image: nginx:latest
volumes:
- ./frontend:/usr/share/nginx/html:ro
ports:
- "${FRONTEND_PORT}:80"
restart: unless-stopped
6. Installation native (option)
Si l'utilisateur passe install.sh --native :
- Installation Python + venv
- Installation requirements.txt
- Exécution via :
uvicorn app.main:app --host 0.0.0.0 --port 8007
Frontend servi via un simple python3 -m http.server.
7. Vérification de l’installation
Une fois les services lancés :
curl -s http://localhost:${BACKEND_PORT}/api/health
Si réponse :
{"status":"ok"}
→ installation validée.
8. Affichage final après installation
Le script doit afficher :
Installation terminée !
Backend API : http://localhost:8007
Frontend UI : http://localhost:8087
Token API : <xxx>
Pour exécuter un benchmark sur une machine :
curl -s <URL bench.sh> | bash -s -- --server http://<ip>:8007/api/benchmark --token <TOKEN>
9. Structure du script install.sh
Exemple de squelette :
#!/usr/bin/env bash
set -e
echo "[INFO] Vérification des prérequis..."
# test docker, docker compose, curl...
echo "[INFO] Création des dossiers..."
mkdir -p backend/data
mkdir -p uploads
echo "[INFO] Génération du fichier .env..."
if [ ! -f .env ]; then
API_TOKEN=$(openssl rand -hex 32)
cat <<EOF > .env
API_TOKEN=$API_TOKEN
DATABASE_URL=sqlite:////app/data/data.db
UPLOAD_DIR=/app/uploads
BACKEND_PORT=8007
FRONTEND_PORT=8087
EOF
fi
echo "[INFO] Construction des containers..."
docker compose build
echo "[INFO] Lancement..."
docker compose up -d
echo "[INFO] Vérification..."
sleep 2
curl -s http://localhost:8007/api/health || {
echo "[ERREUR] Le backend ne répond pas."
exit 1
}
echo "----------------------------------------------"
echo " Linux BenchTools installé avec succès !"
echo " Backend : http://localhost:8007"
echo " Frontend : http://localhost:8087"
echo " Token : $(grep API_TOKEN .env | cut -d= -f2)"
echo "----------------------------------------------"
10. Améliorations futures
- Choix interactif du port
- Installation sans Docker (automatique)
- Ajout d'un mode "cluster" (plusieurs workers backend)
- Génération automatique d’un certificat TLS