Shared Hosting اور Render پر ایک Full-Stack LMS کو ڈیپلائے کرنا

ہم نے بغیر کسی VPS کے ایک پروڈکشن Node.js، React، اور PostgreSQL ایپ لانچ کی۔

ہم نے G3HUB کے لیے ایک مکمل Learning Management System بنایا۔ اس اسٹیک میں شامل تھا: • Frontend: React 18, Vite، اور TailwindCSS • Backend: Node.js 20 اور Express 5 • Database: Supabase کے ذریعے PostgreSQL 15 • ORM: Drizzle ORM

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

𝗧𝗵𝗲 𝗜𝗻𝗳𝗿𝗮𝘀𝘁𝗿𝘂𝗰𝘁𝘂𝗿𝗲 𝗦𝗽𝗹𝗶𝘁 ہم Node.js اور PostgreSQL کو ایک ہی سرور پر نہیں چلا سکتے تھے۔ ہم نے ایپ کو تین سروسز میں تقسیم کیا: • Frontend: cPanel shared hosting (Static files) • API: Render (Free tier) • Database: Supabase (Free tier)

𝗧𝗵𝗲 𝗕𝗶𝗴𝗴𝗲𝘀𝘁 𝗛𝘂𝗿𝗱𝗹𝗲𝘀

𝟭. 𝗧𝗵𝗲 𝗗𝗮𝘁𝗮𝗯𝗮𝘀𝗲 𝗕𝗹𝗼𝗰𝗸𝗮𝗱𝗲 ہم نے Node.js API کو براہ راست cPanel پر چلانے کی کوشش کی۔ یہ فوراً ناکام ہو گیا۔ Shared hosting فراہم کرنے والے اکثر port 5432 پر outbound connections کو بلاک کر دیتے ہیں۔ اس کا مطلب ہے کہ آپ کی ایپ کسی بیرونی ڈیٹا بیس سے رابطہ نہیں کر سکتی۔ ہم نے اس مسئلے کو حل کرنے کے لیے API کو Render پر منتقل کر دیا۔

𝟮. 𝗧𝗵𝗲 𝗠𝗼𝗻𝗼𝗿𝗲𝗽𝗼 𝗣𝗮𝗶𝗻 ہمارا کوڈ بیس pnpm workspaces استعمال کرتا تھا۔ جب ہم نے Render پر پش کیا، تو بلڈ (build) ناکام ہو گیا کیونکہ Render نے ہمارے لوکل ورک اسپیس ڈیپینڈینسیز (dependencies) کو نہیں پہچانا۔ حل: ہم نے سب کچھ ایک 6.4MB کی فائل میں بنڈل کرنے کے لیے esbuild کا استعمال کیا۔ ہم نے پیچیدہ package.json کو ایک مختصر ورژن سے بدل دیا جس میں صرف بیرونی ڈیپینڈینسیز شامل تھیں۔

𝟯. 𝗧𝗵𝗲 𝗖𝗢𝗥𝗦 𝗮𝗻𝗱 𝗣𝗿𝗼𝘅𝘆 𝗪𝗮𝗿 ہم نے اپنے ڈومین سے Render تک API کالز کو روٹ کرنے کے لیے Apache mod_proxy استعمال کرنے کی کوشش کی۔ یہ ٹائم آؤٹ ہو گیا۔ Shared hosting اکثر اس ماڈیول پر پابندی لگاتی ہے۔ حل: ہم نے PHP cURL پراکسی کا استعمال کیا۔ چونکہ فرنٹ اینڈ اور PHP اسکرپٹ ایک ہی ڈومین پر موجود ہیں، اس لیے ہم تمام CORS مسائل سے بچ گئے۔ PHP اسکرپٹ خاموشی سے درخواستوں (requests) کو Render پر آگے بھیج دیتا ہے۔

𝗗𝗲𝗽𝗹𝗼𝘆𝗺𝗲𝗻𝘁 𝗧𝗶𝗽𝘀 • PowerShell پر بلڈ کریں، Git Bash پر نہیں۔ Windows، Git Bash میں انوائرمنٹ ویری ایبلز (environment variables) کو مختلف طریقے سے ہینڈل کرتا ہے۔ • ڈیٹا بیس پاس ورڈ میں اسپیشل کریکٹرز (special characters) استعمال نہ کریں۔ @ یا ! جیسے کریکٹرز کے لیے URL encoding کی ضرورت ہوتی ہے اور یہ کنکشن کی غلطیاں (errors) پیدا کرتے ہیں۔ • UptimeRobot استعمال کریں۔ Render کا فری ٹائر 15 منٹ کے بعد سو جاتا ہے۔ اسے فعال رکھنے کے لیے اپنے ہیلتھ چیک اینڈ پوائنٹ (health check endpoint) پر پنگ (ping) سیٹ کریں۔

𝗧𝗼𝘁𝗮𝗹 𝗜𝗻𝗳𝗿𝗮𝘀𝘁𝗿𝘂𝗰𝘁𝘂𝗿𝗲 𝗖𝗼𝘀𝘁: $0/مہینہ۔

اگر آپ کے پاس بجٹ ہے، تو VPS استعمال کریں۔ یہ ان تمام رکاوٹوں کو ختم کر دیتا ہے۔ لیکن اگر آپ کا بجٹ صفر ہے، تو تخلیقی روٹنگ (creative routing) پروڈکشن کے قابل ایپس کو ممکن بنا دیتی ہے۔

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