* Você terá um cluster Swarm (mesmo que seja 1 nó no início). * Airbyte fará o papel de **EL** (Extract + Load). * dbt entrará como **T** (Transform), orquestrado junto com o Airbyte. * Metabase conectará no **data warehouse** (ex: PostgreSQL ou BigQuery). --- # 🗂️ Roadmap: Airbyte + dbt + Metabase em Docker Swarm ## 1. Pré-requisitos * Servidor Linux com **Docker Engine** e **Docker Swarm** já inicializado: ```bash docker swarm init ``` * Docker Compose plugin instalado (`docker compose` ou `docker-compose`). * Acesso a um **data warehouse** (ex: PostgreSQL, BigQuery, Snowflake, etc.). --- ## 2. Estrutura do projeto Crie uma pasta chamada `etl-stack`: ``` etl-stack/ ├── airbyte/ # Configuração do Airbyte ├── dbt/ # Projetos dbt ├── metabase/ # Metabase configs └── docker-compose.yml ``` --- ## 3. Arquivo `docker-compose.yml` para Swarm ```yaml version: "3.9" services: # ======================== # Airbyte (EL) # ======================== airbyte-server: image: airbyte/airbyte:latest deploy: replicas: 1 restart_policy: condition: on-failure ports: - "8000:8000" environment: - DATABASE_USER=airbyte - DATABASE_PASSWORD=airbyte volumes: - airbyte_data:/data networks: - etl_net airbyte-worker: image: airbyte/airbyte:latest command: worker deploy: replicas: 1 volumes: - airbyte_data:/data networks: - etl_net # ======================== # dbt (T) # ======================== dbt: image: ghcr.io/dbt-labs/dbt-postgres:latest deploy: replicas: 1 volumes: - ./dbt:/usr/app working_dir: /usr/app networks: - etl_net command: ["bash", "-c", "dbt run"] # ======================== # Metabase (BI) # ======================== metabase: image: metabase/metabase:latest deploy: replicas: 1 restart_policy: condition: on-failure ports: - "3000:3000" environment: - MB_DB_FILE=/metabase-data/metabase.db volumes: - metabase_data:/metabase-data networks: - etl_net volumes: airbyte_data: metabase_data: networks: etl_net: driver: overlay ``` --- ## 4. Deploy no Swarm ```bash docker stack deploy -c docker-compose.yml etl ``` * Airbyte → [http://localhost:8000](http://localhost:8000) * Metabase → [http://localhost:3000](http://localhost:3000) --- ## 5. Fluxo de trabalho 1. **Configurar Airbyte** * Conecte suas fontes (CSV, APIs, MySQL, etc.). * Defina o destino (PostgreSQL ou BigQuery). * Airbyte fará a carga dos dados crus no destino. 2. **Rodar dbt para Transformação** * Na pasta `dbt/`, inicialize um projeto: ```bash docker run -it --rm -v $(pwd)/dbt:/usr/app ghcr.io/dbt-labs/dbt-postgres:latest init my_project ``` * Configure `profiles.yml` para apontar para o **mesmo warehouse usado pelo Airbyte**. * Crie modelos SQL (`.sql` em `models/`) para limpar e juntar tabelas. * Execute com: ```bash docker service update --force etl_dbt ``` 3. **Explorar no Metabase** * Conecte Metabase ao mesmo banco onde dbt grava as tabelas transformadas. * Crie dashboards em cima das tabelas finais do dbt. --- ## 6. Agendamento * Airbyte já tem scheduler interno. * Para rodar dbt após cada sync, use o **dbt Cloud** ou um **scheduler externo** (Airflow, Prefect, Dagster). * Alternativa simples: cronjob chamando `docker service update --force etl_dbt`. --- ## 7. Próximos passos * Criar **pipelines incrementais** no dbt. * Usar **tests e docs do dbt** para validar os dados. * Escalar com mais réplicas de Airbyte workers se o volume de dados crescer.