diff --git a/TpDevOpsProject.md b/readme.md similarity index 92% rename from TpDevOpsProject.md rename to readme.md index 67dcf2f..be85d1a 100644 --- a/TpDevOpsProject.md +++ b/readme.md @@ -1,57 +1,51 @@ -#TP DevOps Corrigé par DeepSeek +# TP DevOps -# ...et en cours de restructuration par Oualim (commentaires pour le futur pour tester une autre création à l'IA d'un tp, en tenant compte des manquements et des erreurs pour ne pas laisser l'IA les reproduire) +...et en cours de restructuration par Oualim (commentaires pour le futur pour tester une autre création à l'IA d'un tp, en tenant compte des manquements et des erreurs pour ne pas laisser l'IA les reproduire) Original pourrit: https://cloud.bonisco.fr/s/Cb2bFdLXeFEFcLm -# Commentaire de Oualim (Celui de Deepseek est juste un peu moins pourri mais c'était aussi de la merde) -# Ce TP contient encore beaucoup de fautes sur les manips et fichiers et aucun sens sur la structure car l'IA a juste pris les mots clefs de "devops" sur internet, copié des fichiers et mélangé des concepts sans aucune présentation ni introduction ou explications (ex : correctif de l'ancien tp tout en bas :-/ ; terraform sur des docker ??? ; kub en faisant un doublon d'appli potentiellement conflictuel, aucune explication ni structure d'étape pour comprendre les logiques de docker et k8') +> Commentaire de Oualim (Celui de Deepseek est juste un peu moins pourri mais c'était aussi de la merde) +> Ce TP contient encore beaucoup de fautes sur les manips et fichiers et aucun sens sur la structure car l'IA a juste pris les mots clefs de "devops" sur internet, copié des fichiers et mélangé des concepts sans aucune présentation ni introduction ou explications (ex : correctif de l'ancien tp tout en bas :-/ ; terraform sur des docker ??? ; kub en faisant un doublon d'appli potentiellement conflictuel, aucune explication ni structure d'étape pour comprendre les logiques de docker et k8') + #📚 RÉCAPITULATIF DES CORRECTIONS APPORTÉES -#✅ Corrections majeures : -Python : Ajout de Response dans les imports FastAPI -Docker Compose : Chemins corrigés, versions spécifiées - -Kubernetes : Changé LoadBalancer → NodePort pour Windows - -Image Docker : Tag :local au lieu de :latest pour K8s - -Terraform : Suppression du provider Docker problématique - -Scripts : Ajout de gestion d'erreurs robuste - -Tests : Ajout de tests unitaires Python - -Health checks : Ajout dans Docker Compose et K8s +## ✅ Corrections majeures : +* Python : Ajout de Response dans les imports FastAPI +* Docker Compose : Chemins corrigés, versions spécifiées +* Kubernetes : Changé LoadBalancer → NodePort pour Windows +* Image Docker : Tag :local au lieu de :latest pour K8s +* Terraform : Suppression du provider Docker problématique +* Scripts : Ajout de gestion d'erreurs robuste +* Tests : Ajout de tests unitaires Python +* Health checks : Ajout dans Docker Compose et K8s -#🎯 Améliorations : -Structure de projet logique et organisée - -Scripts PowerShell avec paramètres et gestion d'erreurs - -Configuration monitoring fonctionnelle - -Documentation claire étape par étape - -Solutions de dépannage incluses - -Versionning spécifique des images Docker +## 🎯 Améliorations : +* Structure de projet logique et organisée +* Scripts PowerShell avec paramètres et gestion d'erreurs +* Configuration monitoring fonctionnelle +* Documentation claire étape par étape +* Solutions de dépannage incluses +* Versionning spécifique des images Docker -# Commentaire de Oualim -# Ce TP permet pour l'instant, de réaliser le paysage de docker pour un débutant, de comprendre une organisation de dossiers et fichiers, de créer qq containeurs docker : -# - http://localhost:8000 (App) -# - http://localhost:8000/docs (Documentation API) -# - http://localhost:9090 (Prometheus) -# - http://localhost:3000 (Grafana - admin/admin123) -# - http://localhost:9000 (Portainer) +> Commentaire de Oualim +> Ce TP permet pour l'instant, de réaliser le paysage de docker pour un débutant, de comprendre une organisation de dossiers et fichiers, de créer qq containeurs docker : +> - http://localhost:8000 (App) +> - http://localhost:8000/docs (Documentation API) +> - http://localhost:9090 (Prometheus) +> - http://localhost:3000 (Grafana - admin/admin123) +> - http://localhost:9000 (Portainer) +# 🚀 TP DevOps Windows - Stack Complète Locale (Corrigé & Optimisé) +## 📋 PRÉ-REQUIS WINDOWS - Installation Pas à Pas +### 🔧 1. Préparation du système (PowerShell Administrateur) +Ouvrir PowerShell en tant qu'ADMINISTRATEUR (clic droit → Exécuter en tant qu'administrateur) #🚀 TP DevOps Windows - Stack Complète Locale (Corrigé & Optimisé) @@ -67,24 +61,29 @@ Avant tout, bien penser à ACTIVER la fonction de VIRTUALISATION dans le BIOS du # 1. Activer les fonctionnalités Windows nécessaires Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform - -# 2. Installer WSL2 et Ubuntu +``` +2. Installer WSL2 et Ubuntu +``` wsl --install -d Ubuntu-22.04 - -# 3. Définir WSL2 comme version par défaut +``` +3. Définir WSL2 comme version par défaut +``` wsl --set-default-version 2 - -# 4. Redémarrer l'ordinateur (OBLIGATOIRE) +``` +4. Redémarrer l'ordinateur (OBLIGATOIRE) +``` Restart-Computer #📥 2. Installation des outils (après redémarrage) -# 1. Installer Chocolatey (package manager Windows) +1. Installer Chocolatey (package manager Windows) +``` Set-ExecutionPolicy Bypass -Scope Process -Force [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072 iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) - -# 2. Installer tous les outils +``` +2. Installer tous les outils +``` choco install -y git docker-desktop vscode kubernetes-cli minikube terraform helm postman #🐧 3. Configuration WSL2 et Ubuntu @@ -92,16 +91,20 @@ choco install -y git docker-desktop vscode kubernetes-cli minikube terraform hel # Vérifier l'installation WSL wsl --list --verbose # Doit afficher : Ubuntu-22.04 Running 2 +``` -# Entrer dans WSL pour configurer +Entrer dans WSL pour configurer +``` wsl - -# Dans le terminal Ubuntu WSL : +``` +Dans le terminal Ubuntu WSL : +``` sudo apt update sudo apt upgrade -y sudo apt install -y python3 python3-pip python3-venv nodejs npm curl wget - -# Créer un alias pratique +``` +Créer un alias pratique +``` echo "alias k=kubectl" >> ~/.bashrc source ~/.bashrc exit # Retour à PowerShell @@ -113,43 +116,31 @@ exit # Retour à PowerShell Ouvrir Docker Desktop après installation Settings → General : - -✅ Use WSL 2 based engine - -✅ Expose daemon on tcp://localhost:2375 without TLS - +* ✅ Use WSL 2 based engine +* ✅ Expose daemon on tcp://localhost:2375 without TLS Settings → Resources → WSL Integration : - -✅ Enable integration with my default WSL distro - -✅ Ubuntu-22.04 - +* ✅ Enable integration with my default WSL distro +* ✅ Ubuntu-22.04 Settings → Kubernetes : - -✅ Enable Kubernetes - -✅ Deploy Docker Stacks to Kubernetes by default +* ✅ Enable Kubernetes +* ✅ Deploy Docker Stacks to Kubernetes by default Settings → Advanced : - -CPUs : 4 (ou 50% de vos CPUs) - -Memory : 4.0 GB (ou 50% de votre RAM) - -Swap : 1.0 GB - +* CPUs : 4 (ou 50% de vos CPUs) +* Memory : 4.0 GB (ou 50% de votre RAM) +* Swap : 1.0 GB Appliquer et redémarrer Docker Desktop -#✅ Vérification Docker/WSL2 : - +### ✅ Vérification Docker/WSL2 : +``` # Dans PowerShell docker --version # Doit afficher : Docker version 24.0.x - docker run hello-world # Doit afficher "Hello from Docker!" - -# Vérifier l'intégration WSL2 +``` +Vérifier l'intégration WSL2 +``` wsl -d Ubuntu-22.04 -e docker version # Doit fonctionner sans erreur @@ -158,11 +149,14 @@ wsl -d Ubuntu-22.04 -e docker version #🗂️ Création de la structure : -# Créer le dossier principal +Créer le dossier principal +``` mkdir C:\DevOpsProject cd C:\DevOpsProject +``` -# Structure ORGANISÉE et LOGIQUE +Structure ORGANISÉE et LOGIQUE +``` New-Item -ItemType Directory -Path @( "src\app", "src\app\tests", @@ -176,8 +170,10 @@ New-Item -ItemType Directory -Path @( "docs", "config" ) +``` -# Structure finale : +Structure finale : +``` C:\DevOpsProject\ ├── src\ # Code source │ ├── app\ # Application Python @@ -336,8 +332,10 @@ if __name__ == "__main__": log_level="info", reload=True # Auto-reload en développement ) -#3.3 Fichier : src\app\tests\test_main.py (NOUVEAU) +``` +### 3.3 Fichier : `src\app\tests\test_main.py` (NOUVEAU) +``` import pytest from fastapi.testclient import TestClient from main import app @@ -382,9 +380,12 @@ def test_env_endpoint(): assert response.status_code == 200 data = response.json() assert "ENV" in data -#3.4 Fichier : src\app\Dockerfile (OPTIMISÉ) +``` -# Étape 1 : Build +### 3.4 Fichier : `src\app\Dockerfile` (OPTIMISÉ) + +Étape 1 : Build +``` FROM python:3.11-slim AS builder WORKDIR /app @@ -425,6 +426,9 @@ CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000", "--no-access- #4.1 Fichier : docker\docker-compose.yml (RECOMMENCÉ) +## 🐳 ÉTAPE 4 : DOCKER COMPOSE CORRIGÉ +### 4.1 Fichier : `docker\docker-compose.yml` (RECOMMENCÉ) +``` version: '3.8' services: @@ -591,21 +595,30 @@ scrape_configs: #4.3 Exécution Docker Compose : -# Se placer dans le dossier docker +## 4.3 Exécution Docker Compose : + +Se placer dans le dossier docker +``` cd C:\DevOpsProject\docker - -# Lancer en arrière-plan +``` +Lancer en arrière-plan +``` docker-compose up -d - -# Vérifier que tout fonctionne +``` +Vérifier que tout fonctionne +``` docker-compose ps - -# Voir les logs de l'application +``` +Voir les logs de l'application +``` docker-compose logs app - -# Tester l'application +``` +Tester l'application +``` curl http://localhost:8000 -# ou dans PowerShell +``` +ou dans PowerShell +``` Invoke-WebRequest -Uri "http://localhost:8000" -UseBasicParsing @@ -621,18 +634,21 @@ Invoke-WebRequest -Uri "http://localhost:8000" -UseBasicParsing #5.2 Vérification : -# Vérifier que Kubernetes fonctionne +### 5.2 Vérification : + +Vérifier que Kubernetes fonctionne +``` kubectl cluster-info # Doit afficher : Kubernetes control plane is running at https://... - kubectl get nodes # Doit afficher : docker-desktop Ready - kubectl get pods --all-namespaces # Doit montrer les pods système #5.3 Fichier : kubernetes\manifests\namespace.yaml +#### 5.3 Fichier : kubernetes\manifests\namespace.yaml +``` apiVersion: v1 kind: Namespace metadata: @@ -643,6 +659,8 @@ metadata: #5.4 Fichier : kubernetes\manifests\configmap.yaml (NOUVEAU) +### 5.4 Fichier : kubernetes\manifests\configmap.yaml (NOUVEAU) +``` apiVersion: v1 kind: ConfigMap metadata: @@ -656,6 +674,8 @@ data: #5.5 Fichier : kubernetes\manifests\deployment.yaml (SIMPLIFIÉ) +### 5.5 Fichier : kubernetes\manifests\deployment.yaml (SIMPLIFIÉ) +``` apiVersion: apps/v1 kind: Deployment metadata: