[{"data":1,"prerenderedAt":202},["ShallowReactive",2],{"seo-verification":3,"blog-نهاية-دعم-python-3-10-ترقية-تطبيقات-vps-ar":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-نهاية-دعم-python-3-10-ترقية-تطبيقات-vps-ar",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":30,"intro":33,"sections":34,"ctaTitle":147,"ctaBody":148,"ctaButton":149,"ctaUrl":150,"relatedPosts":151},558,"نهاية-دعم-python-3-10-ترقية-تطبيقات-vps",{"fr":12,"en":13,"ar":10,"es":14},"python-3-10-fin-de-vie-migrer-applications-vps","python-3-10-end-of-life-migrate-vps-applications","python-3-10-fin-de-vida-migrar-aplicaciones-vps","نهاية دعم Python 3.10: ترقية تطبيقاتك على VPS","وصل Python 3.10 إلى نهاية دعمه في أكتوبر 2026. انقل تطبيقاتك إلى 3.12 على VPS ببيئة موازية واختبارات وتبديل قابل للتراجع.",9,0,false,"2026-11-01T00:00:00+00:00","2026-11-01T14:14:31+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},4,"التطوير","developpement","bg-warning\u002F10 text-warning","dev",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fpython-3-10-fin-de-vie-migrer-applications-vps-poster.svg","وصل Python 3.10 إلى نهاية دعمه في أكتوبر 2026، ولم تعد تصدر أي إصلاحات أمنية لهذا الفرع. ومع ذلك يواصل تطبيق Django أو FastAPI عمله دون أن تظهر أي إشارة إلى أن المفسّر متجمّد. تتراكم المخاطر بصمت، وتبدو الترقية أثقل مع كل شهر تأخير. إليك طريقة لا تمسّ الوضع القائم: بيئة ثانية بإصدار Python 3.12 بجوار الأولى، وتبعيات مقفلة ومختبرة، ثم تبديل يمكن التراجع عنه بسطر واحد.",[35,39,48,80,83,86,89,114,117,120,129,132,140,144],{"type":36,"title":37,"body":38},"h2","ماذا يغيّر انتهاء دعم Python 3.10","ينشر دليل مطوّري Python جدول كل فرع. وقد صدر Python 3.10 في أكتوبر 2021، وهو مدرج هناك بوصفه منتهي الدعم منذ 1 أكتوبر 2026. عملياً لم يعد الفرع يتلقى أي إصلاح، ولا حتى الأمني منه: أي ثغرة تُكتشف في المفسّر أو في مكتبته القياسية ستبقى مفتوحة.\n\nيستمر الكود في العمل وتنجح الاختبارات، وهذا ما يجعل الوضع مضللاً. نهاية الدعم لا تكسر شيئاً في يومها، لكنها تسحب شبكة الأمان في كل الأيام التالية، بينما تتخلى التوزيعات والصور الأساسية والمكتبات الخارجية عنه تدريجياً.",{"type":40,"title":41,"items":42},"ul","كلفة مفسّر متجمّد",[43,44,45,46,47],"**ثغرات بلا إصلاح** — كل ثغرة في المفسّر تُنشر بعد نهاية الدعم تبقى مفتوحة في فرع 3.10، ولا يغلقها إلا رفع الإصدار.","**تبعيات تبتعد** — سترفع المكتبات عاجلاً أو آجلاً حدها الأدنى لإصدار Python، وينتهي التثبيت الجديد إلى حل إصدارات قديمة أو إلى الفشل.","**صور أساسية متجمّدة** — صورة حاوية مبنية على فرع 3.10 تعتمد على مفسّر بلا إصلاحات من المصدر، وتشير فحوص الثغرات لديك إلى ذلك في كل عملية بناء.","**تدقيقات متعثرة** — المفسّر غير المدعوم خط أحمر في المراجعات الأمنية واستبيانات الموردين لدى عملائك.","**ترقية مفروضة** — من 3.10 إلى 3.12 هناك فارق إصدارين فرعيين؛ وكلما انتظرت طالت قائمة الأعطال، والمشروع المخطط له أقل كلفة من طارئ بعد حادث.",{"type":49,"title":50,"headers":51,"rows":55},"comparison","جدول دعم فروع Python",[52,53,54],"الإصدار","نهاية الدعم","ما يعنيه لخادم VPS لديك",[56,60,64,68,72,76],[57,58,59],"3.9","أكتوبر 2025","خارج الدعم منذ أكثر من سنة: غادره دون انتظار",[61,62,63],"3.10","أكتوبر 2026","خارج الدعم منذ 1 أكتوبر: لا إصلاحات بعد الآن",[65,66,67],"3.11","أكتوبر 2027","حد أدنى: يحل مشكلة اليوم لا مشكلة العام القادم",[69,70,71],"3.12","أكتوبر 2028","الهدف الموصى به: سنتان من الهامش ونظام بيئي راسخ",[73,74,75],"3.13","أكتوبر 2029","مدعوم لفترة أطول؛ اعتمده بعد التحقق من تبعياتك",[77,78,79],"3.14","أكتوبر 2030","أحدث فرع في هذا الجدول وأبعدها نهايةً للدعم",{"type":36,"title":81,"body":82},"أي إصدار مستهدف تختار","Python 3.12 هو الهدف الذي نوصي به لتطبيق قائم: نهاية دعمه مخططة في أكتوبر 2028، أي سنتان من الهامش، وتدعمه الأطر الشائعة. أما Python 3.11 فهو حد أدنى يعيدك إلى الترقية نفسها في أكتوبر 2027.\n\nيحظى Python 3.13 بدعم أطول، حتى أكتوبر 2029. لا نعدّه غير مناسب: هو يفترض فقط أن تنشر كل تبعية من تبعياتك حزماً لهذا الإصدار، وهذا يُتحقق منه في بيئة الاختبار لديك. تذكير من الدليل الرسمي: تواريخ الفروع التي ما زالت نشطة مخططة ويمكن تعديلها، ولا يُعدّ نهائياً إلا تاريخا 3.9 و3.10. أعد قراءة الصفحة قبل تثبيت جدولك.",{"type":36,"title":84,"body":85},"معرفة المفسّر الذي يخدم الإنتاج فعلاً","الأمر `python3 --version` في الطرفية لا يخبرك بالمفسّر الذي يخدم التطبيق. فقد تشغّل الخدمة بيئة افتراضية أُنشئت قبل سنوات، أو Python مبنياً يدوياً، أو صورة مجمّدة في سطر `FROM python:3.10`.\n\nأحصِ كل مصدر: سطر `ExecStart` في وحدة systemd (`systemctl cat myapp`)، ونتيجة `\u002Fsrv\u002Fmyapp\u002Fvenv\u002Fbin\u002Fpython --version`، والأمر `grep -rn \"FROM python\" .` على ملفات Dockerfile، وحقل `requires-python` في `pyproject.toml`، والإصدار المستخدم في CI. دوّن أيضاً العمال والمهام المجدولة: غالباً ما تكون لها بيئتها الخاصة وتبقى على المفسّر القديم زمناً طويلاً بعد الموقع.",{"type":36,"title":87,"body":88},"المتطلبات قبل البدء","لا تحتاج هذه الترقية إلى جهاز خاص، لكنها تتطلب وصولاً كاملاً إلى الخادم ومساحة لبيئتين متجاورتين: تشغل الثانية من القرص ما تشغله الأولى، إضافةً إلى ذاكرة بناء مؤقتة إذا كانت إحدى التبعيات بلا حزمة مبنية مسبقاً.\n\nتحتاج إلى ملف تبعيات مقفل بإصدارات دقيقة، ومجموعة اختبارات تعمل خارج الإنتاج، ونسخة احتياطية حديثة لقاعدة البيانات، وصلاحيات root لتثبيت مترجم وملفات التطوير إن اقتضت ذلك تبعياتك المترجمة. الجولة الأولى على خادم VPS للاختبار، ولو مؤقتاً، أفضل من التجربة على خادم الإنتاج.",{"type":90,"title":91,"steps":92},"steps","الترقية دون انقطاع الخدمة",[93,96,99,102,105,108,111],{"title":94,"body":95},"تجميد الوضع القائم","من البيئة الحالية، صدّر الإصدارات الدقيقة: `\u002Fsrv\u002Fmyapp\u002Fvenv\u002Fbin\u002Fpip freeze > requirements.lock.txt`. يصف هذا الملف بدقة ما يعمل اليوم، وهو نقطة رجوعك. احفظه في نظام الإصدارات قبل المتابعة.",{"title":97,"body":98},"تثبيت Python 3.12 دون المساس بالنظام","الأمر `uv python install 3.12` ينزّل مفسّر 3.12 تديره أداة uv، دون استبدال `python3` الخاص بالتوزيعة الذي تعتمد عليه أدواتها. وإن فضلت حزم توزيعتك، فثبّت فرع 3.12 من مستودع يوفره واستخدم `python3.12 -m venv`.",{"title":100,"body":101},"إنشاء البيئة الثانية بجوار الأولى","الأمر `uv venv --python 3.12 \u002Fsrv\u002Fmyapp\u002Fvenv312` ينشئ البيئة الجديدة؛ وبدون uv يؤدي `python3.12 -m venv \u002Fsrv\u002Fmyapp\u002Fvenv312` العمل نفسه. تواصل القديمة خدمة الحركة: لا شيء يتغير. البيئة الافتراضية لا تُنقل من مكانها، ولهذا تحمل الجديدة اسماً آخر.",{"title":103,"body":104},"إعادة التثبيت من الملف المقفل","الأمر `VIRTUAL_ENV=\u002Fsrv\u002Fmyapp\u002Fvenv312 uv pip sync requirements.lock.txt` يثبّت الإصدارات المدرجة بدقة. وباستخدام pip: `\u002Fsrv\u002Fmyapp\u002Fvenv312\u002Fbin\u002Fpip install -r requirements.lock.txt`. وإذا لم يوجد إصدار مثبّت لـ 3.12 أو تعذّر بناؤه، يتوقف التثبيت هنا: وهذا هو المطلوب، فتكتشف العطل قبل الإنتاج. دوّن كل حزمة تحتاج إلى رفع.",{"title":106,"body":107},"إعادة تشغيل الاختبارات","شغّل الاختبارات بالمفسّر الجديد: `\u002Fsrv\u002Fmyapp\u002Fvenv312\u002Fbin\u002Fpython -m pytest`، أو `\u002Fsrv\u002Fmyapp\u002Fvenv312\u002Fbin\u002Fpython manage.py test` مع Django مسبوقاً بـ `manage.py check`. اقرأ ملخص تحذيرات الإهمال: فهي تنبئ بأعطال الإصدار التالي. يجب أن تنجح الاختبارات بالمفسّرين معاً قبل المتابعة.",{"title":109,"body":110},"رفع ما تعطّل فقط","دوّن الحزم المسببة، وارفعها واحدة واحدة، ثم أعد توليد الملف المقفل من البيئة الجديدة: `\u002Fsrv\u002Fmyapp\u002Fvenv312\u002Fbin\u002Fpip freeze > requirements.312.txt`. احتفظ بالقائمتين، واحدة لكل مفسّر، طوال فترة التبديل.",{"title":112,"body":113},"تشغيل التطبيق بالتوازي على منفذ محلي","شغّله بالبيئة الجديدة على منفذ حر، مثلاً `\u002Fsrv\u002Fmyapp\u002Fvenv312\u002Fbin\u002Fgunicorn myapp.wsgi --bind 127.0.0.1:8001` (أو `uvicorn` مع FastAPI). أرسل إليه طلبات حقيقية بواسطة `curl`: الصفحة الرئيسية، تسجيل الدخول، عملية كتابة في قاعدة البيانات. تبقى الحركة العامة على العملية القديمة، ولا يبرر الانتقال إلى التبديل إلا نتيجة مطابقة.",{"type":36,"title":115,"body":116},"التبديل والتراجع بسطر واحد","يجب ألا يغيّر التبديل سوى مسار واحد. اجعل وحدة systemd تشير إلى رابط لا إلى البيئة نفسها: `ExecStart=\u002Fsrv\u002Fmyapp\u002Fvenv-active\u002Fbin\u002Fgunicorn myapp.wsgi --bind 127.0.0.1:8000`. أنشئ أولاً الرابط إلى الحالة الراهنة بالأمر `ln -sfn \u002Fsrv\u002Fmyapp\u002Fvenv \u002Fsrv\u002Fmyapp\u002Fvenv-active`، ثم `systemctl daemon-reload` وإعادة تشغيل لا تغيّر شيئاً.\n\nيصبح التبديل إلى 3.12 عندئذ `ln -sfn \u002Fsrv\u002Fmyapp\u002Fvenv312 \u002Fsrv\u002Fmyapp\u002Fvenv-active && systemctl restart myapp`، ويكون التراجع هو السطر نفسه بالمسار القديم. أما التطبيق داخل حاوية فالرافعة هي الصورة الأساسية: انتقل من `FROM python:3.10-slim` إلى `FROM python:3.12-slim`، وأعد البناء بالأمر `docker compose up -d --build`، وتراجع بإعادة السطر السابق.\n\nفي الحالتين احتفظ بالبيئة أو الصورة القديمة أياماً، وتابع السجلات بالأمر `journalctl -u myapp -f` خلال الساعة الأولى.",{"type":36,"title":118,"body":119},"نقاط العطل التي يجب فحصها","بين 3.10 و3.12 نادراً ما ينشأ العطل من كودك، وهو ينشأ دائماً تقريباً مما يحيط به. ثلاث عائلات تتكرر: الوحدات المحذوفة من المكتبة القياسية، والتبعيات المترجمة، والحد الأدنى لإصدار أطرك. تسرد ملاحظات إصدار Python 3.12 ما يختفي؛ اقرأها وملفك المقفل مفتوح بجانبها.",{"type":40,"title":121,"items":122},"قائمة تحقق قبل التبديل",[123,124,125,126,127,128],"**وحدات محذوفة** — يحذف Python 3.12 الوحدات `distutils` و`asynchat` و`asyncore` و`imp`؛ الأمر `grep -rnE \"distutils|asyncore|asynchat|import imp\" .` يكشف استخداماتك المباشرة، وقائمة تبعياتك تكشف غير المباشرة.","**setuptools لم يعد مثبتاً مسبقاً** — لا تضمّنه البيئات التي ينشئها `venv` في 3.12؛ والحزمة التي تستورد `pkg_resources` دون أن تعلنه تفشل ما لم تنفذ `pip install setuptools`.","**حزم مبنية مسبقاً** — يجب أن تنشر التبعيات المترجمة (مشغلات قواعد البيانات، معالجة الصور، التشفير) حزمة لـ 3.12؛ والأمر `pip install --only-binary=:all: -r requirements.lock.txt` يفشل سريعاً بدل أن يبدأ عملية بناء.","**الحد الأدنى لإصدارات الأطر** — لا يدعم Django 4.2 بايثون 3.12 إلا ابتداءً من 4.2.8، ويقبله Django 5.0 وما بعده؛ أما FastAPI فأعد قراءة تصنيفات Python للإصدار الدقيق الذي تثبّته.","**تحذيرات الإهمال** — الدالتان `datetime.utcnow()` و`datetime.utcfromtimestamp()` مهملتان في 3.12؛ استبدل بهما `datetime.now(datetime.UTC)` و`datetime.fromtimestamp(ts, datetime.UTC)`.","**مكتبات النظام المشتركة** — تعزل البيئة الموازية حزم Python لا مكتبات نظام التشغيل (عميل PostgreSQL مثلاً): دوّنها، فقد يغيّرها تحديث النظام من تحت قدميك.",{"type":36,"title":130,"body":131},"استكشاف الأخطاء: الأعطال التي تتكرر","تظهر هذه الرسائل منذ أول تشغيل للاختبارات على Python 3.12. لكل منها سبب معروف وعلاج قصير.",{"type":40,"title":133,"items":134},"الرسالة الملاحظة وعلاجها",[135,136,137,138,139],"**ModuleNotFoundError: No module named 'distutils'** — غادرت الوحدة المكتبة القياسية. ثبّت `setuptools` في البيئة فهو ما زال يوفر نسخة منها، ثم ارفع التبعية المتسببة.","**ModuleNotFoundError: No module named 'imp'** — حُذفت `imp` وحلّت محلها `importlib`. إن جاء الاستيراد من حزمة خارجية فارفع تلك الحزمة إلى إصدار لم يعد يستخدمها.","**ModuleNotFoundError: No module named 'pkg_resources'** — لم يعد setuptools يُثبَّت تلقائياً في بيئات venv الخاصة بـ 3.12. الأمر `pip install setuptools` يعيد الوحدة ريثما تستغني عنها الحزمة المتسببة.","**DeprecationWarning: datetime.datetime.utcnow() is deprecated** — ليس خطأ بل إشارة: استبدل الاستدعاء بكائن مدرك للمنطقة الزمنية.","**Failed building wheel for \u003Cpackage>** — لا تملك هذه الحزمة إصداراً مبنياً مسبقاً لـ 3.12 ويحاول pip بناءها. ارفعها، أو ثبّت المترجم وملفات التطوير إن تعذّر الرفع.",{"type":141,"title":142,"body":143},"tip","ثبّت الهدف ولا تكتفِ بالترقية","اغتنم الترقية لتثبيت المفسّر بدل أن تتحمله: `requires-python = \">=3.12\"` في `pyproject.toml`، ووسم صورة دقيق بدل `python:3`، وإصدار Python في مصفوفة CI. أضف 3.13 إلى المصفوفة بغرض المراقبة فقط: ستعرف مسبقاً هل ستكون الترقية القادمة سهلة.",{"type":36,"title":145,"body":146},"جعل رفع الإصدار عادة مألوفة","ينتهي دعم فرع من Python كل عام في أكتوبر. الطريقة الموصوفة هنا (بيئة موازية، ملف مقفل، اختبارات، تبديل قابل للتراجع) لا تتعلق بإصدار بعينه: تُعاد كما هي مع 3.11 في أكتوبر 2027 ومع 3.12 في أكتوبر 2028، بحسب الجدول الحالي.\n\nإن لم يكن تطبيقك بعد على خادم تتحكم في مفسّره، فإن دليلنا لنشر Django على VPS يغطي النشر الأول. وتتبع أدلتنا حول نهاية دعم Node.js وPHP المنطق نفسه لبقية بيئات التشغيل في أسطولك.","خادم لاختبار الإصدار التالي قبل التبديل","يتيح لك VPS بصلاحيات root إنشاء بيئة Python ثانية بجوار الأولى والتحقق من الاختبارات ثم التبديل. اختيار نظام التشغيل حر والقدرة تزداد عمودياً؛ ويتولى خيار إدارة VPS المهمة إن لم ترغب في إدارة الخادم بنفسك.","قارن بين خوادم VPS","\u002Fvps-cloud",[152,169,185],{"id":153,"slug":154,"slugs":155,"title":159,"excerpt":160,"readTime":161,"views":162,"isPinned":19,"publishedAt":163,"updatedAt":164,"category":165,"categories":166,"featuredImage":30,"bgImage":31,"posterImage":168,"relatedSolution":30},223,"نهاية-دعم-nodejs-20-ترحيل-خادم-vps",{"fr":156,"en":157,"ar":154,"es":158},"nodejs-20-fin-de-vie-migrer-vps","nodejs-20-end-of-life-migrating-your-vps","nodejs-20-fin-de-vida-migrar-vps","نهاية دعم Node.js 20: ترحيل خادم VPS","لا يتلقى Node.js 20 أي تصحيح أمني منذ 30 أبريل 2026. كيف تراجع خوادمك وترحّل إلى Node.js 24 دون تعطيل الإنتاج.",5,2,"2026-08-05T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[167],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fnodejs-20-fin-de-vie-migrer-vps-poster.svg",{"id":170,"slug":171,"slugs":172,"title":176,"excerpt":177,"readTime":178,"views":179,"isPinned":19,"publishedAt":180,"updatedAt":164,"category":181,"categories":182,"featuredImage":30,"bgImage":31,"posterImage":184,"relatedSolution":30},206,"نهاية-دعم-php-82-دليل-الترحيل",{"fr":173,"en":174,"ar":171,"es":175},"php-82-fin-de-vie-checklist-migration","php-82-end-of-life-planning-your-migration","php-82-fin-de-vida-planificar-la-migracion","نهاية دعم PHP 8.2 : قائمة التحقق للترحيل","يبلغ PHP 8.2 نهاية دورة حياته في 31 ديسمبر 2026. جرد بيئاتك، قارن الإصدارات، واتبع قائمة تحقق مفصّلة للترحيل إلى PHP 8.3 أو 8.4.",11,7,"2026-08-01T00:00:00+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[183],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fphp-82-fin-de-vie-checklist-migration-poster.svg",{"id":186,"slug":187,"slugs":188,"title":192,"excerpt":193,"readTime":194,"views":179,"isPinned":19,"publishedAt":195,"updatedAt":164,"category":196,"categories":197,"featuredImage":30,"bgImage":31,"posterImage":199,"relatedSolution":200},44,"نشر-تطبيق-django-على-vps",{"fr":189,"en":190,"ar":187,"es":191},"deployer-django-vps","deploy-a-django-application-on-a-vps","desplegar-una-aplicacion-django-en-un-vps","نشر تطبيق Django على VPS","انشر Django على VPS: Gunicorn وNginx وPostgreSQL وDocker وSSL. دليل كامل لمطوّري Python الراغبين في الاستضافة الذاتية.",3,"2026-05-07T00:00:00+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[198],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fdeployer-django-vps-poster.svg",{"categorySlug":24,"appSlug":201},"django",1793542806590]