تخطَّ إلى المحتوى الرئيسي
خصم ٥٠٪ جميع الخطط، لفترة محدودة. تبدأ من $2.48/mo
17 min left
أدوات المطورين وDevOps

كيف تنشر تطبيقات localhost للعموم بدون VPS

B بواسطة Bill 17 دقيقة قراءة
بطاقة عنوان «نشر localhost للعموم بدون VPS»: تطبيق محلي على حاسوب محمول يتفرّع عبر نفق إلى هاتف ونافذة متصفح وشبكة منزلية

تطبيقك يعمل. شغّلت خادم التطوير، وفتحت http://localhost:3000، وهو يؤدي ما يُفترض به. ثم يطلب منك أحدهم رابطًا، فتكتشف أن العنوان الظاهر على شاشتك لا يعني شيئًا لأي شخص سواك.

هناك ثلاث طرق لمنح تطبيق localhost عنوان URL عامًا بدون VPS، إضافة إلى خيار أسرع عندما يكون الطرف الآخر على شبكتك المحلية، والاختيار بينها ليس مسألة أدوات. إنها مسألة المدة التي يجب أن يبقى فيها التطبيق متاحًا، وما إذا كان يمكن تشغيله في مكان آخر غير حاسوبك المحمول. فيما يلي كل مسار، والأمر الذي يمنحك عنوان URL، والسبب الدقيق الذي سيجعل ذلك العنوان يتوقف عن العمل.

الخلاصة السريعة

  • شخص على شبكة Wi-Fi الخاصة بك يحتاج إلى رؤيته: اربط خادم التطوير بجميع واجهات الشبكة وسلّم عنوان IP الخاص بك في الشبكة المحلية. جاهز في ثوانٍ، وميت لحظة مغادرة زائرك لشبكتك.
  • تحتاج إلى رابط يستطيع أي شخص فتحه خلال الساعة القادمة: شغّل نفقًا (cloudflared، ngrok، localtunnel، localhost.run). عنوان HTTPS عام خلال دقيقة تقريبًا، بلا تغييرات في الراوتر، ويموت مع العملية التي بدأته.
  • يجب أن يبقى يعمل بينما حاسوبك المحمول مغلق: ادفع التطبيق إلى باقة استضافة مجانية. هذا يفصل التطبيق عن حاسوبك المحمول ويُدخل قواعد جديدة حول بطاقات الائتمان والاستخدام التجاري وما إذا كانت بياناتك ستبقى بعد إعادة التشغيل.
  • تطبيقك لا يحتاج إلى كود خادم وقت الطلب: ابنِه وضع المخرجات الثابتة على مضيف ثابت. يمكنه البقاء متصلًا بدون حاسوبك المحمول وليس فيه عملية تطبيق تحتاج إلى إيقاظ، ما دام حساب المضيف وحدود استخدامه مناسبة.
  • إعداد افتراضي واحد يستحق المعرفة: next dev و python -m http.server يستمعان بالفعل على جميع واجهات الشبكة بدون أي خيار إضافي. إذا كنت تفترض أن خادم التطوير الخاص بك خاص بحاسوبك المحمول فقط، فهو ليس كذلك.

أي مسار يناسب تطبيقك

مخطط قرار من تطبيقك المحلي إلى أحد أربعة مسارات: LAN فقط، أو نفق عام، أو مضيف تطبيقات، أو بناء ثابت، مع وقت الإعداد، وما إذا كان يمكن إيقاف الحاسوب المحمول، وأفضل استخدام لكل مسار

ثلاثة من هذه المسارات الأربعة تمنح تطبيقك عنوان URL عامًا على الإنترنت؛ أما الأول فلا يصل إلا إلى شبكتك، ما يجعله الأسرع والأكثر محدودية في آن واحد. رتّبها حسب المدة التي يجب أن يبقى فيها عنوان URL حيًا، وسيكاد الاختيار يتحدد من تلقاء نفسه.

