# Langflow Docker Compose ve PostgreSQL ile nasıl kurulur

> Langflow'u Ubuntu ya da Debian'da Docker Compose ve PostgreSQL ile kurun: süper kullanıcı girişi, sabit gizli anahtar, Caddy ile HTTPS, yedek ve güncelleme.

Zorluk: Orta\
Denendiği sistemler: Ubuntu 24.04 LTS, Ubuntu 26.04 LTS, Debian 12, Debian 13

Langflow, yapay zeka ajanları ve LLM iş akışları için görsel bir oluşturucudur. Modeller, istemler, vektör depoları, araçlar ve ajanlar için bileşenleri bir tuvale sürükler, akışı bir test alanında (playground) dener ve onu bir API uç noktası veya MCP sunucusu olarak sunarsınız. Arka planda her bileşen açıp değiştirebileceğiniz Python kodudur; bu Langflow'u esnek yapar ama dikkatli çalıştırılması gerektiği anlamına da gelir.

Bu rehber resmi `langflowai/langflow` imajını, projenin Docker Compose örneğini izleyerek bir PostgreSQL veritabanıyla kurar. İmaj sürümünü sabitler, otomatik girişi bir süper kullanıcı ve kendi gizli anahtarınızla kapatır, tüm portları localhost'ta tutar, Langflow'u Caddy ile HTTPS üzerinden yayınlar, yerel bir Ollama sunucusuna bağlar ve yığını nasıl yedekleyip güncelleyeceğinizi öğrenirsiniz.

## Ön koşullar

- Docker Engine ve Compose eklentisi kurulu, **Ubuntu 24.04 LTS**, **Ubuntu 26.04 LTS**, **Debian 12** veya **Debian 13** çalıştıran bir sunucu; bkz. [Ubuntu'ya Docker kurulumu](/guides/install-docker-ubuntu) veya [Debian'a Docker kurulumu](/guides/install-docker-debian).
- `sudo` yetkisi ve SSH anahtarıyla girişi olan, root olmayan bir kullanıcı; bkz. [Yeni bir Linux sunucusunu güvenli hale getirin](/guides/secure-a-new-linux-server) ve [SSH anahtarlarını ayarlayın](/guides/ssh-keys).
- Sunucuyu gösteren bir A (isteğe bağlı olarak AAAA) kaydına sahip `langflow.example.com` gibi bir alan adı ve [Caddy reverse proxy](/guides/caddy-reverse-proxy) rehberindeki Caddy kurulumu.
- Bir model sağlayıcısı için API anahtarı veya [Ollama kurulumu](/guides/install-ollama) ile kurulmuş Ollama.

Langflow'un kurulum sayfası bu gereksinimleri Python paketi için listeler; Docker sayfası kendine ait bir değer yayınlamaz, bu nedenle aynı değerler makul bir alt sınırdır:

| Kaynak | En düşük (resmi) | Önerilen başlangıç |
|---|---|---|
| CPU | Çift çekirdek | Çok çekirdekli (4 vCPU) |
| RAM | 2 GB | En az 4 GB (resmi öneri) |
| Disk | Yayınlanmamış | İmajlar, veritabanı ve dosyalar için 20 GB |

## Adım 1 — Proje klasörünü ve gizli değerleri oluşturun

```bash
sudo apt update
sudo apt install python3 openssl
sudo mkdir -p /opt/langflow
sudo chown $USER:$USER /opt/langflow
cd /opt/langflow
```

Compose'un ihtiyaç duyduğu ayarları `.env` dosyasına yazın. Gizli anahtar, API anahtarları gibi saklanan kimlik bilgilerini şifreler; Langflow bunu kendisi üretebilir, ancak belgeler üretimde kendi anahtarınızı ayarlamanızı önerir ve burada kullanılan Python komutunu gösterir.

```bash
cat > .env <<EOF
LANGFLOW_VERSION=1.12.5
POSTGRES_PASSWORD=$(openssl rand -hex 24)
LANGFLOW_SUPERUSER=admin
LANGFLOW_SUPERUSER_PASSWORD=$(openssl rand -base64 24)
LANGFLOW_SECRET_KEY=$(python3 -c "from secrets import token_urlsafe; print(token_urlsafe(32))")
EOF
chmod 600 .env
grep SUPERUSER .env
```

Son komutun gösterdiği süper kullanıcı adını ve parolasını not edin. `LANGFLOW_VERSION` imajı sabitler; en yeni kararlı sürüm numarası için [Docker Hub'daki Langflow etiketlerine](https://hub.docker.com/r/langflowai/langflow/tags) bakın ve `dev` içeren etiketlerden kaçının.

## Adım 2 — Compose dosyasını yazın

`/opt/langflow/compose.yaml` dosyasını oluşturun. Dosya resmi `docker_example/docker-compose.yml` örneğine dayanır ve üç değişiklik içerir: veritabanı portu hiç yayınlanmaz, Langflow yalnızca localhost'ta yayınlanır ve Langflow'un önerdiği güvenli yapılandırmadaki kimlik doğrulama ayarları eklenir.

```yaml
services:
  langflow:
    image: langflowai/langflow:${LANGFLOW_VERSION}
    restart: unless-stopped
    depends_on:
      - postgres
    ports:
      - "127.0.0.1:7860:7860"
    extra_hosts:
      - "host.docker.internal:host-gateway"
    environment:
      - LANGFLOW_DATABASE_URL=postgresql://langflow:${POSTGRES_PASSWORD}@postgres:5432/langflow
      - LANGFLOW_CONFIG_DIR=/app/langflow
      - LANGFLOW_AUTO_LOGIN=False
      - LANGFLOW_SUPERUSER=${LANGFLOW_SUPERUSER}
      - LANGFLOW_SUPERUSER_PASSWORD=${LANGFLOW_SUPERUSER_PASSWORD}
      - LANGFLOW_SECRET_KEY=${LANGFLOW_SECRET_KEY}
      - LANGFLOW_NEW_USER_IS_ACTIVE=False
      - LANGFLOW_ENABLE_SIGNUP=False
      - LANGFLOW_ENABLE_SUPERUSER_CLI=False
      - DO_NOT_TRACK=true
    volumes:
      - langflow-data:/app/langflow
  postgres:
    image: postgres:16-trixie
    restart: unless-stopped
    environment:
      POSTGRES_USER: langflow
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_DB: langflow
    volumes:
      - langflow-postgres:/var/lib/postgresql/data
volumes:
  langflow-postgres:
  langflow-data:
```

Ayarların kısa açıklaması:

- `LANGFLOW_CONFIG_DIR=/app/langflow`, Langflow'un logları, dosya depolamasını ve izleme verilerini tuttuğu yerdir; `langflow-data` volume'u bunları güncellemeler boyunca korur.
- Süper kullanıcı parolasıyla birlikte `LANGFLOW_AUTO_LOGIN=False` herkesi giriş yapmaya zorlar. Yeni hesaplar bir süper kullanıcı etkinleştirene kadar pasif başlar, kendi kendine kayıt kapalıdır ve `LANGFLOW_ENABLE_SUPERUSER_CLI=False` komut satırından ek süper kullanıcı oluşturulmasını engeller.
- `postgres:16-trixie`, resmi örneğin sabitlediği etikettir; böylece PostgreSQL'in temel sistemi mevcut bir volume'un altında değişip collation uyarılarına yol açmaz.
- `DO_NOT_TRACK=true`, Langflow telemetrisinden çıkar.

## Adım 3 — Langflow'u başlatın ve kontrol edin

```bash
docker compose up -d
docker compose ps
docker compose logs --tail 50 langflow
curl -I http://127.0.0.1:7860
```

İlk başlatma veritabanı şemasını oluşturur ve bir iki dakika sürer. İki servis de çalışır görünmeli, `langflow` satırında `127.0.0.1:7860->7860/tcp` yer almalı ve `curl` komutu `HTTP/1.1 200 OK` döndürmelidir. Langflow hemen kapanıyorsa loglar genellikle eksik veya reddedilen bir süper kullanıcı parolasını gösterir.

## Adım 4 — Langflow'u Caddy ile HTTPS üzerinden yayınlayın

`/etc/caddy/Caddyfile` dosyasına bir site bloğu ekleyin. Langflow rastgele kod çalıştırabildiği için örnek erişimi kendi IP adresinizle sınırlar; `198.51.100.24` değerini kendi adresinizle değiştirin veya herkese açık akış uç noktalarına ihtiyacınız varsa iki eşleştirici satırını silin:

```caddyfile
langflow.example.com {
    @outside not remote_ip 198.51.100.24
    respond @outside 403
    reverse_proxy 127.0.0.1:7860
}
```

```bash
sudo systemctl reload caddy
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
curl -I https://langflow.example.com
```

Langflow'un Nginx örneği akış (streaming) için WebSocket yükseltmelerini, uzun okuma zaman aşımlarını ve arabelleksiz yanıtları açar. Caddy'de bunların hiçbirini ayarlamanız gerekmez: WebSocket'leri kendiliğinden aktarır, varsayılan olarak okuma zaman aşımı uygulamaz ve akış halindeki yanıtları hemen gönderir. Nginx'i tercih ederseniz bu ayarları resmi örnekten veya [Nginx ve Certbot](/guides/nginx-reverse-proxy-certbot) rehberinden alın; [Traefik](/guides/traefik-reverse-proxy) de bir seçenektir.

## Adım 5 — Giriş yapın ve kullanıcıları yönetin

`https://langflow.example.com` adresini açın, Adım 1'deki süper kullanıcıyla giriş yapın ve üretilen parolayı bir parola yöneticisinde saklayın. Ardından çalışma arkadaşlarınız için **Admin Page** üzerinden hesap oluşturun. `LANGFLOW_NEW_USER_IS_ACTIVE=False` olduğu için her yeni hesap, siz orada etkinleştirene kadar pasif kalır.

Bir akışı başka bir uygulamadan çağırmak için hesap ayarlarınızda bir Langflow API anahtarı oluşturun ve her istekle gönderin. Anahtarlar bir kullanıcıya aittir; o kullanıcı ayrıldığında anahtarlarını silin.

## Adım 6 — Aynı sunucudaki Ollama'ya bağlanın

Konteyner ana makineye `host.docker.internal` üzerinden ulaşır, ancak standart bir kurulumdan sonra Ollama `127.0.0.1` üzerinde dinler. Ollama SSS sayfasında anlatıldığı gibi bir systemd drop-in dosyasıyla tüm adreslerde dinlemesini sağlayın ve ufw üzerinden yalnızca Langflow ağına izin verin:

```bash
sudo mkdir -p /etc/systemd/system/ollama.service.d
sudo tee /etc/systemd/system/ollama.service.d/override.conf <<'EOF'
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
EOF
sudo systemctl daemon-reload
sudo systemctl restart ollama
docker network inspect langflow_default | grep Subnet
sudo ufw allow from 172.18.0.0/16 to any port 11434 proto tcp
```

`172.18.0.0/16` değerini `inspect` komutunun yazdığı alt ağla değiştirin. Bu kural Ollama'yı yalnızca ufw varsayılan reddetme politikasıyla etkinken korur; `sudo ufw status verbose` çıktısında `Status: active` ve `deny (incoming)` göründüğünü ve başka bir makineden `nc -vz sunucu-ip-adresiniz 11434` komutunun başarısız olduğunu doğrulayın. Ollama'nın kimlik doğrulaması yoktur; 11434 numaralı portu asla herkese açmayın. Bir akışa **Ollama** model bileşenini ekleyin, temel adresini `http://host.docker.internal:11434` yapın ve `ollama pull` ile indirdiğiniz bir modeli seçin. Büyük modeller bir [GPU sunucusunda](/gpu-servers) çok daha hızlı yanıt verir.

## Adım 7 — Kod çalıştırmayı kontrol altında tutun

Langflow'un güvenlik belgeleri riskler konusunda açıktır: bileşen kod düzenleyicisi kullanıcıların arka uç sürecine tam erişimle rastgele Python yazıp çalıştırmasına izin verir, Langflow tek bir süreç içinde kullanıcıları yalıtmaz ve kimlik doğrulama ile yetkilendirme konteynerin dışında sağlanmalıdır.

> **Tehlike**
>
> Langflow'a giriş yapabilen herkes sunucunuzda konteynerin yetkileriyle kod çalıştırabilir, volume'undaki dosyaları okuyabilir ve kendi akışları için saklanan tüm kimlik bilgilerini kullanabilir. Hesapları yalnızca kabuk (shell) erişimi de vereceğiniz kişilere açın.

Tek bir sunucu için pratik önlemler:

- Adım 4'teki Caddy IP izin listesini koruyun veya Langflow'a yalnızca [WireGuard](/guides/wireguard-vpn-server) gibi bir VPN üzerinden erişin.
- Kullanıcılarınız yalnızca yerleşik bileşenlere ihtiyaç duyuyorsa `environment` listesine `LANGFLOW_ALLOW_CUSTOM_COMPONENTS=False` ekleyin. Belgelere göre bu ayar özel bileşenleri ve düzenleyici içinde bileşen kodu düzenlemeyi kapatır.
- Langflow için harcama sınırı olan ayrı model API anahtarları kullanın ve kişiler ayrıldığında bunları yenileyin.
- Birbirinin verisini görmemesi gereken gruplar arasında tek bir kurulumu paylaştırmak yerine yalıtım gereken her ekip için ayrı bir Langflow kurulumu çalıştırın.

## Yedekleme ve geri yükleme

Durum iki adlandırılmış volume'da tutulur: `langflow_langflow-postgres` akışları, kullanıcıları ve şifrelenmiş kimlik bilgilerini içeren veritabanını, `langflow_langflow-data` ise logları ve yüklenen dosyaları tutar. `.env` olmadan saklanan kimlik bilgilerini çözemezsiniz; onu da yedekleyin.

```bash
sudo mkdir -p /opt/backups
sudo chown $USER:$USER /opt/backups
cd /opt/langflow
docker compose exec -T postgres pg_dump -U langflow langflow | gzip > /opt/backups/langflow-db-$(date +%F).sql.gz
docker compose stop langflow
docker run --rm -v langflow_langflow-data:/data -v /opt/backups:/backup ubuntu tar czf /backup/langflow-data-$(date +%F).tar.gz -C /data .
docker compose start langflow
sudo tar czf /opt/backups/langflow-config-$(date +%F).tar.gz -C /opt langflow
```

Yeni bir sunucuya geri yüklemek için yapılandırma arşivini `/opt` altına açın, Langflow'u başlatmadan konteynerleri ve volume'ları oluşturun, veritabanını ve dosyaları yükleyin, ardından her şeyi başlatın:

```bash
sudo tar xzf /opt/backups/langflow-config-2026-10-09.tar.gz -C /opt
cd /opt/langflow
docker compose create
docker compose start postgres
gunzip -c /opt/backups/langflow-db-2026-10-09.sql.gz | docker compose exec -T postgres psql -U langflow langflow
docker run --rm -v langflow_langflow-data:/data -v /opt/backups:/backup ubuntu tar xzf /backup/langflow-data-2026-10-09.tar.gz -C /data
docker compose up -d
```

Dökümü yüklemeden önce `start` komutundan sonra PostgreSQL'e birkaç saniye tanıyın. Üç arşivin de kopyasını sunucunun dışına alın.

## Langflow güncelleme

Belgelenen yükseltme yolu imaj etiketini değiştirmek, yeni imajı çekmek ve aynı volume'larla yeniden başlatmaktır. Veritabanı geçişleri başlangıçta çalıştığı ve etiketi geri almak bunları geri almadığı için önce [sürüm notlarını](https://github.com/langflow-ai/langflow/releases) okuyun ve yedek alın.

```bash
cd /opt/langflow
nano .env
docker compose pull
docker compose up -d
docker compose logs --tail 50 langflow
```

`nano` içinde `LANGFLOW_VERSION` değerini yeni kararlı etikete ayarlayın. Sürüm notları aksini söylemedikçe `postgres:16-trixie` imajını koruyun; yeni bir PostgreSQL ana sürümü yalnızca yeni bir etiket değil, döküm ve geri yükleme gerektirir.

## Sorun giderme

### Langflow başlangıçta süper kullanıcı parolası hatasıyla kapanıyor

`LANGFLOW_SUPERUSER_PASSWORD` boş, konteynere aktarılmamış veya eski varsayılan `langflow` değerinde. `.env` dosyasını kontrol edin, Compose'un ne aktardığını görmek için `docker compose config | grep SUPERUSER` çalıştırın ve yeniden başlatın.

### Yeni kullanıcılar giriş yapamıyor

`LANGFLOW_NEW_USER_IS_ACTIVE=False` olduğu için pasifler. Süper kullanıcı olarak **Admin Page** üzerinden etkinleştirin.

### password authentication failed for user langflow

`POSTGRES_PASSWORD`, veritabanı volume'u oluşturulduktan sonra değiştirilmiş. PostgreSQL özgün parolayı korur. Eski değeri `.env` dosyasına geri yazın veya `.env` dosyasını güncellemeden önce parolayı PostgreSQL içinde `ALTER USER` ile değiştirin.

### Ollama bileşeni bağlanamıyor

Ollama hâlâ `127.0.0.1` üzerinde dinliyor ya da ufw Docker alt ağını engelliyor. `ss -tln | grep 11434` ve `sudo ufw status` çıktılarını kontrol edin ve temel adresin `localhost` değil `host.docker.internal` kullandığından emin olun.

### Caddy 403 Forbidden döndürüyor

Mevcut genel IP adresiniz `remote_ip` satırındakinden farklı. Adresi güncelleyin ve `sudo systemctl reload caddy` çalıştırın.

## Sonraki adımlar

- Yerel modelleri [Ollama kurulumu](/guides/install-ollama) ile çalıştırın.
- Langflow'u uygulama odaklı bir platformla [Dify kurulumu](/guides/install-dify) rehberinde karşılaştırın.
- Kurulumu paylaşmadan önce resmi [Langflow güvenlik belgelerini](https://docs.langflow.org/security) okuyun.
- Sunucu seçeneklerini [Langflow hosting](/langflow-hosting) sayfasında inceleyin.

## Sık sorulan sorular

### Langflow neden süper kullanıcı parolası olmadan başlamayı reddediyor?

LANGFLOW_AUTO_LOGIN False olduğunda Langflow LANGFLOW_SUPERUSER_PASSWORD ister; değer yoksa veya eski varsayılan langflow ise güvenli tarafta kalıp başlamaz. Resmi Docker imajları otomatik girişi zaten kapatır, bu yüzden bir parola vermeniz gerekir.

### Langflow'u herkese açık internete koymak güvenli mi?

Onu özel bir araç olarak görün. Akışlar ve özel bileşenler Langflow arka ucuna tam erişimle Python kodu çalıştırır ve belgelere göre Langflow tek bir süreç içinde kullanıcıları birbirinden yalıtmaz. Hesapları yalnızca güvendiğiniz kişilere verin ve bir IP izin listesi veya VPN düşünün.

### Bu rehber hangi Langflow sürümünü kurar?

İmaj etiketi .env içinde sabitlenir. Bu rehber kontrol edildiğinde Docker Hub'daki en son kararlı etiket 1.12.5 idi; dev içeren etiketler geliştirme derlemeleridir ve üretim için uygun değildir.

### Langflow'u aynı sunucudaki Ollama'ya nasıl bağlarım?

OLLAMA_HOST ile Ollama'nın 0.0.0.0 üzerinde dinlemesini sağlayın, ufw'de 11434 numaralı porta yalnızca Compose alt ağının erişmesine izin verin ve Ollama bileşeninin temel adresini http://host.docker.internal:11434 olarak ayarlayın.

---

Kaynak: <https://hyperdc.com/tr/guides/tutorials/install-langflow>\
Son güncelleme: 2026-10-09
