أنظمة MCP الإنتاجية

استراتيجيات النشر

5 دقيقة للقراءة

لنشر خادم MCP قيد لا تشترك فيه معظم الخدمات: المستدعي نموذج في وسط محادثة، وهناك مستخدم ينتظر. فالبدء البارد الذي لا يُلاحظ في مهمة خلفية يصير هنا توقفاً مرئياً.

اختيار مكان التشغيل

أين ينبغي أن يعمل هذا الخادم؟

هل يحتاج أحد غيرك للوصول إليه؟

نشر Docker

أنشئ Dockerfile جاهز للإنتاج:

FROM python:3.11-slim

WORKDIR /app

# تثبيت التبعيات
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# نسخ التطبيق
COPY . .

# التشغيل بإعدادات الإنتاج
ENV PYTHONUNBUFFERED=1
EXPOSE 8000

CMD ["uvicorn", "server:app", "--host", "0.0.0.0", "--port", "8000"]

ثبّت صورة الأساس على إصدار محدد بدل latest — فالخادم الذي يغيّر إصدار بيئة تشغيله بصمت بين نشرتين يتحول إلى جلسة تصحيح لا يستمتع بها أحد. والوسم أعلاه مثال لا توصية: راجع وسوم صورة Python الرسمية للإصدارات المدعومة حالياً، وطبّق القاعدة نفسها على كل صورة مثبّتة أخرى في منظومتك.

البناء والتشغيل:

docker build -t my-mcp-server .
docker run -p 8000:8000 -e API_KEY=secret my-mcp-server

Docker Compose للتطوير

# No top-level `version:` key — it has been ignored since Compose v2 and
# current versions warn that it is obsolete.
services:
  mcp-server:
    build: .
    ports:
      - "8000:8000"
    environment:
      - DATABASE_URL=postgresql://db:5432/mcp
      - API_KEY=${API_KEY}
    depends_on:
      - db

  db:
    image: postgres:15
    environment:
      - POSTGRES_DB=mcp
      - POSTGRES_PASSWORD=secret
    volumes:
      - pgdata:/var/lib/postgresql/data

volumes:
  pgdata:

النشر السحابي

AWS Lambda (بدون خادم)

from mangum import Mangum
from server import app

# تغليف تطبيق Starlette لـ Lambda
handler = Mangum(app)

Railway/Fly.io

هذه المنصات تكتشف تطبيقات Python تلقائياً:

# fly.toml
app = "my-mcp-server"

[http_service]
  internal_port = 8000
  force_https = true

[env]
  PORT = "8000"

تكوين البيئة

لا تكتب الأسرار في الكود أبداً:

import os

class Config:
    SECRET_KEY = os.environ["SECRET_KEY"]
    DATABASE_URL = os.environ.get("DATABASE_URL", "sqlite:///local.db")
    DEBUG = os.environ.get("DEBUG", "false").lower() == "true"
    LOG_LEVEL = os.environ.get("LOG_LEVEL", "INFO")

في القسم التالي، سنضيف المراقبة والملاحظة. :::

اختبار

اختبار الوحدة 5: أنظمة MCP الإنتاجية

خذ الاختبار
هل كان هذا الدرس مفيدًا؟

سجّل الدخول للتقييم