|
@@ -1,27 +1,71 @@
|
|
|
version: '3.8'
|
|
version: '3.8'
|
|
|
|
|
|
|
|
services:
|
|
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
|
|
# Serveur Web Nginx
|
|
|
web:
|
|
web:
|
|
|
- image: nginx:latest
|
|
|
|
|
|
|
+ image: nginx:1.25
|
|
|
container_name: nginx_server
|
|
container_name: nginx_server
|
|
|
- ports:
|
|
|
|
|
- - "8080:80"
|
|
|
|
|
volumes:
|
|
volumes:
|
|
|
- ./html:/usr/share/nginx/html:ro
|
|
- ./html:/usr/share/nginx/html:ro
|
|
|
depends_on:
|
|
depends_on:
|
|
|
|
|
+ - node_app
|
|
|
- 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
|
|
# Serveur Web Node.js
|
|
|
node_app:
|
|
node_app:
|
|
|
- image: node:latest
|
|
|
|
|
|
|
+ image: node:18
|
|
|
container_name: node_server
|
|
container_name: node_server
|
|
|
working_dir: /usr/src/app
|
|
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:
|
|
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
|
|
# Serveur PHP
|
|
|
app:
|
|
app:
|
|
@@ -30,12 +74,26 @@ services:
|
|
|
volumes:
|
|
volumes:
|
|
|
- ./html:/var/www/html
|
|
- ./html:/var/www/html
|
|
|
depends_on:
|
|
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
|
|
# Serveur MySQL
|
|
|
- db:
|
|
|
|
|
|
|
+ mysql:
|
|
|
|
|
+
|
|
|
image: mysql:5.7
|
|
image: mysql:5.7
|
|
|
- container_name: mysql_db
|
|
|
|
|
|
|
+ container_name: mysql_gogos
|
|
|
environment:
|
|
environment:
|
|
|
MYSQL_ROOT_PASSWORD: rootpassword
|
|
MYSQL_ROOT_PASSWORD: rootpassword
|
|
|
MYSQL_DATABASE: mydb
|
|
MYSQL_DATABASE: mydb
|
|
@@ -45,60 +103,40 @@ services:
|
|
|
- "3306:3306"
|
|
- "3306:3306"
|
|
|
volumes:
|
|
volumes:
|
|
|
- db_data:/var/lib/mysql
|
|
- 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:
|
|
ports:
|
|
|
- - "3128:3128"
|
|
|
|
|
|
|
+ - "3002:3000"
|
|
|
|
|
+ - "10022:22"
|
|
|
|
|
+ depends_on:
|
|
|
|
|
+ - mysql
|
|
|
|
|
+ - postgresql
|
|
|
volumes:
|
|
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:
|
|
prometheus:
|
|
|
- image: prom/prometheus:latest
|
|
|
|
|
|
|
+ image: prom/prometheus:v2.46.0
|
|
|
container_name: prometheus_server
|
|
container_name: prometheus_server
|
|
|
volumes:
|
|
volumes:
|
|
|
- - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
|
|
|
|
|
|
|
+ - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
|
|
|
ports:
|
|
ports:
|
|
|
- "9090:9090"
|
|
- "9090:9090"
|
|
|
|
|
+ networks:
|
|
|
|
|
+ - monitoring
|
|
|
|
|
|
|
|
# Serveur de monitoring Grafana
|
|
# Serveur de monitoring Grafana
|
|
|
grafana:
|
|
grafana:
|
|
|
- image: grafana/grafana:latest
|
|
|
|
|
|
|
+ image: grafana/grafana:10.1.1
|
|
|
container_name: grafana_server
|
|
container_name: grafana_server
|
|
|
environment:
|
|
environment:
|
|
|
- GF_SECURITY_ADMIN_USER=admin
|
|
- GF_SECURITY_ADMIN_USER=admin
|
|
@@ -109,19 +147,18 @@ services:
|
|
|
- prometheus
|
|
- prometheus
|
|
|
volumes:
|
|
volumes:
|
|
|
- grafana_data:/var/lib/grafana
|
|
- 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:
|
|
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
|
|
# Serveur CI/CD Jenkins
|
|
|
jenkins:
|
|
jenkins:
|
|
@@ -134,17 +171,36 @@ services:
|
|
|
volumes:
|
|
volumes:
|
|
|
- jenkins_home:/var/jenkins_home
|
|
- 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:
|
|
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:
|
|
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:
|
|
volumes:
|
|
|
|
|
+ postgresql-data:
|
|
|
db_data:
|
|
db_data:
|
|
|
grafana_data:
|
|
grafana_data:
|
|
|
sonarqube_data:
|
|
sonarqube_data:
|