نشر PHP على Kubernetes: دليل أساسي للمبتدئين

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

نشر PHP على Kubernetes: دليل أساسي للمبتدئين

\n\n

أصبح Kubernetes (K8s) المعيار الفعلي لتنسيق الحاويات. إذا كنت مطور PHP، فستواجه عاجلاً أم آجلاً الحاجة إلى نشر تطبيقك في عنقود. في هذا الدليل، سنشرح كيفية تحويل تطبيق PHP عادي إلى خدمة متكاملة تعمل تحت إدارة Kubernetes. ستتعلم كيفية تحضير صورة Docker، كتابة المانيفستات، وتشغيل كل ذلك في عنقود محلي (مثل Minikube).

\n\n

سنستخدم التركيبة الكلاسيكية: PHP-FPM لمعالجة نصوص PHP و NGINX كخادم ويب. سيسمح لنا ذلك بتحقيق أداء عالٍ ومرونة.

\n\n

1. تحضير تطبيق PHP وصورة Docker

\n\n

الخطوة الأولى هي حزم كود PHP الخاص بك في حاوية Docker. سننشئ صورتين: واحدة لـ PHP-FPM، والثانية لـ NGINX (أو استخدام صورة واحدة مع مشرف، ولكن للمبتدئين من الأسهل الفصل بينهما).

\n\n

أنشئ ملف Dockerfile لـ PHP-FPM:

\n\n
FROM php:8.2-fpm-alpine\n\n# تثبيت الإضافات\nRUN docker-php-ext-install pdo_mysql mysqli opcache\n\n# نسخ كود التطبيق\nCOPY . /var/www/html\n\n# إعدادات PHP\nCOPY php.ini /usr/local/etc/php/conf.d/custom.ini\n\nWORKDIR /var/www/html\n\nEXPOSE 9000\nCMD ["php-fpm"]
\n\n

لـ NGINX، أنشئ Dockerfile منفصل:

\n\n
FROM nginx:alpine\n\n# نسخ الإعدادات\nCOPY nginx.conf /etc/nginx/nginx.conf\nCOPY default.conf /etc/nginx/conf.d/default.conf\n\n# الملفات الثابتة (إن وجدت)\nCOPY public/ /var/www/html/public/\n\nEXPOSE 80\nCMD ["nginx", "-g", "daemon off;"]
\n\n

لا تنس ملف default.conf لـ NGINX الذي يقوم بتوجيه الطلبات إلى PHP-FPM:

\n\n
server {\n    listen 80;\n    server_name _;\n    root /var/www/html/public;\n    index index.php;\n\n    location / {\n        try_files $uri $uri/ /index.php?$args;\n    }\n\n    location ~ \\.php$ {\n        fastcgi_pass php-service:9000;  # اسم الخدمة في K8s\n        fastcgi_index index.php;\n        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n        include fastcgi_params;\n    }\n}
\n\n

قم ببناء الصور باستخدام الأمر:

\n\n
docker build -t my-php-app:latest -f Dockerfile.php .\ndocker build -t my-nginx:latest -f Dockerfile.nginx .
\n\n

2. أساسيات Kubernetes: Pods و Deployments و Services

\n\n

قبل كتابة المانيفستات، دعنا نفهم الكائنات الأساسية في K8s:

\n\n
    \n
  • Pod — أصغر وحدة نشر، تحتوي على حاوية واحدة أو أكثر.
  • \n
  • Deployment — يدير نسخ Pods، ويوفر التحديثات والتراجع.
  • \n
  • Service — نقطة وصول ثابتة إلى Pods (داخل العنقود أو خارجه).
  • \n
\n\n

لتطبيق PHP الخاص بنا، سننشئ اثنين من Deployments: واحد لـ PHP-FPM والثاني لـ NGINX. ثم سنربطهما عبر Service داخلي.

\n\n

3. كتابة المانيفستات لـ PHP و NGINX

\n\n

أنشئ ملف php-deployment.yaml:

\n\n
apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: php-app\nspec:\n  replicas: 2\n  selector:\n    matchLabels:\n      app: php-app\n  template:\n    metadata:\n      labels:\n        app: php-app\n    spec:\n      containers:\n      - name: php-fpm\n        image: my-php-app:latest\n        ports:\n        - containerPort: 9000\n        env:\n        - name: DB_HOST\n          value: "mysql-service"  # مثال لمتغير بيئة\n        - name: DB_NAME\n          value: "mydb"\n        resources:\n          requests:\n            memory: "128Mi"\n            cpu: "250m"\n          limits:\n            memory: "256Mi"\n            cpu: "500m"\n---\napiVersion: v1\nkind: Service\nmetadata:\n  name: php-service\nspec:\n  selector:\n    app: php-app\n  ports:\n  - protocol: TCP\n    port: 9000\n    targetPort: 9000
\n\n

الآن قم بإنشا

المدونات

توصيات الكتب