Template tái sử dụng để triển khai Apache Airflow với DBT cho các dự án mới.
.
├── dags/ # Chứa các DAG files của Airflow
├── dbt/ # Chứa các dbt projects
│ ├── projects/ # Các dbt projects
│ └── .dbt/ # DBT profiles và cache
├── plugins/ # Airflow plugins
├── config/ # Airflow config files
├── scripts/ # Utility scripts
├── logs/ # Airflow logs
├── docker-compose.yaml
├── Dockerfile
└── requirements.txt
- Docker và Docker Compose
- Python 3.8+ (nếu chạy local)
cp .env.example .envAIRFLOW_UID: User ID (thường là 50000)- Trên Linux/Ubuntu, chạy
id -uđể lấy giá trị chính xác rồi cập nhật vào.env AIRFLOW__CORE__FERNET_KEY: Fernet key để mã hóa connections, chạy code py dướiAIRFLOW__WEBSERVER__SECRET_KEY: Secret key cho webserver
Để tạo Fernet key:
from cryptography.fernet import Fernet
Fernet.generate_key().decode()docker-compose up airflow-initdocker-compose up -dMở trình duyệt và truy cập: http://localhost:8080
- Username:
airflow - Password:
airflow
docker-compose run --rm airflow-worker dbt init my_projectHoặc tạo thủ công trong dbt/projects/my_project/
File profile được lưu tại dbt/.dbt/profiles.yml. Cấu hình connection đến database của bạn.
Xem ví dụ trong dags/example_dbt_dag.py
Trong Airflow UI, vào Admin > Variables để cấu hình:
DWH_CONNECTION: Connection ID đến data warehouse- Các biến khác theo nhu cầu dự án
Trong Airflow UI, vào Admin > Connections để cấu hình:
- PostgreSQL connection cho dbt
- Các connections khác (S3, databases, APIs, etc.)
docker-compose logs -f airflow-scheduler
docker-compose logs -f airflow-workerdocker-compose run --rm airflow-cli dags trigger <dag_id>docker-compose run --rm airflow-worker dbt test --project-dir /opt/airflow/dbt/projects/my_projectdocker-compose downdocker-compose down -vThêm vào requirements.txt và rebuild image:
docker-compose build
docker-compose up -dĐặt các plugin trong thư mục plugins/
Chỉnh sửa docker-compose.yaml hoặc thêm file config trong config/
Đảm bảo AIRFLOW_UID trong .env khớp với user ID của bạn:
echo -e "AIRFLOW_UID=$(id -u)" > .envNếu port 8080 đã được sử dụng, thay đổi trong docker-compose.yaml:
ports:
- "8081:8080" # Thay 8081 bằng port khácApache License 2.0