From 3a068b0e3fe87a1e5a0a0507dc001f8c904cd621 Mon Sep 17 00:00:00 2001 From: Egutierrez Date: Mon, 23 Mar 2026 21:41:12 +0100 Subject: [PATCH] Initial commit: Docker services stack MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Stack completo de servicios Docker incluyendo: - Homer dashboard para gestión de servicios - Marquez/OpenLineage para lineage de datos - Metabase/Rill analytics para análisis - PostgreSQL/ClickHouse databases - Configuraciones de Homer y Marquez Co-Authored-By: Claude Sonnet 4.5 --- docker-compose-analytics.yml | 43 +++++++++++++++ docker-compose-databases.yml | 62 +++++++++++++++++++++ docker-compose-marquez.yml | 50 +++++++++++++++++ docker-compose.yml | 12 ++++ homer/assets/config.yml | 103 +++++++++++++++++++++++++++++++++++ marquez-config/marquez.yml | 18 ++++++ rill-data/rill.yaml | 2 + rill-data/tmp/meta.db | Bin 0 -> 94208 bytes 8 files changed, 290 insertions(+) create mode 100644 docker-compose-analytics.yml create mode 100644 docker-compose-databases.yml create mode 100644 docker-compose-marquez.yml create mode 100644 docker-compose.yml create mode 100644 homer/assets/config.yml create mode 100644 marquez-config/marquez.yml create mode 100755 rill-data/rill.yaml create mode 100644 rill-data/tmp/meta.db diff --git a/docker-compose-analytics.yml b/docker-compose-analytics.yml new file mode 100644 index 0000000..139606a --- /dev/null +++ b/docker-compose-analytics.yml @@ -0,0 +1,43 @@ +services: + metabase-db: + image: postgres:15 + container_name: metabase-db + environment: + - POSTGRES_USER=metabase + - POSTGRES_PASSWORD=metabase + - POSTGRES_DB=metabase + volumes: + - metabase-data:/var/lib/postgresql/data + restart: unless-stopped + + metabase: + image: metabase/metabase:latest + container_name: metabase + ports: + - "3200:3000" + environment: + - MB_DB_TYPE=postgres + - MB_DB_DBNAME=metabase + - MB_DB_PORT=5432 + - MB_DB_USER=metabase + - MB_DB_PASS=metabase + - MB_DB_HOST=metabase-db + depends_on: + - metabase-db + restart: unless-stopped + + rill: + image: rilldata/rill:latest + container_name: rill + ports: + - "9009:9009" + volumes: + - ./rill-data:/rill + working_dir: /rill + environment: + - RILL_ADMIN_URL=http://localhost:9009 + command: start + restart: unless-stopped + +volumes: + metabase-data: diff --git a/docker-compose-databases.yml b/docker-compose-databases.yml new file mode 100644 index 0000000..6ffbd6f --- /dev/null +++ b/docker-compose-databases.yml @@ -0,0 +1,62 @@ +services: + postgres-main: + image: postgres:15 + container_name: postgres-main + ports: + - "5434:5432" + environment: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + POSTGRES_DB: postgres + volumes: + - postgres-main-data:/var/lib/postgresql/data + restart: unless-stopped + + clickhouse: + image: clickhouse/clickhouse-server:latest + container_name: clickhouse + ports: + - "8123:8123" + - "9000:9000" + environment: + CLICKHOUSE_DB: default + CLICKHOUSE_USER: default + CLICKHOUSE_PASSWORD: clickhouse + CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT: 1 + volumes: + - clickhouse-data:/var/lib/clickhouse + - clickhouse-logs:/var/log/clickhouse-server + ulimits: + nofile: + soft: 262144 + hard: 262144 + restart: unless-stopped + + dbgate: + image: dbgate/dbgate:latest + container_name: dbgate + ports: + - "3300:3000" + environment: + CONNECTIONS: "con1,con2" + LABEL_con1: PostgreSQL + SERVER_con1: postgres-main + USER_con1: postgres + PASSWORD_con1: postgres + PORT_con1: 5432 + ENGINE_con1: postgres@dbgate-plugin-postgres + LABEL_con2: ClickHouse + SERVER_con2: clickhouse + USER_con2: default + PASSWORD_con2: clickhouse + PORT_con2: 8123 + ENGINE_con2: clickhouse@dbgate-plugin-clickhouse + depends_on: + - postgres-main + - clickhouse + restart: unless-stopped + +volumes: + postgres-main-data: + clickhouse-data: + clickhouse-logs: diff --git a/docker-compose-marquez.yml b/docker-compose-marquez.yml new file mode 100644 index 0000000..c04ff9a --- /dev/null +++ b/docker-compose-marquez.yml @@ -0,0 +1,50 @@ +services: + postgres: + image: postgres:15 + container_name: marquez-db + ports: + - "5433:5432" + environment: + POSTGRES_USER: marquez + POSTGRES_PASSWORD: marquez + POSTGRES_DB: marquez + volumes: + - postgres-data:/var/lib/postgresql/data + healthcheck: + test: ["CMD", "pg_isready", "-U", "marquez"] + interval: 5s + timeout: 5s + retries: 5 + + marquez: + image: marquezproject/marquez:latest + container_name: marquez + ports: + - "5000:5000" + - "5001:5001" + environment: + POSTGRES_HOST: postgres + POSTGRES_PORT: 5432 + POSTGRES_DB: marquez + POSTGRES_USER: marquez + POSTGRES_PASSWORD: marquez + MARQUEZ_PORT: 5000 + MARQUEZ_ADMIN_PORT: 5001 + depends_on: + postgres: + condition: service_healthy + + marquez-web: + image: marquezproject/marquez-web:latest + container_name: marquez-web + ports: + - "3001:3000" + environment: + MARQUEZ_HOST: marquez + MARQUEZ_PORT: 5000 + WEB_PORT: 3000 + depends_on: + - marquez + +volumes: + postgres-data: diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..bbfc61c --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,12 @@ +services: + homer: + image: b4bz/homer:latest + container_name: homer + ports: + - "8080:8080" + volumes: + - ./homer/assets:/www/assets + environment: + - UID=1000 + - GID=1000 + restart: unless-stopped diff --git a/homer/assets/config.yml b/homer/assets/config.yml new file mode 100644 index 0000000..d897d03 --- /dev/null +++ b/homer/assets/config.yml @@ -0,0 +1,103 @@ +--- +title: "Dashboard" +subtitle: "Homer" +logo: "assets/logo.png" + +header: true +footer: false + +columns: "auto" + +theme: default + +colors: + light: + highlight-primary: "#3367d6" + highlight-secondary: "#4285f4" + highlight-hover: "#5a95f5" + background: "#f5f5f5" + card-background: "#ffffff" + text: "#363636" + text-header: "#ffffff" + text-title: "#303030" + text-subtitle: "#424242" + card-shadow: rgba(0, 0, 0, 0.1) + link: "#3273dc" + link-hover: "#363636" + dark: + highlight-primary: "#3367d6" + highlight-secondary: "#4285f4" + highlight-hover: "#5a95f5" + background: "#131313" + card-background: "#2b2b2b" + text: "#eaeaea" + text-header: "#ffffff" + text-title: "#fafafa" + text-subtitle: "#f5f5f5" + card-shadow: rgba(0, 0, 0, 0.4) + link: "#3273dc" + link-hover: "#ffdd57" + +links: [] + +services: + - name: "Visualization" + icon: "fas fa-chart-bar" + items: + - name: "Grafana" + logo: "http://localhost:3500/public/build/static/img/grafana_icon.1e0deb6b.svg" + subtitle: "Dashboards & Visualization" + tag: "visualization" + url: "http://localhost:3500" + target: "_blank" + + - name: "Metabase" + logo: "https://www.metabase.com/images/logo.svg" + subtitle: "Business Intelligence" + tag: "visualization" + url: "http://localhost:3200" + target: "_blank" + + - name: "Rill" + logo: "http://localhost:9009/favicon.png" + subtitle: "Modern BI Dashboard" + tag: "visualization" + url: "http://localhost:9009" + target: "_blank" + + - name: "Monitoring" + icon: "fas fa-chart-line" + items: + - name: "Alloy UI" + logo: "http://localhost:12345/public/static/media/logo.5d4ad2e6fdb761a51107c6cd8b65c7ff.svg" + subtitle: "Alloy Configuration" + tag: "app" + url: "http://localhost:12345" + target: "_blank" + + - name: "Prometheus UI" + logo: "data:image/svg+xml," + subtitle: "Metrics Database" + tag: "monitoring" + url: "http://localhost:9090" + target: "_blank" + + - name: "Data Lineage" + icon: "fas fa-project-diagram" + items: + - name: "Marquez UI" + logo: "http://localhost:3001/42e36e3d359253b1fc98e9f44cb12c57.svg" + subtitle: "OpenLineage Data Lineage" + tag: "lineage" + url: "http://localhost:3001" + target: "_blank" + + - name: "Databases" + icon: "fas fa-database" + items: + - name: "DBGate" + logo: "http://localhost:3300/logo192.png" + subtitle: "Database Management Tool" + tag: "database" + url: "http://localhost:3300" + target: "_blank" diff --git a/marquez-config/marquez.yml b/marquez-config/marquez.yml new file mode 100644 index 0000000..6421fe7 --- /dev/null +++ b/marquez-config/marquez.yml @@ -0,0 +1,18 @@ +server: + applicationConnectors: + - type: http + port: 5000 + adminConnectors: + - type: http + port: 8081 + +db: + driverClass: org.postgresql.Driver + url: jdbc:postgresql://postgres:5432/marquez + user: marquez + password: marquez + +logging: + level: INFO + appenders: + - type: console diff --git a/rill-data/rill.yaml b/rill-data/rill.yaml new file mode 100755 index 0000000..469f266 --- /dev/null +++ b/rill-data/rill.yaml @@ -0,0 +1,2 @@ +sources: [] +models: [] diff --git a/rill-data/tmp/meta.db b/rill-data/tmp/meta.db new file mode 100644 index 0000000000000000000000000000000000000000..d91c7ee94f45b3351dca9289662b81b1652c7f88 GIT binary patch literal 94208 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