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

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

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

نقل خادم MCP الخاص بك إلى الإنتاج يتطلب تخطيطاً دقيقاً. دعنا نستكشف خيارات النشر.

خيارات النشر

الخيار المزايا العيوب
Docker محمول، معزول حمل الحاويات
Serverless توسع تلقائي، دفع حسب الاستخدام بدء بارد، قيود
Kubernetes قابل للتوسع بدرجة عالية إعداد معقد
VM/VPS تحكم كامل توسع يدوي

نشر 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"]

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

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

Docker Compose للتطوير

version: "3.8"
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 الإنتاجية

خذ الاختبار