مفت انفراسٹرکچر پر فل اسٹیک ایپس کو ڈیپلائے کرنا

ہم نے G3HUB کے لیے ایک لرننگ مینجمنٹ سسٹم (Learning Management System) بنایا۔ اسٹیک: React 18، Node.js 20، اور PostgreSQL 15۔

ہمارے پاس VPS نہیں تھا۔ ہمارے پاس کلاؤڈ بجٹ بھی نہیں تھا۔ ہمارے پاس صرف ایک cPanel شیئرڈ ہوسٹنگ اکاؤنٹ اور ایک ڈیڈ لائن تھی۔

زیادہ تر ٹیوٹوریلز یہ فرض کرتے ہیں کہ آپ کے پاس ایک ڈیڈیکیٹڈ سرور ہے۔ ہمیں ماہانہ $0 میں مختلف سروسز کو ایک دوسرے کے ساتھ جوڑنے کا طریقہ تلاش کرنا تھا۔

آرکیٹیکچر

• فرنٹ اینڈ: React + Vite (cPanel پر ہوسٹڈ) • بیک اینڈ: Node.js + Express (Render Free Tier پر ہوسٹڈ) • ڈیٹا بیس: PostgreSQL (Supabase Free Tier پر ہوسٹڈ)

رکاوٹیں اور ان کا حل

1. شیئرڈ ہوسٹنگ ڈیٹا بیس کو بلاک کرتی ہے ہم نے cPanel پر Node.js API چلانے کی کوشش کی۔ یہ ناکام ہو گئی کیونکہ ہوسٹ نے پورٹ 5432 پر PostgreSQL کے لیے آؤٹ باؤنڈ کنکشنز کو بلاک کر دیا تھا۔ حل: API کو Render پر منتقل کریں۔ Render ان کنکشنز کی اجازت دیتا ہے۔

2. Monorepo ڈیپلائمنٹ کی غلطیاں Render ہمارے pnpm workspace dependencies جیسے کہ @workspace/db کو سمجھ نہیں پا رہا تھا۔ حل: ہم نے سب کچھ ایک ہی 6.4MB کی فائل میں بنڈل کرنے کے لیے esbuild کا استعمال کیا۔ پھر ہم نے صرف بیرونی (external) dependencies کے ساتھ ایک کم سے کم package.json استعمال کیا۔ اس سے API خود مختار (self-contained) ہو گئی۔

3. CORS اور پراکسی کا مسئلہ شیئرڈ ہوسٹنگ پر Apache mod_proxy محدود تھا۔ ہم فرنٹ اینڈ سے Render تک API کالز کو آسانی سے فارورڈ نہیں کر پا رہے تھے۔ حل: ہم نے ایک PHP cURL پراکسی کا استعمال کیا۔ فرنٹ اینڈ مقامی PHP اسکرپٹ کو کال کرتا ہے۔ PHP اسکرپٹ درخواست کو Render پر فارورڈ کر دیتا ہے۔ اس طرح CORS کے مسائل اور فائر وال کی پابندیوں سے بچا جا سکتا ہے۔

4. SSL سرٹیفکیٹ کی غلطیاں Supabase connection pooler کی وجہ سے Node.js میں SSL کی غلطیاں آ رہی تھیں۔ حل: ہم نے انوائرمنٹ ویری ایبل NODE_TLS_REJECT_UNAUTHORIZED=0 سیٹ کیا۔

اخراجات کی تفصیل

• cPanel: $0 (موجودہ) • Render: $0 (Free Tier) • Supabase: $0 (Free Tier) • کل: $0/مہینہ

انجینئرز کے لیے اہم نکات

  • آؤٹ باؤنڈ کنیکٹیویٹی (outbound connectivity) کا جلد از جلد ٹیسٹ کریں۔ کوڈ لکھنے سے پہلے چیک کریں کہ آیا آپ کا سرور واقعی آپ کے ڈیٹا بیس سے بات کر سکتا ہے یا نہیں۔
  • Monorepos کے لیے esbuild استعمال کریں۔ ایک سنگل بنڈل شدہ فائل کو پیچیدہ فولڈر اسٹرکچر کے مقابلے میں ڈیپلائے کرنا بہت آسان ہوتا ہے۔
  • UptimeRobot استعمال کریں۔ Render کا فری ٹائر 15 منٹ کے بعد سو جاتا ہے۔ ایک سادہ پنگ (ping) اسے بیدار رکھتا ہے۔
  • ڈیٹا بیس پاس ورڈز میں خصوصی حروف (special characters) سے بچیں۔ کنکشن اسٹرنگ میں @ یا ! کا استعمال URL-encoding کے نہ ختم ہونے والے مسائل پیدا کرتا ہے۔

اگر آپ استطاعت رکھتے ہیں تو $5 کا VPS خرید لیں۔ یہ ان تمام رکاوٹوں کو ختم کر دیتا ہے۔ لیکن اگر آپ کے پاس $0 ہیں، تو تخلیقی روٹنگ (creative routing) پروڈکشن ایپس کو ممکن بنا دیتی ہے۔

ماخذ: https://dev.to/oyohedmond/deploying-a-full-stack-lms-on-shared-hosting-render-free-the-hard-way-4ke0

اختیاری لرننگ کمیونٹی: https://t.me/GyaanSetuAi