لماذا تستضيف LangFlow على خادم VPS
LangFlow يتصدى لحالة استخدام محددة: تصميم مسارات الذكاء الاصطناعي بالسحب والإفلات لمكوّنات — نماذج LLM والمسترجعات والمطالبات والذاكرة والوكلاء — ثم اختبارها دون كتابة سطر كود واحد. إنه البديل البصري لـ LangChain في وضع الكود فقط، مناسب للفرق التي تريد التكرار السريع قبل تثبيت المنطق في Python.
على خادم VPS، تحصل على نسخة مستقرة ودائمة يمكن للفريق الوصول إليها، بخلاف الإعداد المحلي الذي يختفي عند إعادة التشغيل. كثيرًا ما تُشفّر مساراتك منطقًا تجاريًا حساسًا — سلاسل المطالبات ومفاتيح API والموصّلات إلى قواعد بياناتك. لا ينبغي أن تمرّ هذه البيانات عبر خدمة SaaS لا تتحكم في سياسة الاحتفاظ بها.
LangFlow يعتمد على FastAPI من جانب الخادم ويكشف كل مسار كنقطة نهاية REST: يمكن لتطبيقاتك استدعاء مسارات الذكاء الاصطناعي مباشرةً، دون كود وسيط. هذا الجمع بين الواجهة البصرية للتصميم والـ API للتكامل هو ما يجعله أداة نمذجة أوّلية جدية.
ما الذي تكسبه بنسخة مُستضافة ذاتيًا
- واجهة بصرية للمسارات — اسحب مكوّنات LLM والمسترجع والذاكرة والمطالبة إلى اللوحة، وصِلها، واختبر بلا كود.
- موصّلات LLM متعددة — OpenAI وAnthropic وOllama (محلي) وHugging Face وأي مزوّد متوافق مع واجهة OpenAI البرمجية.
- RAG مدمج — حمّل مستندات PDF أو نصية مع التقطيع والتضمين والبحث الشعاعي في المسار ذاته.
- API تلقائية لكل مسار — يصبح كل مسار نقطة نهاية REST قابلة للاستدعاء من أي تطبيق.
- متغيّرات عامة مشفّرة — تُخزَّن مفاتيح API الخاصة بك من جانب الخادم، ولا تكشف أبدًا في كود العميل.
- مكوّنات Python مخصّصة — وسّع LangFlow بمنطقك التجاري الخاص دون نسخ المشروع.
- التحكم في إصدار المسارات — صدّر بصيغة JSON وأدرجه في Git بصرف النظر عن حالة قاعدة البيانات.
المتطلبات قبل البدء
LangFlow أكثر استهلاكًا للذاكرة من تطبيق ويب معتاد: يحمّل محرّك التنفيذ النماذج والتضمينات في RAM. خصّص 2 vCPU على الأقل و4 جيجابايت من RAM لاستخدام مريح. إذا وصلت نموذج Ollama محليًا للاستدلال على الخادم VPS نفسه، انتقل إلى 8 جيجابايت كحدٍّ أدنى.
من الناحية البرمجية، تحتاج إلى Docker (الإصدار 24 أو أحدث) وDocker Compose v2 مثبّتَين وتعملان. يجب أن يكون المنفذ 7860 متاحًا محليًا. جهّز نطاقًا فرعيًا يشير إلى عنوان IP لخادم VPS — مثل langflow.your-domain.com — مع سجلات DNS منشورة قبل تشغيل certbot. يُوصى بشدة بقاعدة بيانات PostgreSQL للإنتاج.
تثبيت LangFlow باستخدام Docker Compose وPostgreSQL
إنشاء دليل العمل
سجّل الدخول إلى خادم VPS عبر SSH، ثم أنشئ المجلد الذي سيستضيف الحزمة:
mkdir -p /opt/langflow && cd /opt/langflowكتابة ملف docker-compose.yml
أنشئ ملف
docker-compose.ymlبخدمتين —postgresوlangflow— مع healthcheckلضمان جاهزية قاعدة البيانات:services: postgres: image: postgres:16 restart: unless-stopped environment: POSTGRES_USER: langflow POSTGRES_PASSWORD: كلمة-مرور-قوية POSTGRES_DB: langflow volumes: - pgdata:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U langflow"] interval: 10s retries: 5 langflow: image: langflowai/langflow:latest restart: unless-stopped ports: - "127.0.0.1:7860:7860" environment: LANGFLOW_DATABASE_URL: postgresql://langflow:كلمة-مرور-قوية@postgres:5432/langflow LANGFLOW_SECRET_KEY: غيّر-هذه-القيمة-بسلسلة-عشوائية LANGFLOW_AUTO_LOGIN: "false" LANGFLOW_SUPERUSER: admin LANGFLOW_SUPERUSER_PASSWORD: كلمة-مرور-admin-قوية depends_on: postgres: condition: service_healthy volumes: pgdata:تشغيل الحزمة
شغّل الحاويتين في الخلفية:
docker compose up -dتابع سجلات LangFlow خلال التهيئة الأولى:
docker compose logs -f langflowانتظر السطر الذي يشير إلى أن الخادم يستمع على المنفذ
7860قبل المتابعة.التحقق من استجابة الواجهة
من خادم VPS، اختبر استجابة LangFlow محليًا قبل تهيئة الوكيل:
curl -s http://127.0.0.1:7860/healthالاستجابة المتوقعة هي
{"status":"ok"}. إذا حصلت على خطأ رفض الاتصال، تحتوي سجلات البدء على السبب.تهيئة الوكيل العكسي nginx مع HTTPS
ثبّت nginx وcertbot إن لم يكونا مثبّتَين، ثم أنشئ ملف تهيئة:
server { listen 80; server_name langflow.your-domain.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name langflow.your-domain.com; ssl_certificate /etc/letsencrypt/live/langflow.your-domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/langflow.your-domain.com/privkey.pem; location / { proxy_pass http://127.0.0.1:7860; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }احصل على الشهادة باستخدام certbot:
certbot --nginx -d langflow.your-domain.comتسجيل الدخول وإنشاء أول مسار
افتح
https://langflow.your-domain.comفي متصفّحك. سجّل الدخول بالبيانات المعرّفة فيLANGFLOW_SUPERUSERوLANGFLOW_SUPERUSER_PASSWORD. انقر على New Flow، واختر قالبًا أو ابدأ من لوحة فارغة.تخزين مفاتيح API في المتغيّرات العامة
استخدم المتغيّرات العامة (الأيقونة في أعلى اليمين) لتشفير مفاتيح API وإعادة استخدامها في جميع مساراتك. من قائمة API الخاصة بمسار، تسترجع كود استدعاء
curlأو Python لدمج هذا المسار في تطبيق خارجي.النسخ الاحتياطي للمسارات وقاعدة البيانات
جدوِل
pg_dumpيوميًا لقاعدة البيانات من المضيف:docker exec langflow-postgres-1 pg_dump -U langflow langflow > /opt/backups/langflow-$(date +%F).sql
استدعاء مسار من تطبيق: واجهة REST البرمجية
كل مسار LangFlow متاح عبر نقطة النهاية /api/v1/run/<flow-id>. تجد معرّف المسار في URL المحرر أو في قائمة API الخاصة بالمسار. مثالان عمليان.
باستخدام curl:
curl -s -X POST \
https://langflow.your-domain.com/api/v1/run/YOUR-FLOW-ID \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR-API-KEY" \
-d '{
"input_value": "ما عاصمة فرنسا؟",
"input_type": "chat",
"output_type": "chat"
}'باستخدام Python (مكتبة requests):
import requests
FLOW_ID = "YOUR-FLOW-ID"
BASE_URL = "https://langflow.your-domain.com"
API_KEY = "YOUR-API-KEY"
response = requests.post(
f"{BASE_URL}/api/v1/run/{FLOW_ID}",
headers={
"Content-Type": "application/json",
"x-api-key": API_KEY,
},
json={
"input_value": "ما عاصمة فرنسا؟",
"input_type": "chat",
"output_type": "chat",
},
timeout=60,
)
result = response.json()
print(result["outputs"][0]["outputs"][0]["results"]["message"]["text"])تُولَّد مفتاح API من Settings → API Keys في واجهة LangFlow.
أنبوب RAG: فهرسة مستنداتك والاستعلام عنها
RAG (التوليد المُعزَّز بالاسترجاع) هو حالة الاستخدام الأساسية في LangFlow: تحمّل مستندات (PDF، نص، Markdown)، تقطّعها إلى أجزاء، تضمّنها في قاعدة بيانات شعاعية، ثم يُجيب LLM على الأسئلة مستندًا إلى هذا السياق.
أي VectorStore على خادم VPS؟ على خادم بموارد محدودة، Chroma هو الخيار الأخف: يعمل في نفس حاوية LangFlow دون خدمة إضافية ويُثبّت بياناته في دليل محلي. Qdrant مناسب إذا كانت لديك ذاكرة RAM أكبر وتريد خدمة مخصّصة في حاوية مجاورة.
بناء أنبوب الفهرسة في LangFlow:
1. File (أو Directory) → يحمّل PDF أو مجلد المستندات.
2. Split Text → يقطّع إلى أجزاء (حجم موصى به: 500 إلى 800 رمز، تداخل 50).
3. OpenAI Embeddings (أو Ollama Embeddings للبقاء محليًا بالكامل) → يحوّل كل جزء إلى متّجه.
4. Chroma DB → يخزّن المتّجهات. اضبط حقل Persist Directory على مجلد مثبّت في Docker.
أضف في docker-compose.yml:
langflow:
volumes:
- chromadb:/data/chroma
volumes:
pgdata:
chromadb:ثم عرّف المتغيّر العام CHROMA_PERSIST_DIR بالقيمة /data/chroma في LangFlow.
المكوّنات المخصّصة: توسيع LangFlow بـ Python
يتيح LangFlow إنشاء مكوّنات Python مخصّصة دون نسخ المشروع. المكوّن هو فئة ترث من Component وتُعلن مدخلاتها ومخرجاتها ومنطقها.
مثال بسيط — مكوّن يحوّل النص إلى حروف كبيرة:
from langflow.custom import Component
from langflow.io import MessageTextInput, Output
from langflow.schema import Data
class UpperCaseComponent(Component):
display_name = "Uppercase Text"
description = "تحويل النص إلى حروف كبيرة."
inputs = [
MessageTextInput(
name="input_text",
display_name="نص الإدخال",
)
]
outputs = [
Output(
display_name="النص المعالَج",
name="output_text",
method="process_text",
)
]
def process_text(self) -> Data:
result = self.input_text.strip().upper()
return Data(text=result)لإضافة هذا المكوّن: في واجهة LangFlow، انتقل إلى Settings → Custom Components، الصق الكود واحفظ. يظهر المكوّن فورًا في الشريط الجانبي جاهزًا للسحب إلى أي مسار.
تحديث LangFlow دون فقدان البيانات
يُصدر LangFlow تحديثات منتظمة (فرع 1.x هو فرع الاستقرار النشط في أكتوبر 2026). قبل أي تحديث، احتِط بنسخة احتياطية لقاعدة البيانات:
docker exec langflow-postgres-1 pg_dump -U langflow langflow \
> /opt/backups/langflow-before-update-$(date +%F).sqlثم حدّث الصورة وأعد تشغيل الحزمة:
cd /opt/langflow
docker compose pull
docker compose up -dتابع السجلات للكشف عن أي ترحيلات تلقائية للمخطط:
docker compose logs -f langflowلتثبيت إصدار محدد (موصى به في الإنتاج)، استبدل latest بالوسم المطلوب:
image: langflowai/langflow:1.12.4التهيئة المتقدمة: متغيّرات البيئة المفيدة
LangFlow يكشف عدة متغيّرات بيئة لتكييف النسخة مع سياقك. LANGFLOW_SECRET_KEY يشفّر البيانات الحساسة — غيّر القيمة الافتراضية قبل أول تشغيل. LANGFLOW_AUTO_LOGIN على false يستلزم دائمًا تسجيل دخول صريحًا. LANGFLOW_WORKERS يتحكم في عدد عمليات Uvicorn.
للمسارات التي تستدعي نماذج محلية عبر Ollama، عرّف OLLAMA_BASE_URL في المتغيّرات العامة لـ LangFlow بدلًا من بيئة Docker.
إذا حدّثت LangFlow، فاعمل دائمًا pg_dump قبل docker compose pull && docker compose up -d.
الأمان: لا تكشف LangFlow مباشرةً على الإنترنت
LangFlow لا يملك تحديدًا مدمجًا للطلبات على نقاط نهاية API. أبقِ LANGFLOW_AUTO_LOGIN=false بشكل دائم وأنشئ حسابات مستخدمين مستقلة لكل عضو. إذا كان ينبغي استدعاء مساراتك فقط من تطبيقاتك الخاصة، أضف كتلة auth_basic في nginx أمام واجهة الإدارة.
لا تترك LangFlow أبدًا في الإنتاج مع SQLite: تتلف قاعدة البيانات تحت الوصول المتزامن.
استكشاف الأخطاء الموسّع: الأخطاء الشائعة
خطأ OOM (نفاد الذاكرة). إذا أعادت حاوية LangFlow التشغيل تلقائيًا، ابحث عن Killed في السجلات. قلّل LANGFLOW_WORKERS إلى 1.
RuntimeError: CUDA out of memory. يحدث عندما يحاول مكوّن استخدام GPU غير متاح. أجبر التنفيذ على CPU بإضافة المتغيّر البيئي CUDA_VISIBLE_DEVICES="" لخدمة langflow في docker-compose.yml.
المنفذ 7860 مشغول. إذا فشل docker compose up -d بسبب address already in use، شغّل ss -tlnp | grep 7860 لتحديد العملية المشغِلة وأوقفها، أو غيّر المنفذ في docker-compose.yml.
ImportError: No module named 'torch'. بعض المكوّنات المتقدمة تتطلب مكتبات غير مضمّنة في الصورة الأساسية. أنشئ Dockerfile مشتقًا يثبّت التبعيات المفقودة.
رفض الاتصال بـ Ollama. تحقق أن Ollama يستمع على 0.0.0.0. في docker-compose.yml أضف extra_hosts: ["host-gateway:host-gateway"] لخدمة LangFlow.
لوحة بيضاء أو WebSocket مقطوع. تحقق من أن رأسَي Upgrade وConnection يُمرَّران عبر nginx.
الخطوات التالية: توسيع نسخة LangFlow الخاصة بك
بمجرد تشغيل LangFlow، تتيح عدة تكاملات توسيع نطاق استخدامه.
إذا أردت نموذج LLM محليًا بالكامل، ثبّت Ollama على الخادم VPS نفسه وصِله بـ LangFlow عبر مكوّن Ollama. لـ RAG وثائقي أكثر قوة، انتقل من Chroma إلى Qdrant.
إذا استخدمت الفرق المتعددة النسخة، فكّر في عزل المسارات حسب مساحة العمل أو في نشر نسخة LangFlow واحدة لكل مشروع باستخدام قالب ServOrbit.