Apache Superset, günümüzde mevcut en güçlü ve popüler açık kaynaklı iş zekası (BI) araçlarından biri haline geldi. Modern arayüzü, kapsamlı görselleştirme seçenekleri ve geniş bir SQL veritabanı yelpazesiyle uyumluluğuyla tanınır; veri mühendisleri ve analistler için organizasyonları içinde veri erişimini demokratikleştirmeye çalışanlar için ideal bir seçenektir. Ancak, Flask uygulaması, Celery işçileri ve bir meta veritabanı gibi birden fazla bileşeni içeren karmaşık mimarisi nedeniyle, Superset'i üretim ortamında kurmak göz korkutucu olabilir.
Bu kılavuzda, Apache Superset'i Docker Compose kullanarak dağıtmanıza adım adım rehberlik edeceğiz. Bu yöntem, ana sisteminizi karmaşadan arındırmadan tekrarlanabilir, izole ve ölçeklenebilir bir ortam sağladığı için orta düzeyden ileri düzey geliştiriciler için önerilir. Bu yazının sonunda, yerel olarak veya uzak bir sunucuda çalışan tam işlevsel bir Superset örneğine sahip olacaksınız.
Ön Koşullar ve Ortam Kurulumu
Dağıtım sürecine başlamadan önce, geliştirme ortamınızın aşağıdaki gereksinimleri karşıladığından emin olun:
- Docker & Docker Compose: Her ikisinin de yüklü ve çalışır durumda olduğundan emin olun. Bunu
docker --versionvedocker-compose --versionkomutlarını çalıştırarak doğrulayabilirsiniz. - PostgreSQL: Superset, meta verileri için ilişkisel bir veritabanına ihtiyaç duyar. Docker Compose bir Postgres kabuğu başlatabilse de, üretim ortamında yönetilen bir hizmet veya bağımsız bir veritabanı örneği kullanmalısınız.
- Redis: Önbellekleme ve Celery görevleri için sonuç arka ucu olarak kullanılır.
- Flask Uygulaması: Temel Superset uygulaması.
Bu öğretinin amacı doğrultusunda, tüm gerekli hizmetleri içeren monolitik bir Docker Compose yapılandırması kullanacağız. Bu, geliştirme ve önizleme (staging) ortamları için mükemmeldir.
Docker Compose Yapılandırmasının Oluşturulması
Projeniz için yeni bir dizin oluşturun ve bir docker-compose.yml dosyası başlatın. Bu dosya, Superset'in doğru çalışması için gereken hizmetleri, ağları ve hacimleri tanımlar.
version: '3.8'
services:
redis:
image: redis:latest
ports:
- "6379:6379"
networks:
- superset_network
postgres:
image: postgres:13
environment:
POSTGRES_USER: superset
POSTGRES_PASSWORD: superset_pass
POSTGRES_DB: superset
volumes:
- postgres_data:/var/lib/postgresql/data
ports:
- "5432:5432"
networks:
- superset_network
superset:
image: apache/superset:latest
restart: always
ports:
- "8088:8088"
command: ["/app/docker/docker-entrypoint.sh"]
environment:
SUPERSET_SECRET_KEY: 'super-secret-key-for-production'
DATABASE_HOST: postgres
DATABASE_PORT: 5432
DATABASE_USER: superset
DATABASE_PASSWORD: superset_pass
DATABASE_DB: superset
volumes:
- superset_data:/app/superset_home
depends_on:
- redis
- postgres
networks:
- superset_network
volumes:
postgres_data:
superset_data:
networks:
superset_network:
driver: bridge
Başlatma ve Kullanıcı Oluşturma
docker-compose.yml dosyanız hazır olduğunda, aşağıdaki komutu kullanarak hizmetleri başlatın:
docker-compose up -d
Konteynerler çalışmaya başladıktan sonra veritabanını başlatmanız ve bir yönetici kullanıcı oluşturmanız gerekir. Terminalinizde aşağıdaki komutları çalıştırın:
# Veritabanı şemasını başlat
docker-compose exec superset superset db upgrade
# Bir yönetici kullanıcı oluştur
docker-compose exec superset superset fab create-admin \
--username admin \
--firstname Admin \
--lastname User \
--email admin@example.com \
--password admin
superset fab create-admin komutu, ilk dağıtımınızı güvence altına almak için hayati önem taşır. superset db upgrade komutu, veritabanı şemasının çalıştırdığınız Superset sürümüyle güncel olduğundan emin olur.
Üretim Düşünceleri
Yukarıdaki kurulum geliştirme için mükemmel olsa da, üretim dağıtımları ek güvenlik önlemleri gerektirir:
- Güvenlik: Asla varsayılan gizli anahtarları kullanmayın.
SUPERSET_SECRET_KEYiçin güçlü ve rastgele bir anahtar oluşturun. - Ters Proxy: SSL sonlandırma ve yük dengeleme işlemlerini yönetmek için Superset'in önüne Nginx veya Traefik yerleştirin.
- Veritabanı Ayrımı: Yüksek kullanılabilirlik ve veri kalıcılığını sağlamak için Postgres ve Redis konteynerlerini harici, yönetilen hizmetlere taşıyın.
- Ölçekleme: Yük bazında
supersetvecelery-workerhizmetlerini bağımsız olarak ölçeklendirmek için yatay pod ölçeklendirmesini (Kubernetes) veya Docker Swarm kullanın.
Sonuç
Docker Compose aracılığıyla Apache Superset dağıtmak, geliştiricilerin hızlıca çalışmaya başlamasını sağlayan akıcı bir süreçtir. Konteynerleştirmeden yararlanarak, geliştirme, önizleme ve üretim ortamları arasında tutarlılık sağlarsınız. Veri ihtiyaçlarınız büyüdükçe, mimarinizi ayrı veritabanı örnekleri, sağlam önbellekleme stratejileri ve güvenli ters proxy'ler içerecek şekilde yeniden düzenlemeyi unutmayın. Superset dağıtıldığında, ekibiniz sezgisel ve güçlü görselleştirmeler aracılığıyla verilerinizin tam potansiyelini ortaya çıkarmaya hazırdır.