services: app_transport_front: build: context: ./app_transport_front dockerfile: Dockerfile container_name: vue_frontend volumes: - ./app_transport_front:/app - vue_node_modules:/app/node_modules ports: - "5174:5173" environment: - VITE_API_URL=http://localhost:3000 networks: - gogs-network labels: - "traefik.enable=true" - "traefik.http.routers.vue_frontend.rule=Host(`vue_frontend.localhost`)" # Remplace par ton domaine - "traefik.http.services.vue_frontend.loadbalancer.server.port=5173" # Port du frontend - "traefik.http.routers.vue_frontend.entrypoints=vue_frontend" redis: image: redis:7 container_name: redis_cache ports: - "6379:6379" networks: - gogs-network traefik: image: traefik:v2.10 container_name: traefik restart: always command: - "--api.insecure=true" - "--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" networks: - gogs-network mysql: image: mysql:5.7 container_name: mysql restart: always environment: MYSQL_ROOT_PASSWORD: rootpassword MYSQL_DATABASE: transport MYSQL_USER: user MYSQL_PASSWORD: userpassword ports: - "3306:3306" volumes: - mysql-data:/var/lib/mysql - ./mysql-init:/docker-entrypoint-initdb.d:ro networks: - gogs-network healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] interval: 10s retries: 5 start_period: 30s node_app: image: node:latest restart: always container_name: node_app working_dir: /usr/src/app depends_on: mysql: condition: service_healthy environment: - DATABASE_URL=mysql://user:userpassword@mysql:3306/transport?connectTimeout=30000 - MYSQL_HOST=mysql - MYSQL_PORT=3306 - MYSQL_USER=user - MYSQL_PASSWORD=userpassword - MYSQL_DATABASE=transport ports: - "3001:3000" volumes: - ./node_app:/usr/src/app - node_app_node_modules:/usr/src/app/node_modules command: ["npm", "run", "start"] networks: - gogs-network labels: - com.host.description=label - "traefik.enable=true" - "traefik.http.routers.node_app.rule=Host(`localhost`)" # Remplace par ton domaine API - "traefik.http.services.node_app.loadbalancer.server.port=3000" # Port de l'API - "traefik.http.routers.node_app.entrypoints=node_app" sonarqube: image: sonarqube:lts container_name: sonarqube restart: always depends_on: sonarqube_db: condition: service_healthy environment: - SONAR_JDBC_URL=jdbc:postgresql://sonarqube_db:5432/sonarqube - SONAR_JDBC_USERNAME=sonar - SONAR_JDBC_PASSWORD=sonarpassword ports: - "9000:9000" volumes: - sonarqube_data:/opt/sonarqube/data - sonarqube_extensions:/opt/sonarqube/extensions - sonarqube_logs:/opt/sonarqube/logs networks: - sonarnet labels: - "traefik.enable=true" - "traefik.http.routers.sonarqube.rule=Host(`localhost`)" # Remplace par ton domaine pour SonarQube - "traefik.http.services.sonarqube.loadbalancer.server.port=9000" # Port de SonarQube - "traefik.http.routers.sonarqube.entrypoints=web" sonarqube_db: image: postgres:13 container_name: sonarqube_db restart: always environment: POSTGRES_USER: sonar POSTGRES_PASSWORD: sonarpassword POSTGRES_DB: sonarqube ports: - "5432:5432" volumes: - postgresql-data:/var/lib/postgresql/data - ./postgres-init.sql:/docker-entrypoint-initdb.d/init.sql networks: - sonarnet healthcheck: test: ["CMD-SHELL", "pg_isready -U sonar"] interval: 10s retries: 5 start_period: 30s gogs: image: gogs/gogs:0.12.10 container_name: gogs_server restart: always ports: - "3000:3000" - "10022:22" depends_on: mysql: condition: service_healthy sonarqube_db: condition: service_healthy volumes: - gogs_data:/data networks: - gogs-network - sonarnet labels: - com.host.description=label - "traefik.enable=true" - "traefik.http.routers.gogs.rule=Host(`localhost`)" # Remplace par ton domaine pour Gogs - "traefik.http.services.gogs.loadbalancer.server.port=3000" # Port de Gogs - "traefik.http.routers.gogs.entrypoints=web" prometheus: image: prom/prometheus:v2.46.0 container_name: prometheus_server volumes: - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro ports: - "9090:9090" networks: - monitoring labels: - com.host.description=label - "traefik.enable=true" - "traefik.http.routers.prometheus.rule=Host(`prometheus.example.com`)" # Remplace par ton domaine pour prometheus - "traefik.http.services.prometheus.loadbalancer.server.port=3000" # Port de prometheus - "traefik.http.routers.prometheus.entrypoints=prometheus" grafana: image: grafana/grafana:10.1.1 container_name: grafana_server environment: - GF_SECURITY_ADMIN_USER=admin - GF_SECURITY_ADMIN_PASSWORD=admin ports: - "3003:3000" depends_on: - prometheus volumes: - grafana_data:/var/lib/grafana networks: - monitoring node-exporter: image: prom/node-exporter:latest container_name: node_exporter ports: - "9100:9100" networks: - monitoring jenkins: image: jenkins/jenkins:lts container_name: jenkins_server user: root ports: - "8081:8080" - "50000:50000" volumes: - jenkins_home:/var/jenkins_home - /var/run/docker.sock:/var/run/docker.sock networks: - gogs-network networks: monitoring: driver: bridge gogs-network: driver: bridge sonarnet: driver: bridge volumes: mysql-data: postgresql-data: grafana_data: jenkins_home: gogs_data: vue_node_modules: node_app_node_modules: sonarqube_data: sonarqube_extensions: sonarqube_logs: