−25%

yıllık Windows ödemesinde, 31 Ekim'e kadar. Paketlere git

EQVPS
Hemen başla

Langfuse için VPS: AI ajanlarınız ne yaptı, görün

Langfuse'u kendiniz barındırın; gözetimsiz çalışan ajanlarınızın her LLM çağrısını ve araç adımını izleyin. Test edilmiş Docker Compose, gerçek RAM ve plan.

Gece saat üçte kimse bakmazken çalışan bir ajan, sonradan ne yaptığını yeniden kurabilme yeteneğiniz kadar değerlidir. „Gece 38 $'lık token yaktı” kötü bir sabahtır. „Bir arama aracı boş sayfa döndürdüğü ve planlayıcı 400 kez yeniden denediği için 38 $ yaktı” ise öğle yemeğinden önce düzelteceğiniz bir hatadır. İkinci cümle için iz kaydı gerekir.

Langfuse her LLM çağrısını; promptu, araç adımını, token sayısını ve gecikmeyi içinde gezinebileceğiniz bir ağaç olarak kaydeder. Kendiniz barındırdığınızda bu promptlar ve yanıtlar — çoğu zaman müşteri verileri, API çıktıları ve arada kaybolmuş bir sır da içerirler — başkasının panelinde değil, sizin kontrol ettiğiniz bir sunucuda kalır.

Çalışır tutmanın maliyeti

Langfuse v4 küçük bir ikili dosya değil, altı konteynerdir: web uygulaması, arka plan worker'ı, Postgres, olaylar için ClickHouse, Redis ve dosyalar için MinIO. Bir test sunucusuna kurduk ve boş bir projeyle yaklaşık 3,5 GB RAM kullanımı ölçtük. Büyüyen kısım ClickHouse'dur, çünkü gönderdiğiniz her span oraya gider.

YükPlan
Birkaç ajan, haftalarca izMedium-IP: 6 vCPU, 6 GB, 45 GB ($20/ay)
Bir ajan filosu, aylarca geçmişPro planlar, 32 GB RAM'den başlayarak — talep üzerine

Daha küçük planlara kurulur, ama ClickHouse ile worker aynı anda bellek istediği anda zorlanmaya başlar. Ben 6 GB'ın altına inmezdim.

Ajanlar nerede yaşıyor? Başka makinelerde çalışıyorlarsa kendi IPv4'ü olan bir plan seçin: bir HTTPS uç noktasına ihtiyaçları var, NAT planında ise giden adres size ait değildir ve dışarıdan yalnızca SSH portuna ulaşılır. Ajanlar bu sunucunun kendisinde çalışıyorsa Langfuse'un internete hiç açılması gerekmez: deneme için NAT'lı Medium ($12/ay) yeterli. İki konum var, Almanya ve Finlandiya; uygunluk sipariş sırasında görünür. Size değil, ajanlara yakın olanı seçin. Sunucular kriptoyla, KYC olmadan ödenir.

Kurulum

Yeni kurulmuş bir Ubuntu 24.04 veya Debian 12 sunucusunda, root olarak. Önce Docker:

curl -fsSL https://get.docker.com | sh

Sonra Langfuse; compose dosyasındaki varsayılan değerler yerine gerçek gizli anahtarlarla:

git clone --depth 1 https://github.com/langfuse/langfuse.git
cd langfuse

PG=$(openssl rand -hex 16); MINIO=$(openssl rand -hex 16)
cat > .env <<EOF
NEXTAUTH_URL=https://langfuse.example.com
NEXTAUTH_SECRET=$(openssl rand -hex 32)
SALT=$(openssl rand -hex 32)
ENCRYPTION_KEY=$(openssl rand -hex 32)
POSTGRES_PASSWORD=$PG
DATABASE_URL=postgresql://postgres:$PG@postgres:5432/postgres
CLICKHOUSE_PASSWORD=$(openssl rand -hex 16)
MINIO_ROOT_PASSWORD=$MINIO
LANGFUSE_S3_EVENT_UPLOAD_SECRET_ACCESS_KEY=$MINIO
LANGFUSE_S3_MEDIA_UPLOAD_SECRET_ACCESS_KEY=$MINIO
LANGFUSE_S3_BATCH_EXPORT_SECRET_ACCESS_KEY=$MINIO
REDIS_AUTH=$(openssl rand -hex 16)
TELEMETRY_ENABLED=false
EOF
chmod 600 .env

