أنظمة 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")
في القسم التالي، سنضيف المراقبة والملاحظة. :::