Pārlūkot izejas kodu

(feat) ajout d'autres service

Brin AMONKONAN 1 gadu atpakaļ
vecāks
revīzija
3779d88cc9
7 mainītis faili ar 174 papildinājumiem un 71 dzēšanām
  1. 0 0
      acme.json
  2. 127 71
      docker-compose.yml
  3. 0 0
      gitignore
  4. 13 0
      letsencrypt/acme.json
  5. 6 0
      node_app/package-lock.json
  6. 24 0
      prometheus/prometheus.yml
  7. 4 0
      scripts/strart.sh

+ 0 - 0
acme.json


+ 127 - 71
docker-compose.yml

@@ -1,27 +1,71 @@
 version: '3.8'
 
 services:
+
+ # Serveur Redis
+  cache:
+    image: redis:7
+    container_name: redis_cache
+    ports:
+      - "6379:6379"
+
+  # Serveur Proxy inverse Traefik
+  traefik:
+    image: traefik:v2.10
+    container_name: traefik
+    restart: always
+    command:
+      - "--api.insecure=true" # Ne pas utiliser en production sans sécurisation
+      - "--providers.docker=true"
+      - "--entrypoints.web.address=:80"
+      - "--entrypoints.websecure.address=:443"
+      - "--certificatesresolvers.myresolver.acme.httpchallenge=true"
+      - "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web"
+      - "--certificatesresolvers.myresolver.acme.email=brin.amonkonan@gmail.com"
+      - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
+    ports:
+      - "80:80"
+      - "443:443"
+      - "8082:8080"
+    volumes:
+      - "/var/run/docker.sock:/var/run/docker.sock:ro"
+      - "./letsencrypt:/letsencrypt"
+
   # Serveur Web Nginx
   web:
-    image: nginx:latest
+    image: nginx:1.25
     container_name: nginx_server
-    ports:
-      - "8080:80"
     volumes:
       - ./html:/usr/share/nginx/html:ro
     depends_on:
+      - node_app
       - app
+    labels:
+      - "traefik.enable=true"
+      - "traefik.http.routers.nginx.rule=Host(`nginx.localhost`)"
+      - "traefik.http.routers.nginx.entrypoints=web"
+      - "traefik.http.routers.nginx-secure.rule=Host(`nginx.localhost`)"
+      - "traefik.http.routers.nginx-secure.entrypoints=websecure"
+      - "traefik.http.routers.nginx-secure.tls=true"
+      - "traefik.http.routers.nginx-secure.tls.certresolver=myresolver"
 
   # Serveur Web Node.js
   node_app:
-    image: node:latest
+    image: node:18
     container_name: node_server
     working_dir: /usr/src/app
+    labels:
+      - "traefik.enable=true"
+      - "traefik.http.routers.nodeapp.rule=Host(`nodeapp.localhost`)"
+      - "traefik.http.routers.nodeapp.entrypoints=web"
+      - "traefik.http.routers.nodeapp-secure.rule=Host(`nodeapp.localhost`)"
+      - "traefik.http.routers.nodeapp-secure.entrypoints=websecure"
+      - "traefik.http.routers.nodeapp-secure.tls=true"
+      - "traefik.http.routers.nodeapp-secure.tls.certresolver=myresolver"
+      - "traefik.http.services.nodeapp.loadbalancer.server.port=3000"
     volumes:
-      - ./node_app:/usr/src/app
-    ports:
-      - "3000:3000"
-    command: bash -c "npm install && npm start"
+      - ./node_app:/usr/src/app:delegated
+    command: ["sh", "-c", "npm install && npm start"]
 
   # Serveur PHP
   app:
@@ -30,12 +74,26 @@ services:
     volumes:
       - ./html:/var/www/html
     depends_on:
-      - db
+      - postgresql
+
+  postgresql:
+    image: postgres:13
+    container_name: sonarqube_db
+    restart: always
+    environment:
+      POSTGRES_USER: sonar
+      POSTGRES_PASSWORD: sonar_pass
+      POSTGRES_DB: sonarqube
+    volumes:
+      - postgresql-data:/var/lib/postgresql/data
+    networks:
+      - sonarnet
 
   # Serveur MySQL
-  db:
+  mysql:
+
     image: mysql:5.7
-    container_name: mysql_db
+    container_name: mysql_gogos
     environment:
       MYSQL_ROOT_PASSWORD: rootpassword
       MYSQL_DATABASE: mydb
@@ -45,60 +103,40 @@ services:
       - "3306:3306"
     volumes:
       - db_data:/var/lib/mysql
+    networks:
+      - gogs-network
 
-  # Serveur Redis
-  cache:
-    image: redis:latest
-    container_name: redis_cache
-    ports:
-      - "6379:6379"
-
-  # Serveur de fichiers Samba
-  file_server:
-    image: dperson/samba
-    container_name: samba_server
-    environment:
-      TZ: Europe/Paris
-      USERNAME: user
-      PASSWORD: password
-    ports:
-      - "139:139"
-      - "445:445"
-    volumes:
-      - ./shared:/mount
-
-  # Serveur Proxy Squid
-  proxy:
-    image: sameersbn/squid:latest
-    container_name: squid_proxy
+  # Serveur Git auto-hébergé Gogs
+  gogs:
+    image: gogs/gogs:0.12.10
+    container_name: gogs_server
+    restart: always
     ports:
-      - "3128:3128"
+      - "3002:3000"
+      - "10022:22"
+    depends_on:
+      - mysql
+      - postgresql
     volumes:
-      - ./squid:/etc/squid
-
-  # Serveur Email Postfix
-  mail:
-    image: mwader/postfix-relay
-    container_name: mail_server
-    environment:
-      RELAYHOST: "[smtp.gmail.com]:587"
-      RELAYUSER: "your-email@gmail.com"
-      RELAYPASS: "your-email-password"
-    ports:
-      - "587:587"
+      - gogs_data:/data
+    networks:
+      - gogs-network
+      - sonarnet
 
-  # Serveur de métriques Prometheus
+  # Serveur de monitoring Prometheus
   prometheus:
-    image: prom/prometheus:latest
+    image: prom/prometheus:v2.46.0
     container_name: prometheus_server
     volumes:
-      - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
+      - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
     ports:
       - "9090:9090"
+    networks:
+      - monitoring
 
   # Serveur de monitoring Grafana
   grafana:
-    image: grafana/grafana:latest
+    image: grafana/grafana:10.1.1
     container_name: grafana_server
     environment:
       - GF_SECURITY_ADMIN_USER=admin
@@ -109,19 +147,18 @@ services:
       - prometheus
     volumes:
       - grafana_data:/var/lib/grafana
+    networks:
+      - monitoring
 
-  # Serveur de qualité de code SonarQube
-  sonarqube:
-    image: sonarqube:community
-    container_name: sonarqube_server
+      #Le service node-exporter est utilisé pour collecter des métriques système sur la machine hôte et les exposer à Prometheus 
+
+  node-exporter:
+    image: prom/node-exporter:latest
+    container_name: node_exporter
     ports:
-      - "9000:9000"
-    environment:
-      SONAR_ES_BOOTSTRAP_CHECKS_DISABLE: "true"
-    volumes:
-      - sonarqube_data:/opt/sonarqube/data
-      - sonarqube_extensions:/opt/sonarqube/extensions
-      - sonarqube_logs:/opt/sonarqube/logs
+      - "9100:9100"
+    networks:
+      - monitoring
 
   # Serveur CI/CD Jenkins
   jenkins:
@@ -134,17 +171,36 @@ services:
     volumes:
       - jenkins_home:/var/jenkins_home
 
-  # Serveur Git auto-hébergé Gogs
-  gogs:
-    image: gogs/gogs:latest
-    container_name: gogs_server
+  # Serveur de qualité de code SonarQube
+  sonarqube:
+    image: sonarqube:lts-community
+    container_name: sonarqube_server
+    restart: always
+    depends_on:
+      - postgresql
     ports:
-      - "3002:3000"
-      - "10022:22"
+      - "9000:9000"
+    environment:
+      SONAR_ES_BOOTSTRAP_CHECKS_DISABLE: "true"
+      SONAR_JDBC_URL: jdbc:postgresql://postgresql:5432/sonarqube
+      SONAR_JDBC_USERNAME: user
+      SONAR_JDBC_PASSWORD: user
     volumes:
-      - gogs_data:/data
+      - sonarqube_data:/opt/sonarqube/data
+      - sonarqube_extensions:/opt/sonarqube/extensions
+      - sonarqube_logs:/opt/sonarqube/logs
+    networks:
+      - sonarnet
+
+networks:
+  monitoring:
+  gogs-network:
+    driver: bridge
+  sonarnet:
+    driver: bridge
 
 volumes:
+  postgresql-data:
   db_data:
   grafana_data:
   sonarqube_data:

+ 0 - 0
gitignore


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 13 - 0
letsencrypt/acme.json


+ 6 - 0
node_app/package-lock.json

@@ -0,0 +1,6 @@
+{
+  "name": "app",
+  "lockfileVersion": 3,
+  "requires": true,
+  "packages": {}
+}

+ 24 - 0
prometheus/prometheus.yml

@@ -0,0 +1,24 @@
+global:
+  scrape_interval: 15s  # Fréquence de collecte des métriques (par défaut : 15s)
+
+scrape_configs:
+  # 1️⃣ Scraper Prometheus lui-même
+  - job_name: 'prometheus'
+    static_configs:
+      - targets: ['localhost:9090']
+
+  # 2️⃣ Scraper Node Exporter (collecte des métriques système)
+  - job_name: 'node_exporter'
+    static_configs:
+      - targets: ['node-exporter:9100']
+
+  # 3️⃣ Scraper Grafana (optionnel, pour surveiller Grafana)
+  - job_name: 'grafana'
+    static_configs:
+      - targets: ['grafana:3000']
+
+  # 4️⃣ Scraper d'autres applications (exemple)
+  # Ajoute ici tes applications qui exposent des métriques
+  # - job_name: 'my_app'
+  #   static_configs:
+  #     - targets: ['my_app:8080']

+ 4 - 0
scripts/strart.sh

@@ -0,0 +1,4 @@
+#!/bin/bash
+echo "Starting all Docker containers..."
+docker-compose up -d
+echo "All containers are up and running!"

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels