commit ec3b72f62c79006db9aae456f8669538e33e4704 Author: Oualim Date: Fri Jan 23 13:31:45 2026 +0000 Téléverser les fichiers vers "docker" C:\DevOpsProject\docker diff --git a/docker/docker-compose-db.yml b/docker/docker-compose-db.yml new file mode 100644 index 0000000..53a2545 --- /dev/null +++ b/docker/docker-compose-db.yml @@ -0,0 +1,32 @@ +services: + db: + image: postgres:15-alpine + container_name: devops-db + restart: unless-stopped + environment: + POSTGRES_DB: devopsdb + POSTGRES_USER: devopsuser + POSTGRES_PASSWORD: devopspass + volumes: + - db-data:/var/lib/postgresql/data + - ./init:/docker-entrypoint-initdb.d + ports: + - "5432:5432" + healthcheck: + test: ["CMD-SHELL", "pg_isready -U devopsuser -d devopsdb"] + interval: 10s + timeout: 5s + retries: 5 + networks: + - devops-network + labels: + - "com.devops.description=PostgreSQL Database" + - "com.devops.type=database" + +volumes: + db-data: + driver: local + +networks: + devops-network: + external: true \ No newline at end of file diff --git a/docker/docker-compose-nginx.yml b/docker/docker-compose-nginx.yml new file mode 100644 index 0000000..afc2e54 --- /dev/null +++ b/docker/docker-compose-nginx.yml @@ -0,0 +1,19 @@ +services: + nginx: + image: nginx:latest + restart: unless-stopped + ports: + - "80:80" + - "443:443" + volumes: + - C:\DevOpsProject\kubernetes\manifests\nginx\nginx.conf:/etc/nginx/nginx.conf:ro + - C:\DevOpsProject\kubernetes\manifests\nginx\certs:/etc/nginx/certs:ro + depends_on: + - app + networks: + - devops-network + command: nginx -g "daemon off;" + +networks: + devops-network: + external: true \ No newline at end of file diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml new file mode 100644 index 0000000..89c7718 --- /dev/null +++ b/docker/docker-compose.yml @@ -0,0 +1,113 @@ +services: + # Application principale + app: + build: + context: .. + dockerfile: src/app/Dockerfile + container_name: devops-app + ports: + - "8000:8000" + environment: + - ENV=development + - HOSTNAME=devops-local + volumes: + - ../src/app:/app + - app-logs:/app/logs + networks: + - devops-network + restart: unless-stopped + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8000/health"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 40s + labels: + - "com.devops.description=Application FastAPI" + - "prometheus.scrape=true" + - "prometheus.port=8000" + - "prometheus.path=/metrics" + + # Prometheus pour le monitoring + prometheus: + image: prom/prometheus:v2.47.2 + container_name: devops-prometheus + ports: + - "9090:9090" + volumes: + - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro + - prometheus-data:/prometheus + command: + - '--config.file=/etc/prometheus/prometheus.yml' + - '--storage.tsdb.path=/prometheus' + - '--web.console.libraries=/etc/prometheus/console_libraries' + - '--web.console.templates=/etc/prometheus/consoles' + - '--storage.tsdb.retention.time=200h' + - '--web.enable-lifecycle' + networks: + - devops-network + restart: unless-stopped + depends_on: + - app + + # Grafana pour les dashboards + grafana: + image: grafana/grafana:10.2.0 + container_name: devops-grafana + ports: + - "3000:3000" + environment: + - GF_SECURITY_ADMIN_PASSWORD=admin123 + - GF_SECURITY_ADMIN_USER=admin + - GF_INSTALL_PLUGINS=grafana-piechart-panel,grafana-clock-panel + - GF_USERS_ALLOW_SIGN_UP=false + - GF_SERVER_DOMAIN=localhost + - TZ=Europe/Paris + volumes: + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + - grafana-data:/var/lib/grafana + - ./grafana-dashboards:/etc/grafana/provisioning/dashboards + - ./grafana-datasources:/etc/grafana/provisioning/datasources + networks: + - devops-network + restart: unless-stopped + depends_on: + - prometheus + + # Portainer pour gérer Docker + portainer: + image: portainer/portainer-ce:latest + container_name: devops-portainer + ports: + - "9000:9000" + - "9443:9443" + volumes: + - /var/run/docker.sock:/var/run/docker.sock:ro + - portainer-data:/data + networks: + - devops-network + restart: unless-stopped + command: -H unix:///var/run/docker.sock + + # Inclusion du service Nginx à partir du fichier docker-compose-nginx.yml + nginx: + depends_on: + - app + networks: + - devops-network + +networks: + devops-network: + driver: bridge + name: devops-network + +volumes: + prometheus-data: + name: prometheus-data + grafana-data: + name: grafana-data + portainer-data: + name: portainer-data + app-logs: + name: app-logs \ No newline at end of file diff --git a/docker/prometheus.yml b/docker/prometheus.yml new file mode 100644 index 0000000..881090c --- /dev/null +++ b/docker/prometheus.yml @@ -0,0 +1,41 @@ +global: + scrape_interval: 15s + evaluation_interval: 15s + external_labels: + cluster: 'windows-devops' + environment: 'development' + +# Règles d'alerte +rule_files: + # - "alerts.yml" + +# Configuration de scraping +scrape_configs: + # Scraper l'application FastAPI + - job_name: 'fastapi-app' + static_configs: + - targets: ['app:8000'] + labels: + app: 'devops-app' + component: 'backend' + tier: 'application' + + # Scraper Prometheus lui-même + - job_name: 'prometheus' + static_configs: + - targets: ['localhost:9090'] + labels: + component: 'monitoring' + + # Découverte de service Docker + - job_name: 'docker' + static_configs: + - targets: ['host.docker.internal:9323'] + metrics_path: /metrics + scheme: http + +# Alerting (exemple) +# alerting: +# alertmanagers: +# - static_configs: +# - targets: []