−25%

στα Windows με ετήσια χρέωση, έως 31/10. Δείτε τα πακέτα

EQVPS
Ξεκινήστε

VPS για Langfuse: δείτε τι έκαναν οι AI agents σας

Φιλοξενήστε το Langfuse μόνοι σας και καταγράψτε κάθε κλήση LLM και κάθε βήμα εργαλείου των agents σας. Δοκιμασμένο Docker Compose, πραγματική RAM, πακέτο.

Ένας agent που δουλεύει στις τρεις τα ξημερώματα χωρίς κανείς να τον κοιτάζει αξίζει όσο η ικανότητά σας να ανασυνθέσετε μετά τι έκανε. «Έκαψε 38 $ σε tokens μέσα στη νύχτα» είναι ένα άσχημο πρωινό. «Έκαψε 38 $ επειδή ένα εργαλείο αναζήτησης επέστρεψε κενή σελίδα και ο planner ξαναδοκίμασε 400 φορές» είναι ένα bug που διορθώνετε πριν το μεσημεριανό. Για τη δεύτερη πρόταση χρειάζονται traces.

Το Langfuse καταγράφει κάθε κλήση LLM, κάθε prompt, βήμα εργαλείου, αριθμό tokens και καθυστέρηση ως ένα δέντρο που μπορείτε να εξερευνήσετε με κλικ. Όταν το φιλοξενείτε εσείς, αυτά τα prompts και οι απαντήσεις — που συχνά περιέχουν δεδομένα πελατών, έξοδο API και κάποιο ξεχασμένο μυστικό — μένουν σε server που ελέγχετε, όχι στον πίνακα κάποιου άλλου.

Τι κοστίζει να τρέχει

Το Langfuse v4 δεν είναι ένα μικρό εκτελέσιμο αλλά έξι containers: η web εφαρμογή, ένας worker στο παρασκήνιο, το Postgres, το ClickHouse για τα events, το Redis και το MinIO για τα αρχεία. Το εγκαταστήσαμε σε δοκιμαστικό server και μετρήσαμε περίπου 3,5 GB RAM σε χρήση με άδειο project. Αυτό που μεγαλώνει είναι το ClickHouse, γιατί εκεί καταλήγει κάθε span που στέλνετε.

ΦόρτοςΠακέτο
Λίγοι agents, traces εβδομάδωνMedium-IP: 6 vCPU, 6 GB, 45 GB ($20/μήνα)
Στόλος agents, ιστορικό μηνώνΠακέτα Pro, από 32 GB RAM και πάνω — κατόπιν αιτήματος

Σε μικρότερα πακέτα εγκαθίσταται, αλλά μετά δυσκολεύεται μόλις το ClickHouse και ο worker ζητήσουν μνήμη ταυτόχρονα. Εγώ δεν θα πήγαινα κάτω από 6 GB.

Πού ζουν οι agents; Αν τρέχουν σε άλλα μηχανήματα, επιλέξτε πακέτο με δική του IPv4: χρειάζονται endpoint HTTPS, και σε πακέτο NAT η εξερχόμενη διεύθυνση δεν είναι δική σας και απ' έξω φτάνει κανείς μόνο στη θύρα SSH. Αν οι agents τρέχουν στον ίδιο server, το Langfuse δεν χρειάζεται ποτέ να βγει στο internet: για δοκιμή αρκεί το Medium με NAT ($12/μήνα). Υπάρχουν δύο τοποθεσίες, Γερμανία και Φινλανδία· η διαθεσιμότητα φαίνεται κατά την παραγγελία. Διαλέξτε αυτή που είναι πιο κοντά στους agents, όχι σε εσάς. Οι servers πληρώνονται με κρυπτονομίσματα, χωρίς KYC.

Εγκατάσταση

Σε φρέσκο server με Ubuntu 24.04 ή Debian 12, ως root. Πρώτα το Docker:

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

Μετά το Langfuse, με πραγματικά μυστικά στη θέση των προεπιλογών του αρχείου compose:

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