الطريقالوقت للحصول على عنوان URLمدة البقاءما الذي يُنهيهلمن هو
الشبكة نفسهاثوانٍما دمتما على الشبكةزائرك ينتقل إلى شبكة Wi-Fi مختلفةزميل على المكتب المجاور، أو هاتفك أنت
نفقدقيقة تقريبًاما دامت العملية تعملإغلاق الحاسوب المحمول، أو إنهاء الطرفية، أو بلوغ حدود الباقةعرض توضيحي، أو جولة مع عميل، أو اختبار webhook
باقة استضافة مجانية10 إلى 30 دقيقةإلى أجل غير مسمى، بشروطالإيقاف عند الخمول، أو نظام ملفات مؤقت، أو شروط الباقةشيء يجب أن يستجيب بينما أنت نائم
بناء ثابت10 إلى 20 دقيقةإلى أجل غير مسمىالحاجة إلى كود على جانب الخادم وقت الطلبالتطبيقات التي يمكن توليدها بالكامل وقت البناء أو تشغيلها على جانب العميل

الصفوف المتاحة لك تعتمد على ثلاثة أمور يمكنك التحقق منها داخل مشروعك:

  • هل يحتاج التطبيق إلى تشغيل كود الخادم الخاص بك وقت الطلب؟ مسار Flask أو FastAPI، أو نقطة نهاية في server.js ، أو أي منطق خادم خاص بكل طلب، يحتاج إلى مضيف على جانب الخادم. كود الخادم وقت البناء لا يستبعد النشر الثابت تلقائيًا: يمكن لمكونات Server Components في Next.js أن تعمل أثناء next build، ويمكن لمعالجات GET Route Handlers الثابتة أن تُعرض مسبقًا. إذا أمكن تقديم كل طلب وقت التشغيل كأصول ثابتة أو إرساله مباشرة من المتصفح إلى API خارجي، فالمسار الثابت ما يزال مفتوحًا.
  • هل يقرأ أو يكتب ملفًا يحتاج إلى الاحتفاظ به؟ ملف قاعدة بيانات (.db, .sqlite)، أو مجلد رفع، أو ملف JSON يعدّله. إن كان الجواب نعم، فتحقق من نموذج التخزين لدى المضيف قبل النشر. خدمات الويب المجانية في Render والنسخ المجانية في Koyeb تستخدم تخزينًا محليًا مؤقتًا، بينما تملك Vercel Functions نظام ملفات للقراءة فقط مع مساحة /tmp مؤقتة. ضع الحالة الدائمة في وحدة تخزين دائمة أو قاعدة بيانات أو تخزين كائنات بدلًا من افتراض أن القرص المحلي للتطبيق سيبقى.
  • هل يحتاج إلى سر وقت التشغيل؟ مفتاح في ملف .env يعمل دون تغيير في المسارين الأولين، لأن التطبيق ما يزال يعمل على جهازك. أما في المسارين الآخرين فتعيد إدخاله في إعدادات البيئة لدى المزود، ويجب ألا يكون موجودًا في المستودع الذي تدفعه.

شاركه على شبكتك الخاصة

next dev يستمع بالفعل على كل واجهات الشبكة في جهازك (هذا كل ما يعنيه 0.0.0.0 حين تراه)، وكذلك يفعل python -m http.server. لا يحتاج أي منهما إلى خيار إضافي، لذا فإن خادم التطوير الذي يعمل لديك الآن يمكن الوصول إليه على الأرجح من هاتفك على شبكة Wi-Fi نفسها.

توثّق Next.js الخيار -H كطريقة لتغيير اسم المضيف، مع قيمة افتراضية هي 0.0.0.0، وتقول وثائق Python إن الوحدة ترتبط بجميع الواجهات ما لم تمرر --bind 127.0.0.1. هذا يجعلها أسرع طريقة لمشاركة تطبيق localhost: بلا حساب، بلا تثبيت، بلا نشر. أما خوادم التطوير الشائعة الأخرى فيجب إخبارها بذلك صراحة.