Bu parolalardan ikisinin eşi var: Postgres parolası DATABASE_URL içinde de geçer, MinIO parolası da üç S3_..._SECRET_ACCESS_KEY satırıyla aynı olmalıdır. Bu yüzden her biri tek bir değişkenden gelir.

Şimdi tuzak. Compose dosyası web uygulamasını 3000, MinIO'yu 9090 portunda tüm arayüzlerde yayınlar ve Docker'ın yayınladığı portlar ufw'yi atlar. Tek girişin ters proxy olması için ikisini de localhost'a bağlayın:

sed -i 's/- 3000:3000/- 127.0.0.1:3000:3000/; s/- 9090:9000/- 127.0.0.1:9090:9000/' docker-compose.yml
docker compose up -d
curl -s http://127.0.0.1:3000/api/public/health

Son komut {"status":"OK", ...} yazdırmalıdır. İlk açılış veritabanı göçlerini çalıştırır; bizim testimizde sağlık kontrolü konteynerler ayağa kalktıktan yaklaşık 15 saniye sonra geçti.

Önünde HTTPS

langfuse.example.com adresini sunucunun IP'sine yönlendirin, ardından:

apt install -y caddy
cat > /etc/caddy/Caddyfile <<'EOF'
langfuse.example.com {
    reverse_proxy 127.0.0.1:3000
}
EOF
systemctl reload caddy
ufw allow 22/tcp && ufw allow 80/tcp && ufw allow 443/tcp && ufw enable

Caddy sertifikayı kendisi alır. Siteyi açın, hesabınızı oluşturun (ilk organizasyon olur), bir proje ekleyin ve projenin açık ve gizli anahtarlarını kopyalayın.

Sonra kapıyı arkanızdan kapatın. Langfuse AUTH_DISABLE_SIGNUP değişkenini anlar, ama hazır compose dosyası onu web konteynerine aktarmaz; bu yüzden langfuse-web altına bir satır daha gerekir:

sed -i 's|^      NEXTAUTH_SECRET: \(.*\)$|      NEXTAUTH_SECRET: \1\n      AUTH_DISABLE_SIGNUP: ${AUTH_DISABLE_SIGNUP:-false}|' docker-compose.yml
echo "AUTH_DISABLE_SIGNUP=true" >> .env
docker compose up -d

Bundan sonra her kayıt denemesi «Sign up is disabled» yanıtını alır. Ekip arkadaşlarınızı proje içinden eklersiniz.

Bir ajandan iz göndermek

Python SDK'sı fonksiyonlarınızı sarar ve iç içe çağrılar iç içe span'ler olur:

python3 -m venv venv && . venv/bin/activate
pip install langfuse
export LANGFUSE_PUBLIC_KEY=pk-lf-...
export LANGFUSE_SECRET_KEY=sk-lf-...
export LANGFUSE_BASE_URL=https://langfuse.example.com
from langfuse import get_client, observe

langfuse = get_client()  # LANGFUSE_* değişkenlerini okur

@observe(name="fetch-prices")
def fetch_prices(pair: str) -> dict:
    return {"pair": pair, "bid": 64210.5}

@observe(name="nightly-agent-run")
def run() -> str:
    data = fetch_prices("BTC/USDT")
    return f"done: {data['pair']}"

print(run())
langfuse.flush()  # kısa betikler arka plandaki gönderim bitmeden sonlanır

LANGFUSE_BASE_URL adımını atlamayın. O olmadan SDK sessizce her şeyi Langfuse'un bulutuna gönderir, anahtarlarınız orada yoktur ve boş bir panele bakıp kalırsınız.

Span'lerin ulaştığını terminalden kontrol etmek için:

curl -s -u "$LANGFUSE_PUBLIC_KEY:$LANGFUSE_SECRET_KEY" \
  "$LANGFUSE_BASE_URL/api/public/v2/observations?limit=5"

v4'te eski /api/public/traces uç noktası events-only moduyla ilgili bir hata döndürür. Bu beklenen davranıştır, kurulum bozuk değildir. Gerçek bir ajanda LLM çağrısını ve her aracı aynı şekilde sararsınız; üstelik Langfuse yaygın LLM SDK'ları ve ajan framework'leri için entegrasyonlarla gelir, bu yüzden çoğu zaman her yere dekoratör serpiştirmek yerine tek bir import'u değiştirmek yeterlidir.

