feat(appliance): initial release of MERICA standalone appliance v1.0.0

This commit is contained in:
2026-10-21 17:16:46 +07:00
commit 851be0cda7
144 changed files with 31135 additions and 0 deletions
+149
View File
@@ -0,0 +1,149 @@
# 🏛️ Arsitektur Platform — MERICA
> **Navigasi Cepat**: [🏠 Pusat Dokumentasi](index.md) | [📦 Panduan Deployment](deployment_guide.md) | [📘 Integrasi Airflow External](panduan_integrasi_existing_airflow.md) | [🎨 Panduan Pengguna Canvas](user_guide.md)
Dokumen ini menjelaskan rancang bangun teknis distribusi produksi **MERICA Low-Code Appliance**.
---
## 📌 1. Prinsip Utama Rancang Bangun
1. **Pola Single-Port Appliance (Unified Ingress Gateway)**:
* Seluruh lalu lintas dari klien (peramban pengguna maupun panggilan REST API) disatukan melalui **port tunggal host: `14000`**.
* Di dalam kontainer, proses **Nginx** bertindak sebagai *reverse proxy gateway*:
* Permintaan UI (`/*`) disajikan langsung dari berkas statis Vite React (`/usr/share/nginx/html`).
* Permintaan API (`/api/*`), dokumentasi Swagger (`/docs`), dan skema (`/openapi.json`) di-proxy ke loopback backend FastAPI pada `127.0.0.1:8000`.
* **Port backend (8000) TIDAK PERNAH diekspos ke host luar**. Hal ini menjamin **Zero CORS Issues**, meminimalkan latensi jaringan internal, dan mengeliminasi vektor serangan langsung ke server aplikasi.
2. **Decoupled Stateless Engine & Zero Local Bloat**:
* Kontainer MERICA tidak menjalankan PostgreSQL, Redis, atau Airflow worker di dalamnya.
* Total penggunaan sumber daya appliance sangat efisien: **RAM $\sim$ 100 MB** dan **CPU idle $< 1\%$**.
* State eksekusi dan metadata pipeline dialokasikan sepenuhnya ke kluster Apache Airflow dan PostgreSQL eksternal yang dikonfigurasi melalui berkas `.env`.
3. **Dukungan Dual-Mode Pipelines SSOT (Anti-Blank Canvas & GitOps)**:
* **Mode A: Local Mount Starter Pipelines** (`PIPELINES_DIR=./pipelines`): Menyediakan 3 template pipeline siap pakai secara *out-of-the-box* sehingga kanvas tidak kosong (*Anti-Blank Canvas*).
* **Mode B: Git DAG Bundles (AIP-66)**: Airflow DAG Processor secara mandiri memantau repositori Git pipeline (`merica-pipelines.git`) setiap 30 detik untuk *Zero-Downtime Hot-Reload*.
4. **Shift-Left Pre-Flight Verification**:
* Sebelum sebuah pipeline di-deploy ke Apache Airflow, engine backend MERICA menjalankan validasi sintaks `#val`, verifikasi kontrak kolom dbt (`contract: enforced`), dan inferensi tipe data otomatis. Kesalahan konfigurasi terdeteksi di kanvas sebelum task sempat dijadwalkan oleh scheduler Airflow.
---
## 🌐 2. Diagram Topologi Kontainer & Aliran Jaringan
```mermaid
flowchart TB
subgraph CLIENT ["Akses Pengguna & Klien"]
USER["Pengguna / Browser Web\n(Data Engineer)"]
end
subgraph APPLIANCE ["MERICA Appliance Container (Port 14000:80)"]
NGINX["Nginx Web Gateway\n(Port 80 Internal)"]
REACT["Vite React Canvas UI\n(Static Assets / SPA)"]
FASTAPI["FastAPI Backend Engine\n(127.0.0.1:8000 Loopback)"]
SUPERVISOR["Supervisord Process Manager"]
NGINX -->|/* Static Assets| REACT
NGINX -->|/api/* Reverse Proxy| FASTAPI
SUPERVISOR -.->|Supervisi Proses| NGINX
SUPERVISOR -.->|Supervisi Proses| FASTAPI
end
subgraph PIPELINE_STORAGE ["Single Source of Truth (SSOT) Pipelines"]
LOCAL_MOUNT["Mounted Starter Pipelines\n(./pipelines/)"]
GIT_REPO["Git Pipeline Repository\n(merica-pipelines.git)"]
end
subgraph AIRFLOW_CLUSTER ["Apache Airflow 3 Cluster (External)"]
API_SERVER["Airflow API Server & Web UI\n(Port 14080)"]
SCHEDULER["Airflow Scheduler & Workers"]
DAG_PROC["Airflow DAG Processor\n(AIP-66 Git DAG Bundles)"]
end
subgraph EXTERNAL_LAKEHOUSE ["Infrastruktur Data Lakehouse (External)"]
PG_DB["PostgreSQL MetaDB\n(Port 14432)"]
S3_STORAGE["MinIO / S3 Lakehouse Storage\n(Port 14090)"]
OMD["OpenMetadata 2.0 Governance\n(Port 14585)"]
end
USER -->|HTTP :14000| NGINX
FASTAPI <-->|Read / Write YAML & dbt| LOCAL_MOUNT
FASTAPI -.->|Push Commit (GitOps)| GIT_REPO
FASTAPI -->|REST API :14080| API_SERVER
FASTAPI -->|Introspection & Safe Preview| PG_DB
FASTAPI -->|Governance Entity Sync| OMD
DAG_PROC -->|Poll 30s Hot-Reload| GIT_REPO
DAG_PROC <-->|Local Volume Share| LOCAL_MOUNT
SCHEDULER -->|Eksekusi Task Ingestion| PG_DB
SCHEDULER -->|Parquet / Iceberg Write| S3_STORAGE
SCHEDULER -->|OpenLineage Telemetry| OMD
```
---
## 🧩 3. Arsitektur Internal Modul Backend (Engine Core)
Backend MERICA dibangun di atas FastAPI modern dengan modul-modul modular:
```mermaid
graph LR
subgraph ROUTERS ["API Endpoints (/api/v1)"]
R_PIPE["pipelines.py\n(CRUD & Deploy)"]
R_DISC["discovery.py\n(GWS Explorer)"]
R_PREV["preview.py\n(DB Safe Preview)"]
R_VAL["validation.py\n(Pre-Flight Check)"]
R_GOV["governance.py\n(OpenMetadata)"]
end
subgraph SERVICES ["Core Business Services"]
S_PARSE["pipeline_parser.py\n(YAML Parser & Compiler)"]
S_DBT["dbt_service.py\n(Model Gen & Smart Types)"]
S_GWS["gws_service.py\n(Drive & Header Suggestion)"]
S_DB["db_service.py\n(Introspection & PK Detect)"]
S_AIR["airflow_service.py\n(Airflow 3 REST Client)"]
S_OMD["omd_service.py\n(OpenMetadata Registrasi)"]
end
ROUTERS --> SERVICES
```
### Modul-Modul Utama:
1. **Pipeline Parser & Compiler (`pipeline_parser.py`)**:
* Mengonversi skema visual ReactFlow (node & edge JSON) ke spesifikasi deklaratif YAML Airflow 3 (`configs/*.yaml`).
* Mengompilasi konfigurasi node menjadi parameter terstandarisasi untuk Sling CDC, GWS Ingestor, dlt REST API, DuckDB deduplikasi, dan Great Expectations.
2. **dbt Medallion Service (`dbt_service.py`)**:
* Menghasilkan model SQL dbt Silver dan Gold secara otomatis.
* **Smart DDL Type Inference**: Menginferensi tipe data kolom secara otomatis (`INTEGER`, `DECIMAL(18,2)`, `TIMESTAMP`, `VARCHAR`).
* **Shift-Left Quality Contract**: Menghasilkan aturan `schema.yml` dengan `contract: enforced`, constraint `unique`, `not_null`, dan `accepted_values`.
* **Astronomer Cosmos Adapter**: Menyusun TaskGroup Airflow 3 dengan perilaku `TestBehavior.AFTER_EACH` (memisahkan model `.run` dan `.test` secara granular).
3. **Database Introspection & Preview (`db_service.py`)**:
* Melakukan inspeksi skema tabel dari sumber PostgreSQL.
* Otomatis mendeteksi kandidat Primary Key (PK) dan kolom watermark berbasis timestamp.
* Menyediakan **Safe 10-Row Data Preview** menggunakan pembatasan `LIMIT 10` dan statement timeout untuk mencegah *table lock*.
4. **Google Workspace Discovery (`gws_service.py`)**:
* Menjelajahi folder Google Drive secara interaktif.
* Menganalisis tab Google Spreadsheet dan memberikan saran baris header (*Header Row Suggestion*).
* Menyiapkan konfigurasi pembersihan otomatis (*auto-cleansing*: nama kolom `snake_case`, pembersihan unit string `(Rp)`, forward-fill sel yang di-merge).
5. **OpenMetadata Governance Sync (`omd_service.py`)**:
* Sinkronisasi entitas pipeline ke katalog OpenMetadata 2.0.
* Pemetaan lineage visual end-to-end dari sumber data hingga Gold table.
* Integrasi hasil uji kualitas data Great Expectations ke tab Data Quality OpenMetadata.
---
## 🔒 4. Keamanan Perimeter & Kebijakan Hak Akses
* **UID Execution**: Apache Airflow berjalan dengan user ID **`50000:0` (airflow)** sesuai standar resmi Apache Airflow 3.
* **Volume Permission**: Seluruh volume bersama (*shared volumes*) yang diakses oleh DAG Processor menggunakan hak akses `50000:0` dengan `umask 0002` untuk mencegah *PermissionDenied error*.
* **Perimeter Network**: Port 8000 FastAPI hanya mendengarkan pada antarmuka lokal `127.0.0.1` di dalam kontainer appliance; peramban eksternal hanya dapat berkomunikasi melalui Nginx pada port `14000`.
* **Kredensial Aman**: Seluruh koneksi ke sumber database eksternal dan S3 menggunakan environment variable terenkripsi tanpa menyimpan *plain-text credential* di repositori Git.
---
## 🧭 Navigasi Dokumen Terkait
* Lanjutkan ke: [📦 Panduan Deployment & Build](deployment_guide.md)
* Menghubungkan ke Airflow: [📘 Panduan Integrasi Airflow External](panduan_integrasi_existing_airflow.md)
* Memulai Mendesain Pipeline: [🎨 Panduan Pengguna Canvas](user_guide.md)
* Kembali ke Indeks: [🏠 Pusat Dokumentasi](index.md)
+179
View File
@@ -0,0 +1,179 @@
# 📦 Panduan Deployment & Build Mandiri — MERICA
> **Navigasi Cepat**: [🏠 Pusat Dokumentasi](index.md) | [🏛️ Arsitektur Platform](architecture.md) | [📘 Integrasi Airflow External](panduan_integrasi_existing_airflow.md) | [🎨 Panduan Pengguna Canvas](user_guide.md)
Panduan resmi bagi DevOps, System Administrator, dan Data Platform Engineer untuk instalasi, konfigurasi, build image mandiri, dan pemeliharaan MERICA Appliance.
---
## 💻 1. Spesifikasi Sistem & Prasyarat
Kebutuhan sumber daya perangkat keras tergantung pada mode deployment yang dipilih:
| Komponen | Mode 1: Standalone Appliance (Rekomendasi Produksi) | Mode 2: All-in-One Demo (dengan Airflow & DB Lokal) |
| :--- | :--- | :--- |
| **Peran** | Hanya menjalankan antarmuka Canvas & API Gateway MERICA (Port 14000). Eksekusi pipeline didelegasikan ke Airflow eksternal. | Menjalankan MERICA + Apache Airflow 3 + Postgres + Redis dalam satu host untuk demo mandiri. |
| **CPU** | **1 vCPU** (x86_64) | **4 vCPU** (x86_64) |
| **RAM** | **512 MB** *(Penggunaan aktual hanya $\sim$ 100 MB)* | **8 GB** |
| **Disk** | **2 GB SSD** | **30 GB SSD** |
| **Sistem Operasi** | Linux Ubuntu 20.04/22.04/24.04 LTS, RHEL 8/9, Debian 11/12, Rocky Linux | Sama |
| **Runtime** | Docker Engine $\ge$ 24.0, Docker Compose v2 | Sama |
---
## ⚡ 2. Instalasi Cepat (Quick Start Sekali Klik)
### Opsi A: Menggunakan Skrip Otomatis `setup.sh` (Paling Cepat)
Paket rilis MERICA dilengkapi dengan skrip instalasi cerdas `setup.sh`:
```bash
# 1. Buka direktori rilis MERICA
cd release/merica
# 2. Jalankan skrip setup
bash ./setup.sh
```
Skrip `setup.sh` secara otomatis akan:
1. Memeriksa ketersediaan Docker Engine dan Docker Compose v2.
2. Memeriksa ketersediaan berkas `.env` (jika belum ada, otomatis menyalin dari `.env.example`).
3. Memastikan direktori starter pipelines (`./pipelines/`) siap dengan permission yang sesuai.
4. Menjalankan kontainer `merica-appliance` di latar belakang (`docker compose up -d`).
5. Melakukan polling *health check* ke endpoint `http://localhost:14000/api/v1/health` hingga layanan siap digunakan dalam waktu $\le 5$ detik.
---
### Opsi B: Instalasi Manual via Docker Compose
```bash
# 1. Buka direktori kerja
cd release/merica
# 2. Salin template environment variable
cp .env.example .env
# 3. Sesuaikan alamat host Airflow existing pada .env
nano .env
# 4. Nyalakan kontainer appliance
docker compose up -d
# 5. Verifikasi status kontainer
docker compose ps
```
Setelah kontainer aktif:
* **MERICA Canvas Web**: Buka [`http://localhost:14000`](http://localhost:14000)
* **Kredensial Default**: Username: `admin` | Password: `admin`
---
## ⚙️ 3. Konfigurasi Parameter `.env`
Berkas `.env` memegang seluruh konfigurasi konektivitas eksternal. Berikut adalah parameter utama yang perlu Anda sesuaikan:
```bash
# --- Konfigurasi Appliance MERICA ---
MERICA_IMAGE=registry.sicabe.com/merica:1.0.0
MERICA_PORT=14000
ENVIRONMENT=production
# --- Alamat Cluster Apache Airflow External ---
# Arahkan ke URL web UI / API server kluster Airflow 3 existing Anda:
AIRFLOW_WEB_URL=http://host.docker.internal:14080
# --- Koneksi MetaDB Eksternal (Lakehouse PostgreSQL) ---
# Digunakan untuk fitur Introspection skema tabel dan Safe 10-Row Data Preview:
POSTGRES_HOST=host.docker.internal
POSTGRES_PORT=14432
POSTGRES_DB=lakehouse_metadb
POSTGRES_USER=airflow
POSTGRES_PASSWORD=airflow
# --- Penyimpanan Pipeline SSOT (Pilih Salah Satu Mode) ---
# Mode 1 (Default): Mount starter pipelines lokal untuk menjamin Canvas langsung terisi (Anti-Blank Canvas):
PIPELINES_DIR=./pipelines
# Mode 2 (GitOps Enterprise): Arahkan ke repositori Git yang disinkronkan via Airflow AIP-66 Git DAG Bundles:
# GIT_PIPELINE_REPO_URL=https://repo.sicabe.com/merica-dlh/merica-pipelines.git
# GIT_PIPELINE_REPO_BRANCH=main
# GIT_PIPELINE_REPO_SUBDIR=dags
# --- Integrasi OpenMetadata Governance (Opsional) ---
OMD_SERVER_URL=http://host.docker.internal:14585
OMD_AUTH_TOKEN=
```
---
## 🏛️ 4. Pilihan Mode Deployment
Tersedia dua berkas Docker Compose sesuai kebutuhan Anda:
### 1. Standalone Appliance (`docker-compose.yml`) — Rekomendasi Produksi
Hanya menjalankan 1 kontainer `merica-appliance` (Port 14000). Semua komponen lain (Airflow, Database, S3) menggunakan layanan eksternal organisasi Anda.
```bash
docker compose up -d
```
### 2. All-in-One Appliance (`docker-compose.all-in-one.yml`) — Mode Demo / Evaluasi
Menjalankan MERICA bersamaan dengan Apache Airflow 3, PostgreSQL, dan Redis di dalam satu mesin untuk keperluan uji coba lokal tanpa server eksternal:
```bash
docker compose -f docker-compose.all-in-one.yml up -d
```
---
## 🔨 5. Opsi Mem-Build Image Mandiri (*Self-Contained Build*)
Jika kebijakan keamanan organisasi Anda mewajibkan build lokal dari sumber (misalnya untuk jaringan tertutup *air-gapped*):
```bash
# Jalankan build multi-stage Docker
docker build -t registry.sicabe.com/merica:1.0.0 .
```
Proses multi-stage build akan:
1. Mengompilasi kode React Vite frontend menjadi aset statis optimal menggunakan Node.js 20 Alpine.
2. Memasang dependensi Python backend FastAPI dan pustaka validasi pada basis Python 3.11-slim.
3. Mengonfigurasi Nginx dan Supervisord sehingga frontend dan backend berjalan aman dalam satu image ramping berukuran $\sim 230$ MB.
---
## 🔄 6. Prosedur Pemeliharaan & Pembaruan (*Maintenance & Upgrade*)
### Memeriksa Log Aplikasi:
```bash
# Log gabungan (Nginx access log & FastAPI log)
docker compose logs -f merica
```
### Memperbarui ke Versi Rilis Baru:
1. Ubah tag image pada berkas `.env`:
```bash
MERICA_IMAGE=registry.sicabe.com/merica:1.1.0
```
2. Jalankan pembaruan tanpa downtime lama:
```bash
docker compose pull merica
docker compose up -d --no-deps merica
```
*(Docker akan melakukan in-place recreate dalam waktu $\sim 2-3$ detik)*.
### Menghentikan Layanan:
```bash
# Menghentikan kontainer
docker compose down
# Menghentikan kontainer dan menghapus volume
docker compose down -v
```
---
## 🧭 Navigasi Dokumen Terkait
* Pahami Rancang Bangun: [🏛️ Arsitektur Platform](architecture.md)
* Menyiapkan Sisi Airflow Existing: [📘 Panduan Integrasi Airflow External](panduan_integrasi_existing_airflow.md)
* Panduan Mendesain Pipeline di Canvas: [🎨 Panduan Pengguna Canvas](user_guide.md)
* Kembali ke Indeks: [🏠 Pusat Dokumentasi](index.md)
+71
View File
@@ -0,0 +1,71 @@
# 📚 Pusat Dokumentasi & Panduan — MERICA
Selamat datang di pusat dokumentasi resmi **MERICA** (*Managed Engine for Robust Ingestion & Cloud Airflow*) untuk distribusi produksi mandiri (*Clean Production Appliance*).
Dokumentasi ini dirancang terisolasi (*self-contained*) dan menggunakan tautan relatif berbasis Git untuk memudahkan penelusuran baik langsung di repositori Git (GitLab/GitHub), peramban lokal, maupun editor teks.
---
## 🗺️ Alur Penelusuran Dokumen (Recommended Reading Flow)
Ikuti urutan membaca di bawah ini sesuai peran dan kebutuhan implementasi Anda:
```mermaid
flowchart TD
START(["Mulai di Sini: docs/index.md"]) --> Q{"Apa Kebutuhan Anda?"}
Q -->|"Memahami Rancang Bangun & Komponen"| D1["1. Arsitektur Platform\n(architecture.md)"]
Q -->|"Melakukan Instalasi Appliance Mandiri"| D2["2. Panduan Deployment & Build\n(deployment_guide.md)"]
Q -->|"Menghubungkan ke Cluster Airflow Existing"| D3["3. Panduan Integrasi Airflow\n(panduan_integrasi_existing_airflow.md)"]
Q -->|"Merancang Pipeline Data di Canvas"| D4["4. Panduan Pengguna Canvas\n(user_guide.md)"]
D1 --> D2
D2 --> D3
D3 --> D4
```
| Urutan | Dokumen | Target Pembaca | Fokus Utama |
| :---: | :--- | :--- | :--- |
| **1** | [**Arsitektur Platform**](./architecture.md) | Software Architect, Data Architect | Rancang bangun Single-Port Appliance (Port 14000), isolasi perimeter loopback, arsitektur modul stateless, dan integrasi GitOps Airflow 3. |
| **2** | [**Panduan Deployment & Build**](./deployment_guide.md) | DevOps, System Administrator | Spesifikasi hardware ultra-ringan (~100MB RAM), instalasi sekali-klik via `setup.sh`, build image mandiri, dan upgrade runbook. |
| **3** | [**Panduan Integrasi Airflow External**](./panduan_integrasi_existing_airflow.md) | Data Platform Engineer, DevOps | Cara menghubungkan MERICA ke Airflow existing via **Metode 1 (Tanpa Rebuild)** atau **Metode 2 (Build Ulang Image Resmi)**, serta fitur Anti-Blank Canvas. |
| **4** | [**Panduan Pengguna (User Guide)**](./user_guide.md) | Data Engineer, Analytics Engineer | Panduan visual drag-and-drop di Canvas, katalog komponen lakehouse, GWS discovery, DB introspection & safe preview, dlt REST API, dan Shift-Left dbt testing. |
---
## ⚡ Matriks Port & Referensi Cepat Jaringan
| Layanan | Port Host | Protokol | Visibilitas | Keterangan |
| :--- | :---: | :---: | :--- | :--- |
| **MERICA Gateway (Nginx)** | `14000` | HTTP | Eksternal (Publik) | Pintu masuk tunggal: melayani Web Canvas UI (`/*`) dan reverse proxy API (`/api/*`). |
| **MERICA Backend (FastAPI)** | `8000` | HTTP | Internal Loopback (`127.0.0.1`) | **Tidak diekspos ke host**. Menjalankan engine validasi, parser YAML, dan compiler dbt. |
| **Apache Airflow 3 API Server** | `14080` | HTTP | Eksternal | Airflow Web UI & REST API eksekusi pipeline. |
| **PostgreSQL 15 MetaDB** | `14432` | TCP/PG | Eksternal | Database metadata relasional Lakehouse / Airflow. |
| **MinIO S3 Storage (Console)** | `14090` / `14091` | HTTP | Eksternal | Penyimpanan objek Bronze Parquet & Silver Iceberg. |
| **OpenMetadata Governance** | `14585` | HTTP | Eksternal | Portal katalog metadata, data lineage, dan data quality. |
---
## 📁 Struktur Direktori Paket Rilis
```text
release/merica/
├── .env.example # Template konfigurasi variabel lingkungan
├── Dockerfile # Resep build mandiri Nginx + FastAPI (supervisord)
├── README.md # Ringkasan cepat & petunjuk mulai 2 menit
├── docker-compose.yml # Compose Standalone Appliance (Port 14000)
├── docker-compose.all-in-one.yml # Compose demo All-in-One (dengan Airflow tertanam)
├── setup.sh # Skrip instalasi sekali-klik otomatis
├── docs/ # Pusat dokumentasi terisolasi
│ ├── index.md # Halaman indeks & panduan navigasi ini
│ ├── architecture.md # Rancang bangun teknis platform
│ ├── deployment_guide.md # Panduan instalasi, build, dan pemeliharaan
│ ├── panduan_integrasi_existing_airflow.md # Integrasi kluster Airflow eksternal
│ └── user_guide.md # Panduan visual perancangan pipeline di Canvas
├── pipelines/ # Starter Pipelines (Anti-Blank Canvas)
│ ├── configs/ # Kontrak deklaratif YAML Airflow
│ ├── metadata/ # Posisi visual node & edge kanvas ReactFlow
│ └── dbt/ # Proyek dbt Medallion (Silver & Gold models)
├── backend/ # Kode sumber backend FastAPI
└── frontend/ # Kode sumber antarmuka React Canvas UI
```
+200
View File
@@ -0,0 +1,200 @@
# 📘 Panduan Integrasi MERICA Standalone dengan Existing Apache Airflow
> **Navigasi Cepat**: [🏠 Pusat Dokumentasi](index.md) | [🏛️ Arsitektur Platform](architecture.md) | [📦 Panduan Deployment](deployment_guide.md) | [🎨 Panduan Pengguna Canvas](user_guide.md)
Dokumen panduan ini dirancang khusus bagi **Data Engineer, Platform Engineer, dan DevOps** yang ingin menginstal **MERICA secara mandiri (*standalone appliance*)** dan menghubungkannya ke kluster **Apache Airflow yang sudah ada (*existing enterprise cluster*)**.
---
## 🏛️ 1. Gambaran Umum Arsitektur
MERICA (*Managed Engine for Robust Ingestion & Cloud Airflow*) berfungsi sebagai **Visual Low-Code DAG Builder** berbasis web. MERICA tidak mengeksekusi pipeline berat secara langsung; tugas eksekusi, pemantauan, dan retry task sepenuhnya didelegasikan ke kluster Apache Airflow eksternal Anda.
```mermaid
flowchart LR
subgraph STANDALONE ["MERICA Standalone Host (Port 14000)"]
UI["ReactFlow Canvas UI"]
API["FastAPI Backend Gateway"]
PIPES["Mounted Pipelines SSOT\n(./pipelines/)"]
UI --- API
API <--> PIPES
end
subgraph AIRFLOW_HOST ["Existing Apache Airflow Cluster"]
AF_WEBSERVER["Airflow Web UI / API\n(Port 14080 / Domain)"]
AF_SCHEDULER["Airflow Scheduler & Workers"]
AF_DAG_PROC["DAG Processor\n(AIP-66 Git DAG Bundles)"]
AF_SCHEDULER --- AF_DAG_PROC
end
STANDALONE -.->|"Deploy DAG (Git / YAML)"| AIRFLOW_HOST
API -.->|"Direct Link Out"| AF_WEBSERVER
```
---
## 🚀 2. Dua Metode Penyiapan Sisi Existing Airflow
Untuk dapat menjalankan pipeline modern yang dirancang di MERICA (termasuk dbt Medallion, deduplikasi DuckDB, dan Shift-Left Quality Gates), worker dan DAG processor Airflow Anda membutuhkan beberapa pustaka tambahan (seperti `astronomer-cosmos` dan `dbt-postgres`).
Pilih salah satu dari **2 Metode** berikut sesuai kebijakan infrastruktur Anda:
---
### METODE 1: Modifikasi Langsung Tanpa Build Ulang (*Zero-Build / Runtime Injection*)
> [!TIP]
> **Gunakan metode ini jika**: Anda ingin uji coba cepat, tidak memiliki akses untuk mem-build image di private registry, atau dilarang me-rebuild Dockerfile Airflow existing.
#### Opsi 1A: Injeksi Runtime Otomatis via `_PIP_ADDITIONAL_REQUIREMENTS` (Rekomendasi Persisten)
Image resmi Apache Airflow memiliki hook entrypoint otomatis. Pustaka akan terpasang setiap kali kontainer dinyalakan tanpa perlu build Dockerfile:
1. Buka berkas `.env` atau `docker-compose.yml` di server Airflow existing Anda.
2. Tambahkan variabel lingkungan ini pada service Airflow (`airflow-scheduler`, `airflow-dag-processor`, dan `airflow-worker`):
```yaml
environment:
_PIP_ADDITIONAL_REQUIREMENTS: "astronomer-cosmos==1.15.1 dbt-postgres==1.11.0 apache-airflow-providers-git==1.0.0 duckdb==1.1.3 pyiceberg[s3fs,pyarrow]==0.8.0"
```
3. Restart service Airflow:
```bash
docker compose restart airflow-scheduler airflow-dag-processor
```
#### Opsi 1B: `docker exec` Langsung ke Kontainer (Aktif dalam 15 Detik Tanpa Restart)
Jika kontainer Airflow sedang running dalam jam kerja dan Anda dilarang me-restart kontainer:
```bash
# 1. Install di Scheduler (user airflow)
docker exec -u airflow <container_scheduler> pip install --no-cache-dir \
astronomer-cosmos==1.15.1 dbt-postgres==1.11.0 apache-airflow-providers-git==1.0.0
# 2. Install di DAG Processor
docker exec -u airflow <container_dag_processor> pip install --no-cache-dir \
astronomer-cosmos==1.15.1 dbt-postgres==1.11.0 apache-airflow-providers-git==1.0.0
```
#### Verifikasi Keberhasilan Instalasi:
```bash
docker exec <container_scheduler> python -c "import cosmos; print('✅ Cosmos Version:', cosmos.__version__)"
```
#### Bagaimana Menghubungkan DAGs & Custom Operators Tanpa Build Ulang?
Seluruh operator custom (`helpers/duckdb_operator.py`, `helpers/dbt_trino_operator.py`, `helpers/ge_lakehouse_operator.py`, dll.) serta `dag_factory.py` **tidak perlu dibake ke image Airflow**.
Cukup sambungkan folder `dags/` ke Airflow Anda:
* **Via AIP-66 Git DAG Bundles (Airflow 3)**: Airflow otomatis meng-clone dari repositori `merica-pipelines.git`.
* **Via Shared Volume Mount**: Mount direktori `dags/` ke `/opt/airflow/dags` di kontainer Airflow.
---
### METODE 2: Build Ulang Image Resmi (*Official Baked Image*)
> [!IMPORTANT]
> **Gunakan metode ini jika**: Server produksi organisasi Anda berada di jaringan terisolasi (*air-gapped / tanpa akses internet luar*) atau standar DevOps mewajibkan seluruh dependensi paten di dalam image registry resmi.
#### 1. Buat Dockerfile Airflow Resmi
Buat berkas `Dockerfile.airflow` untuk registry organisasi Anda:
```dockerfile
FROM registry.sicabe.com/airflow:3.3.2-om203-ol
LABEL maintainer="BPKP Data Lakehouse Team <dlh@bpkp.go.id>"
LABEL description="Official Airflow 3 Engine Image with Baked MERICA Operators & Cosmos"
LABEL version="3.3.2-merica-v1.1"
USER airflow
# Instalasi dependensi engine MERICA langsung ke layer image
RUN pip install --no-cache-dir \
astronomer-cosmos==1.15.1 \
dbt-postgres==1.11.0 \
apache-airflow-providers-git==1.0.0 \
duckdb==1.1.3 \
pyiceberg[s3fs,pyarrow]==0.8.0 \
pyarrow==17.0.0 \
s3fs==2024.9.0 \
fsspec==2024.9.0 \
dlt[duckdb,filesystem]==1.6.1
# Validasi kompilasi paket di dalam image
RUN python -c "import cosmos; import duckdb; import pyiceberg; print('✅ All MERICA Dependencies Baked!')"
```
#### 2. Build dan Push ke Private Registry
```bash
docker build -t registry.sicabe.com/airflow:3.3.2-merica-v1.1 -f Dockerfile.airflow .
docker push registry.sicabe.com/airflow:3.3.2-merica-v1.1
```
#### 3. Terapkan Image Baru di Kluster Airflow
Ubah tag image pada deployment Airflow:
```yaml
image: registry.sicabe.com/airflow:3.3.2-merica-v1.1
```
Lalu deploy ulang kontainer (`docker compose up -d` atau `kubectl rollout restart deployment airflow`).
---
## 🎨 3. Fitur "Anti-Blank Canvas" (Jaminan DAGs List Langsung Muncul)
### Kenapa Fitur Ini Ada?
MERICA adalah backend *stateless file-based*. Jika kontainer berdiri sendiri tanpa mount volume, sistem akan membaca folder kosong sehingga daftar pipeline di halaman web akan kosong (*blank*), yang sering kali menimbulkan kebingungan bagi pengguna baru.
### Cara Kerja Starter Seed Pipelines:
Di dalam paket rilis `release/merica/`, disediakan direktori `./pipelines/`:
* `pipelines/configs/`: Menyimpan spesifikasi YAML Airflow (`e2e_modernized_ingestion_flow.yaml`, `e2e_medallion_permits_flow.yaml`, `e2e_orders_master_medallion_flow.yaml`).
* `pipelines/metadata/`: Menyimpan data visual layout node & edge ReactFlow (`*.json`).
* `pipelines/dbt/`: Menyimpan model SQL dbt Medallion.
Saat kontainer `merica` dijalankan via `docker compose up -d`, direktori `./pipelines` ini otomatis di-mount ke `/app/merica-pipelines`. Begitu browser dibuka di `http://localhost:14000`, **3 pipeline data lakehouse modern langsung muncul secara visual** dan siap dieksplorasi atau diduplikasi!
### Cara Mengganti Starter Pipelines dengan Git Organisasi Anda (Opsi GitOps SSOT):
Jika tim Anda menggunakan pendekatan GitOps di mana MERICA dan Airflow 3 tersinkronisasi langsung ke repositori Git yang sama (`merica-pipelines.git`):
1. Clone repositori Git di samping folder `release/merica`:
```bash
git clone https://repo.sicabe.com/merica-dlh/merica-pipelines.git ../merica-pipelines
```
2. Pada berkas `.env`, aktifkan variabel yang sudah disediakan di template (cukup buka tanda komentar):
```bash
# Ganti dari ./pipelines ke path clone repositori Git Anda:
PIPELINES_DIR=../merica-pipelines
```
3. Parameter referensi Git DAG Bundle di sisi Airflow 3 (`AIP-66`):
```bash
GIT_PIPELINE_BUNDLE_NAME=merica-pipeline
GIT_PIPELINE_REPO_URL=https://repo.sicabe.com/merica-dlh/merica-pipelines.git
GIT_PIPELINE_REPO_BRANCH=main
GIT_PIPELINE_REPO_SUBDIR=dags
AIRFLOW_DAG_BUNDLE_REFRESH_INTERVAL=30
```
4. Restart MERICA: `docker compose up -d`. Seluruh pipeline tim Anda akan langsung tersinkronkan secara *hot-reload*!
---
## ⚡ 4. Panduan Operasional Cepat (Runbook 3 Menit)
### Langkah 1: Siapkan Konfigurasi Lingkungan
```bash
cd release/merica
cp .env.example .env
```
Sesuaikan parameter `AIRFLOW_WEB_URL` dan `POSTGRES_HOST` mengarah ke alamat server Airflow & Database Anda.
### Langkah 2: Jalankan Script Setup Sekali Klik
```bash
bash ./setup.sh
```
### Langkah 3: Buka Antarmuka MERICA
Akses antarmuka web di browser:
* **URL**: [`http://localhost:14000`](http://localhost:14000)
* **Username**: `admin`
* **Password**: `admin`
Daftar DAGs Anda akan langsung tampil secara visual dan siap digunakan!
---
## 🧭 Navigasi Dokumen Terkait
* Pahami Rancang Bangun: [🏛️ Arsitektur Platform](architecture.md)
* Cara Install Appliance: [📦 Panduan Deployment & Build](deployment_guide.md)
* Panduan Mendesain Pipeline di Canvas: [🎨 Panduan Pengguna Canvas](user_guide.md)
* Kembali ke Indeks: [🏠 Pusat Dokumentasi](index.md)
+187
View File
@@ -0,0 +1,187 @@
# 🎨 Panduan Penggunaan Pengguna (User Guide) — MERICA
> **Navigasi Cepat**: [🏠 Pusat Dokumentasi](index.md) | [🏛️ Arsitektur Platform](architecture.md) | [📦 Panduan Deployment](deployment_guide.md) | [📘 Integrasi Airflow External](panduan_integrasi_existing_airflow.md)
Panduan komprehensif bagi **Data Engineer, Analytics Engineer, dan Data Architect** dalam menggunakan antarmuka grafis **MERICA Canvas** untuk merancang, mengonfigurasi, menguji (*Shift-Left Testing*), dan menyusun task DAG Apache Airflow 3 secara deklaratif.
> [!NOTE]
> **Fokus Peran MERICA**: MERICA dirancang murni sebagai **Visual Low-Code DAG Builder** untuk mempercepat rancang bangun pipeline data lakehouse modern tanpa menulis boilerplate Python manual. MERICA bukan dashboard monitoring runtime; pemantauan eksekusi, log task, retry, dan alerting tetap didelegasikan sepenuhnya ke antarmuka resmi **Apache Airflow 3**.
---
## 🖥️ 1. Mengakses Antarmuka Web MERICA Canvas
Buka peramban (*web browser*) modern (Google Chrome, Mozilla Firefox, Microsoft Edge) dan akses URL:
```text
http://<ip-server-merica>:14000
```
* **Kredensial Default**:
* **Username**: `admin`
* **Password**: `admin`
### Tampilan Awal: Pipelines Explorer (Anti-Blank Canvas)
Setelah masuk, Anda akan langsung disajikan halaman **Pipelines Explorer**. MERICA dilengkapi fitur *Anti-Blank Canvas* dengan 3 pipeline produksi siap pakai:
1. `e2e_modernized_ingestion_flow`: Pipeline ingestion modern yang menggabungkan Database CDC Sling, Google Spreadsheet Auto-Cleansing, dan dlt REST API.
2. `e2e_medallion_permits_flow`: Pipeline perizinan Medallion (Bronze Parquet $\to$ Silver Iceberg $\to$ Gold dbt Mart).
3. `e2e_orders_master_medallion_flow`: Pipeline master order e-commerce dengan deduplikasi DuckDB dan quality gate Great Expectations.
Anda dapat langsung mengklik salah satu pipeline untuk membukanya di Canvas, atau mengklik tombol **`+ New Pipeline`** di kanan atas untuk membuat pipeline baru dari awal.
---
## 🧩 2. Katalog Komponen & Operator Lakehouse
Panel kiri kanvas (*Component Catalog*) menyediakan pustaka node terstandarisasi untuk arsitektur Medallion Lakehouse:
```mermaid
graph LR
subgraph SOURCES ["1. Ingestion Sources (Bronze)"]
N_DB["Database CDC (Sling)"]
N_GWS["Google Workspace (Drive/Sheet)"]
N_REST["REST API (dlt Ingestor)"]
end
subgraph SINK ["2. Lakehouse Storage (Silver)"]
N_BRONZE["Bronze S3 Parquet"]
N_SILVER["Silver Iceberg + DuckDB Dedup"]
end
subgraph TRANS ["3. Transformation (Gold)"]
N_DBT["dbt Medallion Model (Cosmos)"]
N_GE["Great Expectations Quality Gate"]
end
SOURCES --> SINK --> TRANS
```
---
### A. Database Ingestor (Sling CDC + Introspection & Safe Preview)
Digunakan untuk mengekstraksi data transaksional dari PostgreSQL, MySQL, SQL Server, atau Oracle:
* **Log-Based CDC**: Ekstraksi berbasis log transaksi untuk meminimalkan beban CPU pada database produksi.
* **Database Introspection Otomatis**: Saat memilih koneksi dan tabel target, MERICA secara otomatis menginspeksi metadata skema tabel dari PostgreSQL.
* **Auto-Detect Primary Key & Watermark**: Kolom kunci utama (*Primary Key*) dan kolom jejak waktu (*timestamp watermark*) terdeteksi otomatis untuk kebutuhan inkremental.
* **Safe 10-Row Data Preview**: Tombol **`Preview Data`** menampilkan 10 baris data sampel secara aman (dengan statement timeout terkendali) langsung di panel konfigurasi tanpa mengunci tabel produksi.
---
### B. Google Workspace Ingestor (Drive Folder Explorer & Header Auto-Cleansing)
Digunakan untuk mengonsumsi spreadsheet Google Sheets dari Google Drive organisasi:
* **Drive Folder Explorer**: Antarmuka visual untuk menelusuri folder dan memilih berkas Spreadsheet secara interaktif (`/api/v1/discovery/gws/folders`).
* **Dynamic Tab Resolution**: Mendukung pemilihan tab berbasis indeks (`sheet_index: 0`) atau pencocokan nama regex dinamis.
* **Header Row Suggestion**: Menganalisis baris-baris awal spreadsheet dan merekomendasikan baris mana yang merupakan baris nama kolom aktual (*Header Row*).
* **Auto-Cleansing Engine**:
* Otomatis mengubah nama kolom menjadi format `snake_case` dan membuang spasi tersembunyi.
* Mengeliminasi sufiks unit teks pada data numerik (misal: `"1.500.000 (Rp)"` $\to$ `1500000`).
* Menerapkan pengisian sel yang digabungkan (*Forward-Fill merged cells* / `ffill`).
---
### C. REST API Ingestor (dlt Framework)
Digunakan untuk mengambil data dari sensor IoT (seperti sensor udara SPKU) atau REST API pihak ketiga:
* **Declarative Pagination**: Mendukung strategi paginasi standar: *Page Number*, *Offset/Limit*, dan *Cursor/Next-URL Link*.
* **Automated Flattening & Unnesting**: Respon JSON bertingkat (*nested payloads*) otomatis diurai (*unnested*) menjadi skema tabel tabular relasional di Bronze S3 Parquet.
* **Sliding Lookback Window**: Mendukung jendela pengambilan mundur (misal `now() - 3 hours` s/d `now()`) untuk mencegah *data gap* akibat keterlambatan transmisi sensor.
---
### D. Silver Lakehouse Sink (Apache Iceberg + DuckDB Deduplication)
* **ACID Iceberg Table**: Menulis data ke partisi Silver menggunakan format Apache Iceberg dengan metadata snapshot time-travel.
* **Idempotent Deduplication via DuckDB**: Mencegah duplikasi data pada proses *incremental reload* menggunakan formula SQL terstandarisasi:
```sql
ROW_NUMBER() OVER (PARTITION BY primary_key ORDER BY updated_at DESC) = 1
```
---
### E. dbt Medallion Transformator (Astronomer Cosmos + Shift-Left Testing)
Digunakan untuk menyusun transformasi bisnis dari Silver ke Gold Mart:
* **Otomasi Model SQL**: Menulis query transformasi bisnis (misal: aggregasi bulanan, join master data) langsung di editor SQL kanvas.
* **Smart DDL Data Type Inference**: Engine MERICA secara otomatis menginferensi tipe data kolom target (`INTEGER`, `DECIMAL(18,2)`, `TIMESTAMP`, `VARCHAR`) berdasarkan ekspresi SQL yang ditulis.
* **Shift-Left Quality Testing**: Anda dapat menentukan aturan validasi langsung di kanvas:
* `contract: enforced`: Menjamin struktur kolom tabel tidak boleh melenceng dari skema yang disepakati.
* Constraint kolom bawaan: `unique`, `not_null`, dan `accepted_values: [...]`.
* **Astronomer Cosmos Granular TaskGroup**: Di Airflow 3, model dbt tidak dieksekusi sebagai satu task raksasa buram (*black-box*), melainkan dipecah menjadi task granular:
* `model_name.run`: Menjalankan kompilasi dan pembuatan tabel SQL.
* `model_name.test`: Menjalankan pengujian kualitas data segera setelah model selesai (`TestBehavior.AFTER_EACH`).
---
### F. Great Expectations Quality Gate
Node validasi batasan fisik data (*Data Sanity Rules*):
* Menguji batas kewajaran data (misal: konsentrasi PM2.5 sensor harus berada pada rentang $0 \le x \le 500$; jika di luar rentang, ditandai atau dikonversi menjadi `NULL`).
* Menguji persentase ambang batas nilai kosong (*Null Percentage Threshold*).
---
## 🛠️ 3. Alur Kerja Perancangan Pipeline di Canvas (Langkah-demi-Langkah)
```mermaid
flowchart TD
S1["1. Tarik Node dari Katalog ke Kanvas\n(Drag & Drop)"] --> S2["2. Hubungkan Output Port ke Input Port\n(Edge Linking)"]
S2 --> S3["3. Konfigurasi Parameter di Panel Kanan\n(Drawer Configuration)"]
S3 --> S4["4. Validasi Pra-Kompilasi\n(Shift-Left Pre-Flight Check: #val)"]
S4 --> S5["5. Deploy Pipeline ke Airflow 3\n(GitOps Hot-Reload dalam 30 Detik)"]
```
### Langkah 1: Drag & Drop Node
Pilih komponen sumber dari panel katalog kiri (misal: **Database CDC**), lalu tarik (*drag*) ke kanvas tengah. Tambahkan node pemrosesan (misal: **Silver Iceberg Sink**) dan node transformasi (**dbt Medallion Model**).
### Langkah 2: Menghubungkan Port (Edge Linking)
Klik titik lingkaran (*handle port*) output pada node sumber, lalu tarik garis konektor ke titik input pada node tujuan. Hubungan antar-node ini akan diterjemahkan menjadi dependensi upstream/downstream (`>>`) pada DAG Airflow.
### Langkah 3: Konfigurasi Parameter (Drawer Panel)
Klik pada node di kanvas untuk membuka laci konfigurasi di sebelah kanan:
* **Pada Database CDC**: Pilih koneksi database, klik nama tabel, amati deteksi otomatis Primary Key, dan klik **Preview Data** untuk memverifikasi 10 baris sampel.
* **Pada Google Workspace**: Jelajahi folder Google Drive, pilih sheet, dan periksa saran baris header.
* **Pada dbt Model**: Tulis query SQL, tambahkan aturan contract quality (`unique`, `not_null`).
### Langkah 4: Validasi Pra-Kompilasi (*Shift-Left Pre-Flight Check*)
Klik tombol **`Validate Pipeline`** di toolbar atas.
Backend FastAPI akan memverifikasi:
* Ketiadaan siklus (*cycle detection* / validasi DAG acyclic).
* Kesesuaian tipe data dan parameter wajib pada setiap node.
* Validitas model dbt dan kesiapan kontrak schema YAML.
Jika terdapat kesalahan konfigurasi, pesan perbaikan spesifik akan langsung muncul di kanvas sebelum pipeline sempat di-deploy ke server.
### Langkah 5: Simpan & Deploy Pipeline (*Zero Downtime GitOps*)
Klik tombol **`Deploy Pipeline`**:
1. MERICA mengompilasi desain kanvas ke dalam berkas kontrak deklaratif YAML (`configs/<pipeline_id>.yaml`) dan model SQL dbt (`dbt/models/...`).
2. Berkas disimpan langsung ke repositori pipeline SSOT (`merica-pipelines.git` atau direktori ter-mount `./pipelines/`).
3. Apache Airflow 3 AIP-66 Git DAG Processor mendeteksi pembaruan dan secara otomatis memuat ulang DAG ke Airflow MetaDB dalam waktu **$\le 30$ detik tanpa perlu restart Airflow**.
---
## ⚙️ 4. Pemantauan & Eksekusi di Apache Airflow 3
Setelah pipeline di-deploy dari MERICA Canvas:
1. Akses dashboard resmi Apache Airflow 3 pada URL:
```text
http://<ip-server-airflow>:14080
```
2. Temukan DAG yang bersangkutan pada daftar DAG (nama DAG sesuai dengan ID yang Anda tentukan di kanvas).
3. **Tampilan Granular Astronomer Cosmos**:
* Buka tampilan **Graph View** atau **Grid View**.
* Anda dapat melihat TaskGroup dbt terbagi rapi menjadi task `.run` dan task `.test`.
* Jika ada uji kontrak kolom yang gagal, task `.test` akan berwarna merah (*Failed*), menghentikan pipeline sebelum data rusak masuk ke Gold layer (*Data Quality Circuit Breaker*).
4. Klik pada task untuk membaca log eksekusi, melihat waktu eksekusi task, atau memicu eksekusi ulang (*Clear / Retry*).
---
## 🏛️ 5. Integrasi Tata Kelola Data OpenMetadata 2.0
Setiap kali Anda menekan tombol **Deploy Pipeline** di MERICA Canvas, sistem secara otomatis menyinkronkan aset ke portal **OpenMetadata 2.0**:
* **Pipeline Entity**: Pipeline terdaftar di bawah `dlh_airflow_service` lengkap dengan deskripsi, jadwal cron, dan daftar task.
* **Schema & Real Column Types**: Struktur kolom dari Bronze, Silver, dan Gold terdaftar di katalog data dengan tipe data presisi.
* **Sample Data 5 Baris**: Sampel baris aktual dari PostgreSQL tersimpan pada tab Sample Data OpenMetadata.
* **SQL Query Lineage**: Query transformasi dbt disematkan pada tab Queries tabel yang bersangkutan.
* **Data Quality Assertions**: Seluruh rule Great Expectations terhubung langsung ke tab **Data Quality** OpenMetadata, menampilkan riwayat persentase kelulusan data dari waktu ke waktu.
---
## 🧭 Navigasi Dokumen Terkait
* Pahami Rancang Bangun: [🏛️ Arsitektur Platform](architecture.md)
* Cara Install Appliance: [📦 Panduan Deployment & Build](deployment_guide.md)
* Menyiapkan Sisi Airflow: [📘 Panduan Integrasi Airflow External](panduan_integrasi_existing_airflow.md)
* Kembali ke Indeks: [🏠 Pusat Dokumentasi](index.md)