# Already listening on all interfaces. Nothing to add.
next dev
python -m http.server 8000
streamlit run app.py

# Needs the flag.
npm run dev -- --host             # Vite
flask run --host=0.0.0.0
uvicorn main:app --host 0.0.0.0   # FastAPI

وثائق Vite: server.host قيمته الافتراضية هي localhost، وأنه يقبل --host في سطر الأوامر أو server.host: '0.0.0.0' في ملف الإعدادات. القيمة الافتراضية في Uvicorn هي 127.0.0.1، وهذا يشمل FastAPI لأنه ما يشغّله. أما Streamlit فيترك server.address غير مضبوط، ويشير مرجع الإعدادات الخاص به إلى أن ضبطه يقيّد الوصول إلى ذلك العنوان وحده: غير مضبوط يعني بلا قيود.

ثم تحتاج إلى العنوان الذي ستسلّمه. إنه عنوان IP الخاص بجهازك على الشبكة المحلية، وليس localhost:

# macOS
ipconfig getifaddr en0

# Linux
hostname -I

# Windows (PowerShell)
ipconfig | findstr IPv4

أعطِ زائرك http://<that-address>:3000 وسيدخل مباشرة. المشكلة في شكل المسار كله: هذا العنوان لا يعني شيئًا خارج شبكتك. لحظة انتقاله إلى شبكة Wi-Fi مختلفة، أو إلى شبكة الهاتف، أو إلى منزله، يصبح الرابط ميتًا بالنسبة له.

ملاحظة: إذا كان الأمر يعمل بشكل سليم وما يزال الجهاز الآخر عاجزًا عن الاتصال، فالسبب في كل مرة تقريبًا هو جدار حماية نظام التشغيل، لا الأمر نفسه. تقول وثائق جدار الحماية لدى Apple إن macOS يعرض تنبيهًا لأي تطبيق لم تسمح له بعد، و يرفض الاتصال حتى تتخذ إجراءً. أما Windows فيسأل أي ملف تعريف شبكة ينطبق، ويحتفظ بقواعد منفصلة للشبكات الخاصة والعامة . اختر «خاصة» على شبكة منزلية أو مكتبية. ولا تختر «عامة» أبدًا.

ضعه خلف نفق

النفق برنامج صغير يعمل إلى جانب تطبيقك ويمنحه عنوان HTTPS عامًا. أمر واحد يمنحك نفقًا مجانيًا إلى localhost خلال دقيقة تقريبًا، ومن المهم أن تعرف مسبقًا أن عنوان URL يموت لحظة توقف ذلك الأمر:

cloudflared tunnel --url http://localhost:3000

لا يتغير شيء في الراوتر، بسبب اتجاه الاتصال. يفتح جهازك اتصالًا صادرًا إلى حافة المزود، من النوع نفسه الذي يفتحه متصفحك لتحميل أي صفحة، ويُبقيه المزود مفتوحًا ويدفع الطلبات الواردة عبره إليك. تبقى المنافذ الواردة من جهتك مغلقة، ولهذا يعمل الأمر على Wi-Fi الفنادق، ونقاط اتصال الهاتف، والاتصال المنزلي الذي لا تتحكم في راوتره.