Nelere dikkat etmeli

  • Disk. ClickHouse ve MinIO gönderdiğiniz her şeyi saklar. Alanın nereye gittiğini docker system df -v gösterir. Uzun promptları ve yanıtları izliyorsanız Medium-IP'nin 45 GB'ı yıllar değil haftalar içinde dolar. Ayda bir kontrol edin; yetmez olduğunda 400 GB ve üzeri bir Pro plan talep üzerine sunulur.
  • Güncellemeler. Compose dosyası ana sürümü (:4) sabitler. docker compose pull && docker compose up -d bu sürüm içindeki düzeltmeleri getirir. Ana sürüm değiştirmeden önce changelog'u okuyun: iz uç noktası tam da v4'te kayboldu.
  • Yedekler. Önemli olan her şey Docker birimlerinde durur: Postgres kullanıcıları, projeleri ve anahtarları tutar; ClickHouse ve MinIO ise izlerin kendisini. Bunları bir takvime göre sunucunun dışına kopyalayın.

Ayda $20'a değer mi? Ajanlarınız token'a bundan fazlasını harcıyorsa — gözetimsiz ajanların çoğu harcar — token'ların nereye gittiğini bilmek, bir döngünün ilk kez kontrolden çıktığı gün kendini amorti eder. Günde bir kez çalışan küçük bir ajanın bunların hiçbirine ihtiyacı yoktur: bir log dosyası ve bir token sayacı yeter.

İlgili

Dağıtmaya hazır mısınız? Kripto ile ödeyin, KYC yok — yaklaşık bir dakikada çevrimiçi.

Dağıt →

SSS

Kendi sunucusundaki Langfuse ne kadar RAM ister?

Test sunucumuzda Langfuse v4 altı konteyner olarak çalıştı — web, worker, Postgres, ClickHouse, Redis ve MinIO — ve boş bir projeyle yaklaşık 3,5 GB RAM kullandı. ClickHouse gönderdiğiniz her span ile büyür. Medium-IP (6 GB RAM, 45 GB disk) birkaç ajan için onu rahatça kaldırır; aylarca geçmişi olan koca bir ajan filosu ise talep üzerine sunulan bir Pro plan ister.

Langfuse için ayrı bir IP adresi gerekir mi?

Yalnızca ajanlarınız başka bir yerde çalışıyor ve izleri internet üzerinden gönderiyorsa: bir HTTPS uç noktasına ihtiyaç duyarlar, NAT planı ise dışarıdan sadece SSH portunuzu kabul eder. Ajanlar aynı sunucudaysa Langfuse localhost'ta kalabilir, paneli de bir SSH tüneliyle açarsınız; bunun için NAT'lı Medium planı yeterlidir.

Kodum çalışıyor ama panel boş kalıyor. Neden?

Neredeyse her zaman LANGFUSE_BASE_URL eksiktir. O olmadan SDK her şeyi Langfuse'un kendi bulutuna gönderir, kendi sunucunuzdaki anahtarlar orada yoktur ve sunucunuza hiçbir şey ulaşmaz. Değişkene kendi adresinizi yazın.

/api/public/traces uç noktası hata veriyor. Kurulum bozuk mu?

Hayır. Langfuse v4, bu uç noktanın kapalı olduğu events-only modunda çalışır. Verileri /api/public/v2/observations üzerinden okuyun; test span'lerimizin ulaştığını biz de bu çağrıyla doğruladık.

Yabancıların kayıt olmasını nasıl engellerim?

Langfuse AUTH_DISABLE_SIGNUP değişkenini okur, ama hazır gelen docker-compose.yml bu değişkeni web konteynerine aktarmaz; yani yalnızca .env içine yazmak işe yaramaz. langfuse-web ortamına bir satır ekleyin (komut aşağıda), kendi hesabınızı oluşturduktan sonra true yapın; sonraki kayıt denemeleri «Sign up is disabled» yanıtını alır.

Yorumlar

Henüz yorum yok. İlk olun.

Bir yorum bırakın

Yorumlar görünmeden önce denetlenir.