services: minio: image: minio/minio:latest container_name: minio command: server /data --console-address ":9001" restart: unless-stopped environment: MINIO_ROOT_USER: minioadmin MINIO_ROOT_PASSWORD: LIGTNbUgQr ports: - "9000:9000" # API - "9001:9001" # Consola web volumes: - ./data/minio/data:/data #- ./data/certs:/root/.minio/certs:ro networks: - proxy jenkins: build: context: ./data/jenkins dockerfile: Dockerfile container_name: jenkins-server restart: unless-stopped environment: - JAVA_OPTS=-Djenkins.install.runSetupWizard=false expose: - "8080" volumes: - ./data/jenkins_home:/var/jenkins_home - ./data/jenkins/jenkins.yaml:/usr/share/jenkins/ref/jenkins.yaml:ro - ./data/jenkins/deploy:/opt/deploy:ro - ./data/jenkins/history:/opt/history:ro - ./data/jenkins/pipelines/Jenkinsfile.sco:/opt/jenkins/Jenkinsfile.sco:ro - ./data/jenkins/pipelines/Jenkinsfile.sco.reports:/opt/jenkins/Jenkinsfile.sco.reports:ro - ./data/jenkins/pipelines/Jenkinsfile.sco.reports.history:/opt/jenkins/Jenkinsfile.sco.reports.history:ro networks: - proxy npm: image: jc21/nginx-proxy-manager:latest container_name: nginx-proxy-manager restart: unless-stopped ports: - "80:80" - "443:443" - "81:81" volumes: - ./data/npm/data:/data - ./data/npm/letsencrypt:/etc/letsencrypt networks: - proxy prometheus-central: image: prom/prometheus:latest container_name: prometheus_central restart: unless-stopped ports: - "9090:9090" volumes: # Archivo de configuracion alojado en data - ./data/prometheus/config/prometheus.yml:/etc/prometheus/prometheus.yml:ro # Carpeta donde se guarda el historial de metricas - ./data/prometheus/data:/prometheus command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' - '--web.enable-remote-write-receiver' - '--query.lookback-delta=2m' networks: - proxy prom-label-proxy: image: quay.io/prometheuscommunity/prom-label-proxy:latest container_name: prom-label-proxy restart: unless-stopped ports: - "8081:8080" command: - "-insecure-listen-address=0.0.0.0:8080" - "-upstream=http://prometheus-central:9090" - "-label=cliente" - "-enable-label-apis" depends_on: - prometheus-central networks: - proxy grafana: image: grafana/grafana:13.1.1 container_name: grafana_central restart: unless-stopped ports: - "3000:3000" environment: - GF_SERVER_DOMAIN=laoficina1782.com - GF_SESSION_COOKIE_DOMAIN=.laoficina1782.com - GF_SECURITY_ALLOW_EMBEDDING=true - GF_SECURITY_COOKIE_SAMESITE=none - GF_SECURITY_COOKIE_SECURE=true - GF_DATAPROXY_CONCURRENT_QUERIES=4 - GF_DATAPROXY_TIMEOUT=900 - GF_DATAPROXY_DIAL_TIMEOUT=900 - GF_DATAPROXY_KEEPALIVE=900 volumes: - ./data/grafana/data:/var/lib/grafana depends_on: - prometheus-central networks: - proxy node-exporter: image: prom/node-exporter:latest container_name: node-exporter restart: unless-stopped networks: - proxy volumes: - /proc:/host/proc:ro - /sys:/host/sys:ro - /:/rootfs:ro - ./data/node-exporter/textfile_inventory:/etc/prometheus/textfile_inventory command: - '--path.procfs=/host/proc' - '--path.sysfs=/host/sys' - '--path.rootfs=/rootfs' - '--collector.textfile.directory=/etc/prometheus/textfile_inventory' cloudflared: image: cloudflare/cloudflared:latest container_name: cloudflared restart: unless-stopped command: tunnel --no-autoupdate run environment: - TUNNEL_TOKEN=${CLOUDFLARE_TUNNEL_TOKEN} networks: - proxy mysql-db: image: mysql:8.0 container_name: mysql-db restart: unless-stopped # sin exponer puertos, lo maneja ng environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_DATABASE: sco_telemetry MYSQL_USER: ${MYSQL_USER} MYSQL_PASSWORD: ${MYSQL_PASSWORD} volumes: - ./data/mysql/data:/var/lib/mysql # script de inicializacion - ./data/mysql/init:/docker-entrypoint-initdb.d healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_ROOT_PASSWORD}"] interval: 5s timeout: 5s retries: 10 networks: - proxy central-api: build: # Compilamos desde la estructura data/api-central context: ./data/central-api dockerfile: Dockerfile container_name: central-api restart: unless-stopped expose: - "5000" environment: - DB_HOST=mysql-db - DB_PORT=3306 - DB_USER=${MYSQL_USER} - DB_PASSWORD=${MYSQL_PASSWORD} - DB_NAME=sco_telemetry - ALERTS_LOG_FILE=/data/alerts/alerts.txt volumes: - ./data/alerts:/data/alerts depends_on: mysql-db: condition: service_healthy networks: - proxy # interfaz UI para probar registros adminer: image: adminer container_name: adminer restart: unless-stopped ports: - "8080:8080" networks: - proxy networks: proxy: driver: bridge