ملاحظة: هذه الحالة الأخيرة تستحق فحصًا لمدة ستين ثانية قبل التفكير في إعادة توجيه المنافذ بدلًا من ذلك. افتح صفحة حالة الراوتر، وابحث عن عنوان WAN IP الذي يعرضه، وقارنه بعنوان IP العام الفعلي من أي خدمة «ما هو عنوان IP الخاص بي». إذا كان عنوان WAN IP يقع ضمن 100.64.0.0/10، فالسبب المرجح هو CGNAT. أما إذا كان عنوان WAN IP وعنوان IP العام مختلفين فحسب، فأنت تعرف أن هناك طبقة NAT أخرى في الأعلى، لكنها قد تكون CGNAT أو NAT مزدوجًا عاديًا. في الحالتين، قد لا تكفي إعادة توجيه المنافذ على هذا الراوتر وحده. هذا النطاق محجوز بموجب RFC 6598 كمساحة عناوين مشتركة، وهو ما يضعك مزود الإنترنت خلفه عندما تنفد لديه العناوين.

تختلف الخيارات في المقام الأول فيما تطلبه منك أولًا.

أنفاق Cloudflare السريعة هي الأمر أعلاه: بلا حساب، بلا نطاق، ونطاق فرعي عشوائي على trycloudflare.com . تحدّها Cloudflare عند 200 طلب متزامن، وتعيد 429 بعد ذلك، ولا تدعم Server-Sent Events، وتقول في الوثائق نفسها إن الأنفاق المجانية مخصصة للاختبار والتطوير، لا لنشر موقع إنتاجي.

ngrok يتطلب التسجيل أولًا، ثم ngrok http 3000. الباقة المجانية الحالية تمنحك 5 $ من الاستخدام المضمّن لمرة واحدة لا يتجدد شهريًا، وحتى 3 نقاط نهاية متصلة، و1 GB من النقل، و20,000 طلب HTTP/S، وصفحة تحذير وسيطة يجب على زائرك النقر لتجاوزها. تحصل أيضًا على نطاق تطوير مجاني يُعيَّن تلقائيًا، وهو ما أعلنته ngrok في 2023 لإنهاء الشكوى القديمة من تغيّر عنوان URL مع كل إعادة تشغيل.

localtunnel لا يحتاج إلى تسجيل ولا إلى تثبيت سوى npx: npx localtunnel --port 3000. تحصل على نطاق فرعي عشوائي، ويوضح ملف README صراحة أن --subdomain يطلب اسمًا ولا يضمنه.

localhost.run لا يثبّت شيئًا، لأنه يستخدم عميل SSH المضمّن أصلًا في نظام التشغيل لديك: ssh -R 80:localhost:3000 localhost.run. تشير وثائقه إلى أنه لا حاجة إلى أي تنزيل ولا حاجة إلى إعداد حساب للنطاقات المجانية.

VS Code يوفر ذلك في لوحة Ports، وهو مفيد إن كنت تعيش أصلًا داخل المحرر. يتطلب تسجيل الدخول عبر GitHub أو Microsoft، والإعداد الافتراضي سيوقعك في فخ: المنفذ المعاد توجيهه خاص، ما يعني أن زائرك سيُطلب منه تسجيل الدخول بحسابك أنت حتى تحوّل المنفذ إلى عام. (مناسب لزميل في الفريق. عديم الفائدة للعميل الذي يريد فقط النقر على رابط.)

Tailscale Funnel يفعل ذلك أيضًا، مع قيدين يحسمان الأمر عادة: لا يمكن لعنوان URL أن يكون إلا على نطاق tailnet الخاص بك، ولا يمكنه إلا الاستماع على المنافذ 443 و8443 و10000.

أيًا كان اختيارك، كن واضحًا بشأن ما سلّمته. مع نفق عام بلا ضوابط وصول، كل ما يقدمه خادم التطوير متاح لأي شخص يحمل ذلك العنوان، بما في ذلك المسارات التي لم تربطها قط وأي واجهة تصحيح تركتها مفعّلة. مناسب لعرض توضيحي مدته خمس عشرة دقيقة. وأقل مناسبة بكثير لعنوان تلصقه في Discord عام.

