diff --git a/roadmap_implementacao b/roadmap_implementacao new file mode 100644 index 0000000..fac19b9 --- /dev/null +++ b/roadmap_implementacao @@ -0,0 +1,171 @@ +* 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. + +--- + +👉 Quer que eu prepare já um **exemplo de projeto dbt (com tabelas fictícias de CSV do Airbyte)** para você ter pronto e só rodar no seu setup?