# 📘 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.
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`):
#### 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>"
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/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`:
## 🏢 5. Studi Kasus Implementasi Nyata (Real-World Deployment Walkthrough)
Bagian ini menyajikan contoh implementasi nyata ketika Anda menghubungkan MERICA ke server produksi yang telah menjalankan Apache Airflow dan stack data dengan port kustom (non-standar).
### Skenario Lapangan:
Sebuah server telah menjalankan kluster Airflow dan infrastruktur data dengan kondisi:
* **Kontainer Airflow**: `sicabe-airflow-scheduler`, `sicabe-airflow-webserver` (Port Host `12082:8080`), dan `sicabe-airflow-dag-processor` sudah berstatus `Up 7 days` (tidak boleh restart lama).
* **Penyimpanan Objek MinIO S3**: Port Host `8443`.
* **Katalog IAM Keycloak**: Port Host `12080`.
* **PostgreSQL MetaDB Shared**: Berjalan pada host dengan port standar atau custom.
Gunakan `docker exec` untuk memasang pustaka yang belum ada (`astronomer-cosmos` dan `dlt`) langsung ke worker/scheduler tanpa mematikan layanan. *(Catatan: Pustaka `apache-airflow-providers-git`, `dbt-postgres`, `duckdb`, `pyiceberg`, dan `sling` sudah tersedia bawaan (*built-in*) di image resmi)*:
#### 3. Penanganan Komunikasi Jaringan (Docker Networking)
Tentukan bagaimana kontainer MERICA berkomunikasi dengan layanan existing:
* **Kasus A — Satu Mesin (Single-Host)**:
Gunakan `host.docker.internal` (didukung di Linux via `extra_hosts` pada compose) atau gunakan IP gateway Docker host (umumnya `172.17.0.1`).
* **Kasus B — Beda Server (Multi-Node)**:
Ganti `host.docker.internal` dengan IP private / LAN server Airflow Anda (contoh: `http://192.168.10.50:12082`).
* **Kasus C — Shared Docker Network**:
Jika ingin menggunakan nama kontainer langsung (contoh: `http://sicabe-airflow-webserver:8080`), hubungkan kontainer MERICA ke network yang sama dengan Airflow melalui `docker-compose.yml`:
```yaml
networks:
default:
name: sicabe_default
external: true
```
#### 4. Contoh Konfigurasi `.env` Riil yang Teruji
Di direktori `/opt/merica`, buat berkas `.env` dengan konfigurasi seperti berikut:
3. Akses antarmuka web MERICA di browser: `http://<ip-server>:14000`.
4. Anda dapat langsung menguji fitur **Database Introspection & Safe Preview** yang terhubung ke PostgreSQL, serta melihat tautan langsung ke Airflow Webserver di port `12082`.