يفاجئك انتهاء الصلاحية لأنه قد يبدو كأن التطبيق تعطّل. معظم المسارات السريعة هنا ما تزال تعتمد على برنامج نفق يعمل على حاسوبك المحمول: أوقف cloudflared، أو ngrok، أو localtunnel، أو جلسة SSH الخاصة بـ localhost.run، فيتوقف التوجيه. أما Tailscale Funnel فهو الاستثناء عند تشغيله مع --bg، إذ يُبقي إعدادات Funnel تعمل في الخلفية ويستعيدها بعد إعادة التشغيل. لا يستطيع أي منها تقديم تطبيقك المحلي بينما الحاسوب المحمول نفسه غير متصل. يمكنك ترك النفق يعمل لأيام، وسيعمل تمامًا حتى يُغلق الغطاء أو تبلغ حد الطلبات.

النفق هو الأداة الصحيحة للعرض التوضيحي والأداة الخاطئة للاستضافة: وقت تشغيله هو وقت تشغيل حاسوبك المحمول.

دع التطبيق يغادر جهازك

هذا أول مسار يتوقف فيه حاسوبك المحمول عن كونه الركيزة، وأول مسار تكون فيه الشروط أهم من الأدوات. ما يُنهي الأمر هنا ليس ساعة. بل الإيقاف عند الخمول، أو إعادة ضبط نظام الملفات، أو باقة تقرر أن تطبيقك ليس من النوع الذي تريده على نسخة مجانية.

تتراوح الخيارات أدناه بين باقات مجانية دائمة وتجارب قصيرة. بعضها يمكنه إبقاء التطبيق متصلًا إلى أجل غير مسمى ضمن حدوده؛ وبعضها يتوقف بعد فترة تجريبية محددة أو يتطلب حسابًا مدفوعًا للمعالجة. تحقق من قواعد الفوترة والسكون والتخزين قبل النشر.

تم التحقق من شروط الباقات المجانية أدناه على صفحة الأسعار أو الوثائق الخاصة بكل مزود بتاريخ 7 سبتمبر 2026.

المزوّدالاستخدام التجاري؟هل تبقى البيانات بعد إعادة التشغيل؟العيب
Netlifyمسموحنعم، مع Netlify Blobs أو Databaseلا حاجة إلى بطاقة للبدء؛ استهلاك كل أرصدة باقة Free الشهرية يوقف المشاريع مؤقتًا حتى دورة الفوترة التالية ما لم تقم بالترقية
Renderغير مذكورتُفقد عند إعادة التشغيللا حاجة إلى بطاقة للبدء؛ يدخل في السكون بعد 15 دقيقة من الخمول؛ تنتهي صلاحية Postgres المجاني بعد 30 يومًا من الإنشاء
Cloudflare Pages / Workersغير مذكورنعم، مع KV أو D1 أو R2 أو Durable Objects500 عملية بناء Pages شهريًا؛ الباقة المجانية من Workers محدودة بـ 100,000 طلب يوميًا
Vercelليس على Hobbyتُفقد عند إعادة التشغيلHobby للاستخدام الشخصي فقط؛ نظام ملفات الدوال للقراءة فقط
GitHub Pagesغير مسموحالمخرجات الثابتة فقطلا أعمال تجارية عبر الإنترنت، ولا تجارة إلكترونية، ولا SaaS تجاري؛ مهلة النشر 10 دقائق
PythonAnywhereغير مذكورنعمالحسابات المجانية لا تصل إلا إلى قائمة مسموح بها من المضيفين الخارجيين؛ تنتهي صلاحية تطبيق الويب المجاني بعد شهر ما لم يُجدَّد
Fly.ioغير مذكورنعم، مع Fly Volumeلا توجد باقة مجانية دائمة: 2 ساعة تشغيل آلة أو 7 أيام؛ تتوقف آلات التجربة (Machines) تلقائيًا بعد 5 دقائق من التشغيل، وتشمل التجربة 20 GB من تخزين وحدات التخزين؛ تتوقف التطبيقات عند انتهاء التجربة حتى تضيف بطاقة
Koyebغير مذكورلا تخزين محلي دائمالبطاقة إلزامية؛ تضع Koyeb تفويضًا مسبقًا بقيمة 29 $ ثم تلغيه، لكن التسجيل يختار Pro افتراضيًا ويحتسب تكلفته بالتناسب ما لم تنتقل إلى Starter
Hugging Face Spacesغير مذكورتُفقد عند إعادة التشغيلStatic Spaces مجانية؛ أما Gradio وDocker فتتطلبان عمومًا باقة مدفوعة، لكن الحسابات الشخصية المجانية المؤهلة يمكنها استضافة ما يصل إلى اثنين من Gradio Spaces على ZeroGPU
Railwayغير مذكورنعم، إذا كان التطبيق يستخدم وحدة التخزين المضمّنة بسعة 0.5 GBتجربة 30 يومًا مع رصيد 5 $ لمرة واحدة، ثم باقة Free بقيمة 0 $ مع رصيد موارد 1 $ شهريًا؛ لا حاجة إلى بطاقة

«غير مذكور» يعني أن صفحات المزود نفسه لا تجيب عن ذلك بخصوص باقته المجانية. تعامل معه كأمر مجهول لا كنعم أو لا.

ثلاثة من هذه الصفوف تستحق نظرة إضافية قبل البدء. Fly.io ليس لديه باقة مجانية دائمة: تنتهي تجربته بعد 2 ساعة تشغيل آلة أو 7 أيام. Koyeb يتضمن نسخة مجانية، لكن مسار التسجيل والفوترة لديه يحتاج إلى انتباه قبل النشر. Hugging Face تُبقي Static Spaces مجانية، بينما تتطلب Gradio وDocker Spaces الجديدة حسابًا مدفوعًا باستثناء ZeroGPU المحدود. أما Railway فلم يعد ينتمي إلى قائمة التحذير هذه: بعد تجربته لمدة 30 يومًا مع رصيد 5 $، ينتقل الآن إلى باقة Free بقيمة 0 $ مع رصيد موارد 1 $ شهريًا.

ثم تأتي مسألة البيانات، وهي حيث يتحول تطبيق يعمل بهدوء إلى تطبيق معطّل. تعمل خدمات الويب المجانية في Render على نظام ملفات مؤقت، ووثائقها صريحة في أن كل ما يُكتب هناك، بما في ذلك الصور المرفوعة وقواعد بيانات SQLite المحلية تحديدًا، يُفقد مع كل إعادة نشر وإعادة تشغيل وإيقاف عند الخمول. أما دوال Vercel فتعمل على نظام ملفات للقراءة فقط مع مساحة عمل مؤقتة فحسب، لذا فإن ملف SQLite الذي يكتبه تطبيقك ليس آمنًا هناك أيضًا. إذا كان تطبيقك يحتفظ بالحالة في ملف، فانقله إلى تخزين دائم: قاعدة بيانات مستضافة، أو تخزين كائنات، أو وحدة تخزين دائمة حيث تدعمها المنصة.

الإيقاف عند الخمول يستحق أن تشعر به قبل أن تلتزم. في الباقة المجانية من Render، تُدخل 15 دقيقة من الخمول الخدمة في السكون، ويوقظها الطلب التالي خلال دقيقة تقريبًا، مع عرض صفحة تحميل لمن نقر على رابطك. بالنسبة لعمل في معرض أعمالك، هزّة كتف. أما بالنسبة لعميل يفتح الرابط أثناء مكالمة، فهي ستون ثانية سيئة.

لدى PythonAnywhere نسخة أكثر خفاءً من الفخ. لا يوجد إيقاف عند الخمول، لكن تطبيق الويب المجاني تنتهي صلاحيته بعد شهر ويتوقف ما لم تنقر على رابط التجديد الذي ترسله إليك PythonAnywhere بالبريد الإلكتروني، والحسابات المجانية لديها وصول صادر مقيّد إلى الإنترنت ولا تصل إلا إلى قائمة مسموح بها من المضيفين الخارجيين. أي تطبيق يستدعي API خارج تلك القائمة يبقى متصلًا تمامًا ويفشل في كل طلب إلى ذلك الـ API غير المسموح به (طريقة فظيعة للتصحيح، لأن لا شيء يبدو معطّلًا في أي مكان).

انشره كموقع ثابت

إذا لم يكن أي مما يفعله تطبيقك يتطلب كود خادم وقت الطلب، فالمضيف الثابت هو الخيار الأقرب هنا إلى «اضبطه وانسَه»: يمكنه البقاء متصلًا بدون حاسوبك المحمول، ولا توجد عملية تطبيق تنتظر الإيقاظ. حساب المضيف وحدود استخدامه ما تزال سارية. عدد التطبيقات المؤهلة أكبر مما تتوقع، ولهذا يستحق السؤال الأول من تلك الأسئلة الثلاثة إجابة قبل أن تفترض أنك بحاجة إلى مضيف على جانب الخادم.

القاعدة أضيق من «هل لديه واجهة خلفية». تطبيقك مؤهل إذا كان كل طلب يرسله يذهب إما إلى ملفاتك الثابتة أو مباشرة من المتصفح إلى API شخص آخر. استدعاء Supabase أو API عام من المتصفح لا بأس به، مع تحذير واحد: المفتاح الموجود في كود المتصفح هو مفتاح نشرته للعموم. ما يغلق الباب هو الحاجة إلى تشغيل كودك الخاص على خادم مع كل طلب.

إن كان مؤهلًا، فالخطوات قصيرة:

npm run build   # Vite writes to dist/, a Next.js static export writes to out/

ثم انشر مخرجات البناء تلك على مضيف ثابت. يمكن لـ Cloudflare Pages وNetlify وVercel البناء من مستودع متصل. ويمكن لـ GitHub Pages نشر الملفات الثابتة من فرع أو استخدام GitHub Actions لتشغيل بناء إطار العمل الخاص بك ونشر المخرجات المولدة.

لدى GitHub Pages قيود واضحة بما يكفي لتُؤخذ في الحسبان من البداية. ثابت فقط، وموقع مستخدم أو منظمة واحد لكل حساب، وحدود استخدام تنص على أنه ليس استضافة مجانية لنشاط تجاري، ولا لموقع تجارة إلكترونية أو SaaS تجاري. إذا كان تطبيقك سيقبل مدفوعات، فهذا يستبعده قبل أن تبدأ.

هذا المسار لا يتضمن انتهاء صلاحية لعملية التطبيق. يستمر في العمل ما دام حساب الاستضافة نشطًا وضمن حدوده، ويتوقف عن الملاءمة بمجرد أن يحتاج التطبيق إلى عمل على جانب الخادم وقت الطلب.

حيث تنتهي المسارات المجانية

تفشل المسارات المجانية في مواضع مختلفة، لا كلها دفعة واحدة. المضيف الثابت يحل مسبقًا مشكلة وقت تشغيل الحاسوب المحمول ويمنحك عنوان URL مستقرًا من المزود. مضيف التطبيقات المجاني يمكنه فعل الشيء نفسه، وبعضها يتضمن الآن تخزينًا دائمًا. يبدأ VPS في اكتساب معنى عندما تتراكم المتطلبات: عملية جانب الخادم الخاصة بك يجب أن تبقى متصلة، وتحتاج إلى تخزين دائم يمكن التنبؤ به، وقواعد الموارد أو الاستخدام في الباقة المجانية لم تعد تناسبك.

