🛡️ Plateforme DevSecOps qui déploie automatiquement des dépôts GitHub sur une VM via SSH, analyse la sécurité avec Bandit, Semgrep, Trivy, ZAP et Nuclei, calcule un score de sécurité, et propose un chatbot IA local (Ollama) pour interpréter les vulnérabilités et propose des solutions.
Cette image illustre l'interface d'authentification sécurisée conçue pour restreindre l'accès à la plateforme.
Cette capture d'écran présente la vue d'ensemble du dashboard avec la liste des déploiements et le design général de l'interface.
Cette image illustre la console de logs en temps réel et les onglets interactifs permettant de consulter directement les rapports de vulnérabilités.
Cette capture d'écran montre une discussion avec le chatbot DevSecOps fournissant un guide de remédiation interactif.
Cette capture d'écran montre le dashboard avec un score en rouge affichant le score de 36/100 et le statut "terminé".
La figures ci-dessous présentent le résultat détaillé D'un scanner principal exécutés sur cette application. Le rapport OWASP ZAP, illustré en Figure Rapport OWASP ZAP : alertes détectées sur l'application test-autodeploy, a détecté plusieurs alertes de sécurité sur l'application AutoDeploy en cours d'exécution, réparties en alertes de niveau moyen et faible, notamment des en-têtes HTTP de sécurité manquants.
Dès que les fichiers sont décompressés sur la machine virtuelle cible, le script analyse la structure du projet pour détecter un fichier Docker Compose.
Si un tel fichier est présent, le serveur lance la compilation et le démarrage en arrière-plan (docker compose up -d --build). J'ai programmé une boucle de surveillance qui interroge régulièrement l'état de santé du conteneur en utilisant les API Docker. Le script s'assure que le conteneur ne s'arrête pas prématurément (statut exited ou dead) et qu'il passe bien à l'état actif (running ou healthy), garantissant que l'application est prête à fonctionner.
Les applications déployées par les développeurs peuvent écouter sur différents ports réseau. Pour automatiser le test dynamique de sécurité (DAST) en staging ou simplement valider le fonctionnement en production, mon script doit connaître précisément le port de l'application :
L'orchestrateur analyse le fichier de configuration Docker Compose pour lire les redirections de ports définies par le développeur. En cas de conflit (si deux projets utilisent le même port), mon script réécrit dynamiquement le fichier sur la VM de staging pour attribuer un port libre trouvé dans une plage définie de (9000 à 9999). Enfin, le script envoie des requêtes curl sur ces ports jusqu'à ce que l'application réponde avec un code de succès (code HTTP 200), confirmant sa disponibilité réseau.
- Déploiement automatique via webhook GitHub ou manuellement depuis le dashboard
- Environnements multiples : staging et production sur des VMs séparées
- Pipeline de sécurité intégré (SAST + DAST) après chaque déploiement :
- 🔍 Bandit — Analyse statique Python
- 🔍 Semgrep — SAST multi-langage
- 🔍 pip-audit / npm audit — Vulnérabilités des dépendances
- 🐳 Trivy — Scan des images Docker
- 🌐 OWASP ZAP — Scan DAST de l'application déployée
- ⚡ Nuclei — Tests DAST avec templates communautaires
- Score de sécurité calculé automatiquement (0–100) après chaque scan
- Dashboard interactif — liste des déploiements, logs en temps réel, scores, rapports
- Chatbot IA local (Ollama) — analyse les vulnérabilités, explique les CVEs, génère des recommandations de correction
- Rapports PDF/HTML exportables
- Authentification par session avec bcrypt
- Double base de données : PostgreSQL (principal) + SQLite (legacy/fallback)
┌─────────────────────────────────────────────────────┐
│ Votre machine locale │
│ │
│ ┌─────────────────┐ ┌────────────────────────┐ │
│ │ Flask App │────▶│ PostgreSQL │ │
│ │ (app.py) │ │ (déploiements, scores, │ │
│ │ │ │ historique chat) │ │
│ │ Dashboard HTML │ └────────────────────────┘ │
│ │ Chatbot IA │ │
│ └────────┬────────┘ ┌────────────────────────┐ │
│ │ SSH/SFTP │ Ollama (LLM local) │ │
│ │ │ llama3 / autre modèle │ │
│ │ └────────────────────────┘ │
└───────────┼─────────────────────────────────────────┘
│
▼ SSH
┌─────────────────────────────────────────────────────┐
│ VM de staging/production │
│ │
│ Git clone ──▶ Docker build ──▶ Docker run │
│ │
│ Scans sécurité : Bandit, Semgrep, Trivy, │
│ ZAP, Nuclei, pip-audit │
│ │
│ Rapports JSON/HTML stockés dans VM_LOGS_PATH │
└─────────────────────────────────────────────────────┘
| Catégorie | Technologies |
|---|---|
| Backend | Python 3.10+, Flask |
| Base de données | PostgreSQL, SQLite |
| Déploiement | SSH (Paramiko), Docker, Docker Compose |
| Sécurité SAST | Bandit, Semgrep, pip-audit, npm audit |
| Sécurité DAST | OWASP ZAP, Nuclei, Trivy |
| IA locale | Ollama (llama3 ) |
| Génération PDF | ReportLab |
| Frontend | HTML/CSS/JS vanilla (template Jinja2) |
See the LICENSE file for the license and usage conditions.