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

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

  1. Sol menüden Stacks seçeneğine tıklayın
  2. + Add stack butonuna basın
  3. Stack için bir isim verin (örn: langflow-stack)

Portainer Stack Oluşturma

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

Stackslangflow-stackContainers 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:

  1. İlgili container'a tıklayın
  2. Logs sekmesine geçin
  3. 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:

  1. Stack sayfasında Editor butonuna tıklayın
  2. docker-compose.yml içeriğini düzenleyin
  3. 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:

  1. PostgreSQL'in durumunu kontrol edin:

    • Portainer'da langflow-postgres container'ının healthy durumda olduğundan emin olun
  2. Logları inceleyin:

    • Langflow loglarında veritabanı bağlantı hataları var mı bakın
  3. 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:

  1. PostgreSQL container'ının çalıştığını doğrulayın
  2. Network bağlantısını kontrol edin (her iki container da langflow-network içinde mi?)
  3. 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:

  1. Volumes bölümüne gidin
  2. postgres-data veya langflow-data volume'unu seçin
  3. 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


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