هذا الحد يستحق الاحترام. عرض توضيحي واحد ليس سببًا لشراء خادم، ولا مشروع ثابت منخفض الزيارات. ابقَ على النفق للمشاركة قصيرة الأمد، وابقَ على المضيف الثابت ما دام التطبيق ثابتًا فعلًا، وابقَ على مضيف التطبيقات المجاني ما دامت حدوده تناسب ما تشغّله.

انتقل إلى VPS عندما تحتاج إلى خادم يعمل دائمًا وتتحكم فيه، وتكون مستعدًا لتحمّل العمل التشغيلي المصاحب له. خادم Linux VPS لدينا خيار واحد، ويمكن لـ VPS مماثل من مزود آخر أن يؤدي المهمة نفسها. اختر حجم الخادم بحسب التطبيق بدلًا من افتراض أن أصغر باقة ستكفي.

عرض باقات Linux

ابنِ على خادم Linux VPS بوصول root وتخزين NVMe وقوة AMD EPYC.

عرض باقات Linux

يتغير أمران بمجرد أن تفعل ذلك. سير عمل النشر بالدفع إلى git الذي وفّره لك مضيف المنصة لم يعد تلقائيًا. يمكنك إعادة بنائه باستخدام PaaS مستضاف ذاتيًا مثل Coolify أو Dokku، أو بناء مسار CI/CD خاص بك، وفي الحالتين تصبح التحديثات والصيانة مسؤوليتك الآن.

التغيير الآخر هو أن الجهاز يستوعب أكثر من التطبيق. سيسعده تشغيل Code Server وClaude Code إن كنت تفضل أن يعيش محررك هناك أيضًا، وهذا إما مكافأة لطيفة أو عطلة نهاية أسبوع جديدة بالكامل، بحسبك أنت.

الأسئلة الشائعة

لماذا توقف عنوان URL العام عن العمل بعد أن أغلقت حاسوبي المحمول؟

لأن النفق كان مرتبطًا بالعملية التي أنشأته، لا بتطبيقك. إغلاق الحاسوب المحمول أو إنهاء الطرفية ينهي تلك العملية، فيموت عنوان URL العام، بينما تطبيقك بخير. إعادة تشغيل النفق تمنحك عنوان URL جديدًا ما لم تخصص لك الأداة نطاقًا محجوزًا. إذا كان الرابط بحاجة إلى البقاء أثناء سكون حاسوبك المحمول، فعلى التطبيق أن يغادر جهازك.

هل أحتاج إلى اسم نطاق لوضع تطبيق محلي على عنوان URL عام؟

لا، في كل الحالات تقريبًا. نفق Cloudflare السريع، ونطاق التطوير الذي تخصصه ngrok، وlocaltunnel، وlocalhost.run، وباقات الاستضافة المجانية أعلاه، كلها تخصص لك نطاقًا فرعيًا على نطاقها الخاص دون تكلفة. الاستثناء هو نفق Cloudflare المسمّى، الذي يحتاج إلى نطاق أضفته مسبقًا إلى Cloudflare DNS.

هل يمكن لشخص على شبكة Wi-Fi مختلفة فتح عنوان IP المحلي الخاص بي؟

لا. عنوان مثل 192.168.1.42 يشير إلى الجهاز الذي يحمله على الشبكة التي أنت متصل بها حاليًا، وهو على أي شبكة أخرى جهاز مختلف أو لا شيء على الإطلاق. أي شخص خارج شبكة Wi-Fi الخاصة بك يحتاج بدلًا من ذلك إلى نفق أو باقة استضافة مجانية أو مضيف ثابت.

أي هذه الطرق يعمل إذا كان تطبيقي يحتوي على تسجيل دخول وقاعدة بيانات؟

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

مشاركة

النقاش

التعليقات

سجّل الدخول للمشاركة في النقاش.

المزيد من المدونة

تابع القراءة.

جاهز للنشر؟ تبدأ من 2.48 $/شهر.

سحابة مستقلة منذ 2008. AMD EPYC، NVMe، 40 Gbps. استرداد خلال 14 يومًا.