Δύο από αυτούς τους κωδικούς πάνε σε ζευγάρι: ο κωδικός του Postgres βρίσκεται και μέσα στο DATABASE_URL, ενώ ο κωδικός του MinIO πρέπει να ταιριάζει με τις τρεις γραμμές S3_..._SECRET_ACCESS_KEY. Γι' αυτό ο καθένας προέρχεται από μία μόνο μεταβλητή.

Τώρα η παγίδα. Το αρχείο compose δημοσιεύει την web εφαρμογή στη θύρα 3000 και το MinIO στη 9090 σε όλα τα interfaces, και οι θύρες που δημοσιεύει το Docker παρακάμπτουν το ufw. Δέστε και τις δύο στο localhost, ώστε η μόνη είσοδος να είναι ο reverse proxy:

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

Η τελευταία εντολή πρέπει να τυπώσει {"status":"OK", ...}. Η πρώτη εκκίνηση τρέχει τα migrations της βάσης· στη δοκιμή μας το health check πέρασε περίπου 15 δευτερόλεπτα αφού σηκώθηκαν τα containers.

HTTPS μπροστά

Στρέψτε το langfuse.example.com στην IP του server και μετά:

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 παίρνει μόνο του το πιστοποιητικό. Ανοίξτε τον ιστότοπο, δημιουργήστε τον λογαριασμό σας (γίνεται ο πρώτος οργανισμός), προσθέστε ένα project και αντιγράψτε το δημόσιο και το μυστικό του κλειδί.

Ύστερα κλείστε την πόρτα πίσω σας. Το Langfuse καταλαβαίνει το AUTH_DISABLE_SIGNUP, αλλά το προεπιλεγμένο αρχείο compose δεν το περνά στο web container, οπότε χρειάζεται μία ακόμη γραμμή κάτω από το langfuse-web:

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

Από εδώ και πέρα, μια απόπειρα εγγραφής παίρνει «Sign up is disabled». Τους συναδέλφους τους προσθέτετε μέσα από το project.

Αποστολή traces από έναν agent

Το Python SDK τυλίγει τις συναρτήσεις σας, και οι εμφωλευμένες κλήσεις γίνονται εμφωλευμένα spans:

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_*

@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()  # τα σύντομα scripts τελειώνουν πριν ολοκληρωθεί η αποστολή στο παρασκήνιο

Μην παραλείψετε το LANGFUSE_BASE_URL. Χωρίς αυτό, το SDK στέλνει σιωπηλά τα πάντα στο cloud του Langfuse, τα κλειδιά σας δεν υπάρχουν εκεί και κοιτάτε έναν άδειο πίνακα.

Για να ελέγξετε από το τερματικό ότι έφτασαν τα spans:

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

Στο v4 το παλιό endpoint /api/public/traces απαντά με σφάλμα για τη λειτουργία events-only. Αυτό είναι αναμενόμενο, δεν σημαίνει χαλασμένη εγκατάσταση. Σε έναν πραγματικό agent τυλίγετε με τον ίδιο τρόπο την κλήση LLM και κάθε εργαλείο· επιπλέον το Langfuse έχει ενσωματώσεις για τα συνηθισμένα LLM SDK και frameworks agents, οπότε συχνά αρκεί να αλλάξετε ένα import αντί να γεμίσετε τα πάντα decorators.

Τι να παρακολουθείτε

  • Δίσκος. Το ClickHouse και το MinIO κρατούν ό,τι στέλνετε. Το docker system df -v δείχνει πού πήγε ο χώρος. Αν καταγράφετε μεγάλα prompts και απαντήσεις, τα 45 GB του Medium-IP γεμίζουν σε εβδομάδες, όχι σε χρόνια. Ελέγχετε μία φορά τον μήνα· όταν στενέψει, ένα πακέτο Pro με 400 GB ή περισσότερα είναι διαθέσιμο κατόπιν αιτήματος.
  • Ενημερώσεις. Το αρχείο compose κλειδώνει την κύρια έκδοση (:4). Το docker compose pull && docker compose up -d φέρνει τις διορθώσεις μέσα σε αυτήν. Διαβάστε το changelog πριν αλλάξετε κύρια έκδοση: ακριβώς στο v4 εξαφανίστηκε το endpoint των traces.
  • Αντίγραφα ασφαλείας. Ό,τι μετράει ζει σε volumes του Docker: το Postgres κρατά χρήστες, projects και κλειδιά· το ClickHouse και το MinIO τα ίδια τα traces. Αντιγράφετέ τα εκτός server με πρόγραμμα.

Αξίζει $20 τον μήνα; Αν οι agents σας ξοδεύουν περισσότερα σε tokens — και οι περισσότεροι agents χωρίς επίβλεψη ξοδεύουν — το να ξέρετε πού πήγαν τα tokens αποσβένεται την πρώτη φορά που ένας βρόχος ξεφύγει. Ένας μικρός agent που τρέχει μία φορά τη μέρα δεν χρειάζεται τίποτα από αυτά: φτάνουν ένα αρχείο log και ένας μετρητής tokens.

Σχετικά

Έτοιμοι για ανάπτυξη; Πληρωμή με crypto, χωρίς KYC — έτοιμο σε περίπου ένα λεπτό.

Ανάπτυξη τώρα →

Συχνές ερωτήσεις

Πόση RAM χρειάζεται ένα Langfuse στον δικό σας server;

Στον δοκιμαστικό μας server το Langfuse v4 έτρεξε ως έξι containers — web, worker, Postgres, ClickHouse, Redis και MinIO — και χρησιμοποίησε περίπου 3,5 GB RAM με ένα άδειο project. Το ClickHouse μεγαλώνει με κάθε span που στέλνετε. Το Medium-IP (6 GB RAM, 45 GB δίσκος) το σηκώνει άνετα για μια χούφτα agents· ένας ολόκληρος στόλος με ιστορικό μηνών χρειάζεται πακέτο Pro, διαθέσιμο κατόπιν αιτήματος.

Χρειάζεται το Langfuse δική του διεύθυνση IP;

Μόνο αν οι agents τρέχουν αλλού και στέλνουν traces μέσω internet: χρειάζονται ένα endpoint HTTPS, και ένα πακέτο NAT δέχεται απ' έξω μόνο τη θύρα SSH σας. Αν οι agents ζουν στον ίδιο server, το Langfuse μπορεί να μείνει στο localhost και ανοίγετε τον πίνακα μέσω SSH tunnel· γι' αυτό αρκεί το πακέτο Medium με NAT.

Ο κώδικας τρέχει, αλλά ο πίνακας μένει άδειος. Γιατί;

Σχεδόν πάντα λείπει το LANGFUSE_BASE_URL. Χωρίς αυτό, το SDK στέλνει τα πάντα στο cloud του ίδιου του Langfuse, τα δικά σας κλειδιά δεν υπάρχουν εκεί και τίποτα δεν φτάνει στον server σας. Βάλτε στη μεταβλητή τη δική σας διεύθυνση.

Το endpoint /api/public/traces επιστρέφει σφάλμα. Είναι χαλασμένη η εγκατάσταση;

Όχι. Το Langfuse v4 τρέχει σε λειτουργία events-only, όπου αυτό το endpoint είναι απενεργοποιημένο. Διαβάστε τα δεδομένα από το /api/public/v2/observations — με αυτή την κλήση επιβεβαιώσαμε ότι έφτασαν τα δοκιμαστικά μας spans.

Πώς εμποδίζω αγνώστους να εγγραφούν στο instance μου;

Το Langfuse διαβάζει το AUTH_DISABLE_SIGNUP, αλλά το προεπιλεγμένο docker-compose.yml δεν περνά τη μεταβλητή στο web container, οπότε μια γραμμή μόνο στο .env δεν κάνει τίποτα. Προσθέστε μία γραμμή στο περιβάλλον του langfuse-web (η εντολή είναι παρακάτω), ορίστε true αφού δημιουργήσετε τον λογαριασμό σας, και οι επόμενες εγγραφές θα παίρνουν «Sign up is disabled».

Σχόλια

Δεν υπάρχουν ακόμη σχόλια. Γίνετε ο πρώτος.

Αφήστε ένα σχόλιο

Τα σχόλια ελέγχονται πριν εμφανιστούν.