الانتقال إلى المحتوى

البحث في الوثائق

اكتب للبحث في كل صفحات الوثائق.

قائمة الوثائق
كيفيةالجمهور المستهدف · المشغّلون وفرق DevOps

النشر

من حزمة Compose محلية إلى Kubernetes في بيئة الإنتاج

تمت ترجمة هذه الصفحة آليًا من الإنجليزية. وفي حال وجود أي اختلاف، يُعتد بالنص الأصلي.قراءة النص الأصلي بالإنجليزية

نموذجا النشر

النموذج ما تحصل عليه إلى أين تتجه
Docker Compose التطبيق المرجعي مع المجموعة الكاملة من التبعيات، على جهازك، خلال دقائق دليل المطوّر — تشغيل التطبيق
Kubernetes (Terraform + Helm) نشر مرجعي لبيئة الإنتاج: المشغّلات (operators)، وقواعد البيانات، والمصادقة، والأسرار، وقابلية المراقبة، وكل ما يلزم هذه الصفحة

محلياً: Docker Compose

يأتي مستودع الإطار مع حزمتين كاملتين — التطبيق، وPostgreSQL (مع pgvector)، وRedis، وVault، وحزمة لقابلية المراقبة:

docker compose -f compose-grafana.yml up --build      # Grafana stack
docker compose -f compose-opensearch.yml up --build   # OpenSearch Dashboards stack

تحصل المشاريع المُولَّدة على ملف compose.yml خاص بها (app + postgres + redis + vault) — راجع وكيلك الأول.

الإنتاج: Kubernetes مع Terraform

يوفّر Agent-Lab سكربتات Terraform تنشر التطبيق وتبعياته على Kubernetes. يستخدم هذا الشرح عنقود Minikube لأغراض مرجعية — استخدم عنقوداً جاهزاً للإنتاج في عمليات النشر الفعلية.

المتطلبات الأساسية

إعداد عنقود Kubernetes

Minikube (Linux) — خصّص موارد كافية (فالحزمة المرجعية كثيفة الاستهلاك):

minikube start --memory=20g --cpus=4

احصل على عنوان IP للعنقود واربط نطاقات الخدمات به:

minikube ip
# 192.168.49.2
192.168.49.2 vault.my-domain.com kibana.my-domain.com elasticsearch.my-domain.com agent-lab.my-domain.com litellm.my-domain.com

Docker Desktop (Mac / Windows) — فعّل Kubernetes المضمّن:

تفعيل Kubernetes


مع Docker Desktop، تُحَلّ النطاقات عبر localhost:

127.0.0.1 vault.my-domain.com kibana.my-domain.com elasticsearch.my-domain.com agent-lab.my-domain.com litellm.my-domain.com

تجهيز التبعيات

توجد كل الوحدات أدناه في terraform/ — طبّقها باستخدام terraform init && terraform apply في كل مجلد، بهذا الترتيب:

الوحدة ما تجهّزه
01_traefik/ وحدة التحكم في الدخول Traefik
02_cert-manager/ cert-manager لـ TLS
03_cert-cluster-issuer/ ClusterIssuer الإنتاجي من Let's Encrypt
04_redis-operator/ مشغّل Redis (تحديثات الحالة عبر pub/sub)
05_postgres-operator/ مشغّل PostgreSQL — ثلاث قواعد بيانات: علائقية، وpgvector، ونقاط الحفظ
06_keycloak-operator/ مشغّل Keycloak
08_vault-instance/ Vault للأسرار

نسخة Keycloak (09_keycloak-instance/)، ثم احصل على كلمة مرور المسؤول:

echo "$(kubectl --namespace keycloak get secret/keycloak-initial-admin -o go-template='{{index .data "password" | base64decode}}')"

اضبط اتصال OIDC وفق المصادقة باستخدام Keycloak، أو دع الوحدة 12_agent-lab-auth-realm/ تتولى ذلك (أدناه).

