version: '3.8' services: keycloak: image: quay.io/keycloak/keycloak:24.0.1 container_name: keycloak ports: - "8085:8080" environment: KEYCLOAK_ADMIN: admin KEYCLOAK_ADMIN_PASSWORD: admin command: - start-dev # labels: # - "traefik.enable=true" # - "traefik.http.routers.keycloak.rule=Host(`auth.mondomaine.com`)" # - "traefik.http.routers.keycloak.entrypoints=web" # - "traefik.http.services.keycloak.loadbalancer.server.port=8080" restart: unless-stopped app_transport_front: build: context: ./app_transport_front dockerfile: Dockerfile container_name: vue_frontend volumes: - ./app_transport_front:/app ports: - "5174:5173" environment: - VITE_API_URL=http://localhost:5173 networks: - gogs-network # labels: # - "traefik.enable=true" # - "traefik.http.routers.vue_frontend.rule=Host(`vue_frontend.localhost`)" # - "traefik.http.services.vue_frontend.loadbalancer.server.port=5173" # - "traefik.http.routers.vue_frontend.entrypoints=web" notification_service: build: context: ./notification_service dockerfile: Dockerfile container_name: notification_service ports: - "4000:4000" networks: - gogs-network environment: - REDIS_HOST=redis - SMTP_HOST=smtp.exemple.com - SMTP_USER=ton_email - SMTP_PASS=mot_de_passe - SMS_API_KEY=ta_clé_api_sms redis: image: redis:7 container_name: redis_cache ports: - "6379:6379" networks: - gogs-network n8n: image: docker.n8n.io/n8nio/n8n restart: always ports: - "127.0.0.1:5678:5678" # labels: # - traefik.enable=true # - traefik.http.routers.n8n.rule=Host(`${SUBDOMAIN}.${DOMAIN_NAME}`) # - traefik.http.routers.n8n.tls=true # - traefik.http.routers.n8n.entrypoints=web,websecure # - traefik.http.routers.n8n.tls.certresolver=mytlschallenge # - traefik.http.middlewares.n8n.headers.SSLRedirect=true # - traefik.http.middlewares.n8n.headers.STSSeconds=315360000 # - traefik.http.middlewares.n8n.headers.browserXSSFilter=true # - traefik.http.middlewares.n8n.headers.contentTypeNosniff=true # - traefik.http.middlewares.n8n.headers.forceSTSHeader=true # - traefik.http.middlewares.n8n.headers.SSLHost=${DOMAIN_NAME} # - traefik.http.middlewares.n8n.headers.STSIncludeSubdomains=true # - traefik.http.middlewares.n8n.headers.STSPreload=true # - traefik.http.routers.n8n.middlewares=n8n@docker environment: - N8N_HOST=${SUBDOMAIN}.${DOMAIN_NAME} - N8N_PORT=5678 - N8N_PROTOCOL=https - NODE_ENV=production - WEBHOOK_URL=https://${SUBDOMAIN}.${DOMAIN_NAME}/ - GENERIC_TIMEZONE=${GENERIC_TIMEZONE} volumes: - n8n_data:/home/node/.n8n - ./local-files:/files # traefik: # image: traefik:v2.10 # container_name: traefik # restart: always # command: # - "--api.dashboard=true" # - "--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" # - "--log.level=DEBUG" # labels: # - com.host.description=label # # Router pour accéder au dashboard via traefik.localhost # - "traefik.enable=true" # - "traefik.http.routers.traefik.rule=Host(`localhost`)" # - "traefik.http.routers.traefik.entrypoints=web" # - "traefik.http.routers.traefik-secure.entrypoints=websecure" # - "traefik.http.routers.traefik.service=api@internal" # Utilise le service interne de Traefik # - "traefik.http.routers.traefik.middlewares=dashboard-auth" # (Optionnel) protection du dashboard # - "traefik.http.routers.traefik-secure.tls=true" # # Middleware pour protéger le dashboard avec une authentification basique (user: admin, mdp: admin) # #- "traefik.http.middlewares.dashboard-auth.basicauth.users=admin:$$apr1$$H6uskkkW$$IgXLP6ewTrSuBkTrqE8wj/" # ports: # - "80:80" # - "443:443" # volumes: # - "/var/run/docker.sock:/var/run/docker.sock:ro" # - "./letsencrypt:/letsencrypt" # networks: # - gogs-network # whoami: # image: traefik/whoami # labels: # - "traefik.enable=true" # - "traefik.http.routers.whoami.rule=Host(`localhost`)" # - "traefik.http.routers.whoami.entrypoints=web" # - "traefik.http.services.whoami.loadbalancer.server.port=80" # 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 phpmyadmin: image: phpmyadmin/phpmyadmin container_name: phpmyadmin restart: always environment: PMA_HOST: mysql PMA_PORT: 3306 ports: - "8083:80" networks: - gogs-network # labels: # - "traefik.enable=true" # - "traefik.http.routers.phpmyadmin.rule=Host(`phpmyadmin.localhost`)" # - "traefik.http.services.phpmyadmin.loadbalancer.server.port=80" # - "traefik.http.routers.phpmyadmin.entrypoints=web" node_app: build: context: ./node_app # Le dossier contenant le Dockerfile dockerfile: Dockerfile #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 NODE_ENV: development ports: - "3001:3000" volumes: - ./node_app:/usr/src/app - /usr/src/app/node_modules command: ["npm", "run", "start"] networks: - gogs-network # labels: # - "traefik.enable=true" # - "traefik.http.routers.node_app.rule=Host(`api.localhost`)" # - "traefik.http.services.node_app.loadbalancer.server.port=3000" # - "traefik.http.routers.node_app.entrypoints=web" 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(`sonarqube.localhost`)" # - "traefik.http.services.sonarqube.loadbalancer.server.port=9000" # - "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 pgadmin: image: dpage/pgadmin4 container_name: pgadmin restart: always environment: PGADMIN_DEFAULT_EMAIL: admin@admin.com PGADMIN_DEFAULT_PASSWORD: adminpassword ports: - "8084:80" networks: - gogs-network # labels: # - "traefik.enable=true" # - "traefik.http.routers.pgadmin.rule=Host(`pgadmin.localhost`)" # - "traefik.http.services.pgadmin.loadbalancer.server.port=80" # - "traefik.http.routers.pgadmin.entrypoints=web" 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(`gogs.localhost`)" # - "traefik.http.services.gogs.loadbalancer.server.port=3000" # - "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`)" # - "traefik.http.services.prometheus.loadbalancer.server.port=9090" # - "traefik.http.routers.prometheus.entrypoints=web" 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: sonarqube_data: sonarqube_extensions: sonarqube_logs: n8n_data: