Portainer ile Langflow Nasıl Deploy Edilir? Adım Adım Kılavuz

Giriş
AI uygulamaları geliştirirken görsel bir arayüzle LLM akışları oluşturmak, test etmek ve deploy etmek büyük kolaylık sağlar. Langflow, tam da bu ihtiyaca cevap veren açık kaynaklı bir araçtır. Ancak Langflow'u production ortamında güvenli ve ölçeklenebilir bir şekilde deploy etmek, özellikle veri kalıcılığı söz konusu olduğunda önemli bir konudur.
Bu yazıda, Portainer kullanarak Langflow'u PostgreSQL veritabanı ile nasıl deploy edeceğinizi adım adım anlatacağım. Ayrıca karşılaşabileceğiniz yaygın sorunların çözümlerini de paylaşacağım.
Bu Yazı Kimler İçin?
- DevOps mühendisleri ve sistem yöneticileri
- AI/ML geliştiricileri
- Docker ve Portainer kullanan herkes
- Langflow'u production ortamında çalıştırmak isteyenler
Neden Portainer + Langflow + PostgreSQL?
Portainer, Docker container'larını yönetmek için kullanıcı dostu bir web arayüzü sunar. Karmaşık komut satırı işlemlerini grafiksel bir arayüze dönüştürerek DevOps süreçlerini kolaylaştırır.
Langflow, LangChain tabanlı görsel bir akış editörüdür. RAG (Retrieval-Augmented Generation), chatbot'lar ve diğer LLM uygulamaları için ideal bir araçtır.
PostgreSQL kullanarak, Langflow'daki tüm akışlarınızı, yapılandırmalarınızı ve verileri kalıcı olarak saklayabilirsiniz. Container yeniden başlatılsa bile verileriniz kaybolmaz.
Gereksinimler
Bu kurulumu yapabilmek için şunlara ihtiyacınız var:
- ✅ Docker ve Docker Compose yüklü bir sunucu
- ✅ Portainer kurulumu (Community veya Business Edition)
- ✅ En az 2GB RAM ve 10GB boş disk alanı
- ✅ Port 7860'ın açık olması (veya kendi tercih ettiğiniz port)
Adım 1: Docker Compose Dosyasını Hazırlama
Öncelikle Langflow ve PostgreSQL servislerini içeren bir docker-compose.yml
dosyası oluşturalım:
version: '3.8'
services:
postgres:
image: postgres:15-alpine
container_name: langflow-postgres
restart: always
environment:
POSTGRES_USER: ${POSTGRES_USER:-langflow}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-langflow123}
POSTGRES_DB: ${POSTGRES_DB:-langflow}
volumes:
- postgres-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-langflow}"]
interval: 10s
timeout: 5s
retries: 5
networks:
- langflow-network
langflow:
image: langflowai/langflow:latest
container_name: langflow
restart: always
ports:
- "7860:7860"
environment:
- LANGFLOW_DATABASE_URL=postgresql://${POSTGRES_USER:-langflow}:${POSTGRES_PASSWORD:-langflow123}@postgres:5432/${POSTGRES_DB:-langflow}
- LANGFLOW_AUTO_LOGIN=${LANGFLOW_AUTO_LOGIN:-true}
- LANGFLOW_SUPERUSER=${LANGFLOW_SUPERUSER:-admin}
- LANGFLOW_SUPERUSER_PASSWORD=${LANGFLOW_SUPERUSER_PASSWORD:-admin}
volumes:
- langflow-data:/app/langflow
depends_on:
postgres:
condition: service_healthy
networks:
- langflow-network
volumes:
postgres-data:
driver: local
langflow-data:
driver: local
networks:
langflow-network:
driver: bridge
Yapılandırmanın Açıklaması
Bu Docker Compose dosyası iki servis tanımlıyor:
PostgreSQL Servisi
- Image:
postgres:15-alpine
(hafif ve güvenli) - Health Check: PostgreSQL'in hazır olup olmadığını kontrol eder
- Volume: Veritabanı verileri kalıcı olarak saklanır
- Network: İzole bir network üzerinden Langflow ile iletişim kurar
Langflow Servisi
- Image:
langflowai/langflow:latest
(en güncel sürüm) - Port: 7860 (dış dünyaya açık)
- Database URL: PostgreSQL'e otomatik bağlantı
- Auto Login: Geliştirme için kolaylık (opsiyonel)
- Depends On: PostgreSQL hazır olana kadar bekler
Adım 2: Environment Variables Hazırlama
Güvenlik için hassas bilgileri (şifreler) ayrı bir dosyada tutmalısınız. env.example
dosyası oluşturun:
# PostgreSQL Veritabanı Ayarları
POSTGRES_USER=langflow
POSTGRES_PASSWORD=langflow123
POSTGRES_DB=langflow
# Langflow Ayarları
LANGFLOW_AUTO_LOGIN=true
LANGFLOW_SUPERUSER=admin
LANGFLOW_SUPERUSER_PASSWORD=admin
# Not: Production ortamında güçlü şifreler kullanın!
⚠️ Önemli Güvenlik Notu: Production ortamında mutlaka güçlü, rastgele şifreler kullanın. Örneğin: openssl rand -base64 32
Adım 3: Portainer'da Stack Oluşturma
Şimdi Portainer arayüzünden stack'imizi oluşturalım:
3.1. Portainer'a Giriş
Tarayıcınızdan Portainer arayüzüne erişin:
http://SUNUCU_IP:9000
3.2. Stack Oluştur
- Sol menüden Stacks seçeneğine tıklayın
- + Add stack butonuna basın
- Stack için bir isim verin (örn:
langflow-stack
)
3.3. Docker Compose Yapılandırması
Web editor sekmesinde, yukarıda hazırladığımız docker-compose.yml
içeriğini yapıştırın.
3.4. Environment Variables Ekleyin
Environment variables bölümünde aşağıdaki değişkenleri manuel olarak ekleyin veya "Load variables from .env file" seçeneğini kullanın:
POSTGRES_USER=langflow
POSTGRES_PASSWORD=güvenli_şifreniz_buraya
POSTGRES_DB=langflow
LANGFLOW_AUTO_LOGIN=false
LANGFLOW_SUPERUSER=admin
LANGFLOW_SUPERUSER_PASSWORD=güvenli_admin_şifreniz
3.5. Deploy!
Deploy the stack butonuna tıklayın ve deployment'ın tamamlanmasını bekleyin (yaklaşık 1-2 dakika).
Adım 4: Langflow'a Erişim
Deployment başarılı olduktan sonra, Langflow'a şu adresten erişebilirsiniz:
http://SUNUCU_IP:7860
İlk girişte varsayılan kullanıcı bilgilerinizi kullanın:
- Kullanıcı Adı:
admin
- Şifre: Environment variables'da belirlediğiniz
LANGFLOW_SUPERUSER_PASSWORD
Artık Langflow'un güçlü görsel editöründe AI akışlarınızı oluşturmaya başlayabilirsiniz! 🎉
Stack Yönetimi
Portainer'ın sunduğu güçlü yönetim araçlarıyla stack'inizi kolayca yönetebilirsiniz:
Container Durumunu Kontrol Etme
Stacks → langflow-stack
→ Containers bölümünden her iki container'ın da çalıştığını görebilirsiniz.
Logları İnceleme
Herhangi bir sorun yaşarsanız, container loglarına bakabilirsiniz:
- İlgili container'a tıklayın
- Logs sekmesine geçin
- Real-time logları izleyin
Stack'i Durdurup Başlatma
- Durdurma: Stack sayfasında Stop butonu
- Başlatma: Stack sayfasında Start butonu
- Yeniden Başlatma: Stack sayfasında Restart butonu
Stack'i Güncelleme
Yapılandırmada değişiklik yapmanız gerekirse:
- Stack sayfasında Editor butonuna tıklayın
docker-compose.yml
içeriğini düzenleyin- Update the stack ile güncelleyin
Container'lar otomatik olarak yeniden oluşturulur.
Yaygın Sorunlar ve Çözümleri
Problem 1: "No space left on device" Hatası
Bu, deployment sırasında karşılaşabileceğiniz en yaygın sorun. Docker host'unuzda disk alanı dolu demektir.
Hızlı Çözüm:
# SSH ile sunucunuza bağlanın
docker system prune -a
Bu komut:
- Durmuş container'ları siler
- Kullanılmayan Docker imajlarını temizler
- Build cache'i temizler
- Kullanılmayan network'leri kaldırır
Disk durumunu kontrol etmek için:
# Genel disk durumu
df -h /var/lib/docker
# Docker disk kullanımı
docker system df
Önleme:
Aylık bir temizlik cron job'ı oluşturun:
# Crontab düzenle
crontab -e
# Her ayın 1'inde saat 02:00'de çalışır
0 2 1 * * docker system prune -a -f
Problem 2: Langflow Başlamıyor
Langflow container'ı çalışmıyorsa:
-
PostgreSQL'in durumunu kontrol edin:
- Portainer'da
langflow-postgres
container'ınınhealthy
durumda olduğundan emin olun
- Portainer'da
-
Logları inceleyin:
- Langflow loglarında veritabanı bağlantı hataları var mı bakın
-
Environment variables kontrol:
LANGFLOW_DATABASE_URL
doğru mu?- PostgreSQL şifresi her iki serviste de aynı mı?
Problem 3: Veritabanı Bağlantı Hatası
ERROR: could not connect to server
Çözüm:
- PostgreSQL container'ının çalıştığını doğrulayın
- Network bağlantısını kontrol edin (her iki container da
langflow-network
içinde mi?) - Health check'in geçtiğini doğrulayın
Problem 4: Port Çakışması
7860 portu zaten kullanılıyorsa:
ports:
- "8080:7860" # Dış port 8080, iç port 7860
Veri Yedekleme
Production ortamında düzenli yedekleme kritik önem taşır.
PostgreSQL Veritabanını Yedekleme
# Veritabanını dışa aktar
docker exec langflow-postgres pg_dump -U langflow langflow > langflow_backup_$(date +%Y%m%d).sql
# Veritabanını geri yükle
cat langflow_backup_20250101.sql | docker exec -i langflow-postgres psql -U langflow langflow
Volume'ları Yedekleme
Portainer arayüzünden:
- Volumes bölümüne gidin
postgres-data
veyalangflow-data
volume'unu seçin- Backup/export işlemini gerçekleştirin
Komut satırından yedekleme:
# Volume'u tar dosyasına çıkart
docker run --rm -v postgres-data:/data -v $(pwd):/backup alpine tar czf /backup/postgres-data-backup.tar.gz /data
Güvenlik Önerileri
Production ortamında aşağıdaki güvenlik önlemlerini almayı unutmayın:
1. Güçlü Şifreler Kullanın
# Rastgele güvenli şifre oluşturma
openssl rand -base64 32
2. Auto-Login'i Kapatın
Production için LANGFLOW_AUTO_LOGIN=false
yapın.
3. Reverse Proxy Kullanın
Nginx veya Traefik ile SSL/TLS ekleyin:
server {
listen 443 ssl;
server_name langflow.example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://localhost:7860;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
4. Firewall Kuralları
Sadece gerekli portları açık tutun:
# UFW ile port yönetimi
sudo ufw allow 443/tcp # HTTPS
sudo ufw allow 9000/tcp # Portainer
sudo ufw deny 7860/tcp # Langflow'u sadece reverse proxy üzerinden erişilebilir yap
Performans Optimizasyonu
Resource Limits Ekleme
Container'ların kaynak kullanımını sınırlandırın:
services:
langflow:
# ... diğer ayarlar
deploy:
resources:
limits:
cpus: '2'
memory: 4G
reservations:
cpus: '1'
memory: 2G
Docker Log Boyutunu Sınırlama
/etc/docker/daemon.json
dosyasını düzenleyin:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
Ardından Docker'ı yeniden başlatın:
sudo systemctl restart docker
Monitoring ve İzleme
Production ortamında sisteminizi izlemek önemlidir.
Portainer ile Monitoring
Portainer, temel metrikleri (CPU, RAM, Network) dashboard'da gösterir.
Prometheus + Grafana Entegrasyonu
Daha gelişmiş monitoring için:
# docker-compose.yml'e ekleyin
prometheus:
image: prom/prometheus
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
grafana:
image: grafana/grafana
ports:
- "3000:3000"
Sonuç
Bu yazıda, Portainer kullanarak Langflow'u PostgreSQL ile nasıl deploy edeceğinizi detaylı olarak anlattım. Bu kurulum ile:
✅ Görsel bir arayüzle container'larınızı yönetebilirsiniz
✅ Veritabanı ile kalıcı veri saklama sağlarsınız
✅ Production-ready bir altyapı oluşturursunuz
✅ Kolayca ölçeklendirebilir ve güncelleyebilirsiniz
Langflow'un sunduğu görsel LLM akış editörü ile artık AI uygulamalarınızı hızla geliştirebilir, test edebilir ve production'a alabilirsiniz.
Sonraki Adımlar
- Langflow Dokümantasyonu ile akış oluşturmayı öğrenin
- LangChain ile entegrasyonları keşfedin
- RAG (Retrieval-Augmented Generation) uygulamaları geliştirin
- Kendi özel component'lerinizi oluşturun
Faydalı Kaynaklar
- Langflow GitHub: https://github.com/logspace-ai/langflow
- Portainer Dokümantasyonu: https://docs.portainer.io/
- Docker Compose Referansı: https://docs.docker.com/compose/
- PostgreSQL Best Practices: https://wiki.postgresql.org/wiki/Don't_Do_This
Sorularınız mı var?
Bu deployment hakkında sorularınız veya geri bildirimleriniz varsa, yorum bölümünde benimle paylaşabilirsiniz. Mutlaka cevaplarım!
Başarılı deployment'lar dilerim! 🚀
Son güncelleme: Ekim 2025
Etiketler: #Langflow #Portainer #Docker #AI #LLM #DevOps #PostgreSQL #Deployment