تهيئة Vault (بعد تطبيق 08_vault-instance/) — نفّذ التهيئة وفك الختم (unseal):

kubectl --namespace vault exec vault-0 -- vault operator init \
    -key-shares=1 \
    -key-threshold=1 \
    -format=json > cluster-keys.json

export VAULT_UNSEAL_KEY=$(jq -r ".unseal_keys_b64[]" cluster-keys.json)
kubectl --namespace vault exec vault-0 -- vault operator unseal $VAULT_UNSEAL_KEY

قابلية المراقبة (اختيارية لكن يُوصى بها) — منصات قابلية مراقبة LLM التي تستخدمها حزمة المحاكاة والواجهات الخلفية للتتبّع:

الوحدة ما تجهّزه
13_langfuse-instance/ Langfuse — تتبّعات LLM وتجارب المحاكاة
14_langwatch-instance/ LangWatch — المحاكاة ولوحات المعلومات
07_elastic-operator/ + 10_elastic-instance/ ECK (Elastic) للسجلات وAPM

استرجع بيانات اعتماد Elastic:

echo "$(kubectl --namespace elastic get secret elasticsearch-es-elastic-user -o=jsonpath='{.data.elastic}' | base64 --decode)"

echo "$(kubectl --namespace elastic get secret/elastic-eck-apm-server-apm-token \
    -o go-template='{{index .data "secret-token" | base64decode}}')"

OpenTelemetry Collector (11_otel-instance/) — نقطة نهاية OTLP التي يصدّر التطبيق إليها (قابلية المراقبة).

بوابة LiteLLM (17_litellm-instance/) — بوابة LLM ذاتية الاستضافة متوافقة مع OpenAI، مع مفاتيح افتراضية وتتبّع للإنفاق وواجهة إدارة (/ui):

echo "$(kubectl --namespace litellm get secret/litellm-masterkey -o go-template='{{index .data "masterkey" | base64decode}}')"

curl -s https://<litellm_fqdn>/health/readiness

نشر Agent-Lab

تربط ثلاث وحدات كل شيء معاً:

الوحدة ما تضبطه
12_agent-lab-auth-realm/ الـ realm والعميل وحساب الخدمة في Keycloak للتطبيق
15_agent-lab-dependencies/ ربط تبعيات وقت التشغيل (قواعد البيانات، والوسيط، ومفاتيح LANGFUSE_*، …)
16_agent-lab-instance/ تطبيق Agent-Lab نفسه
cd terraform/12_agent-lab-auth-realm/ && terraform init && terraform apply
cd terraform/15_agent-lab-dependencies/ && terraform init && terraform apply
cd terraform/16_agent-lab-instance/ && terraform init && terraform apply

مثال على النشر


ملاحظة حول الأسرار: يقرأ النشر إعداداته من Vault عند بدء التشغيل (secret/app_secrets) — ومفاتيح الحمولة مدرجة في مرجع الإعدادات.

مخطط Helm

يأتي المستودع أيضاً مع مخطط Helm باسم charts/agent-lab، يحزم نشر التطبيق مع الحاويات المرافقة (sidecars): Chrome بلا واجهة (CDP) لوكلاء الويب، وHPA، والدخول (ingress)، والإعدادات، وحساب الخدمة. استخدمه عندما تكون لديك تبعياتك الخاصة قيد التشغيل مسبقاً وتريد تثبيت التطبيق فقط.

قائمة التحقق

قبل اعتبار العمل منجزاً، تحقّق مما يلي:

  • يُرجع GET /status/liveness وGET /status/readiness الرمز 200
  • يُعرض GET /docs ويستجيب GET /agents/list (مع رمز مميز عند تفعيل المصادقة)
  • تصل التتبّعات إلى نقطة نهاية OTLP الخاصة بك (راجع قابلية المراقبة)
  • يحتوي Vault على secret/app_secrets مع جميع مفاتيح الحمولة
  • يحتوي الـ realm في Keycloak على عميل وحساب خدمة