פריסת LMS Full-Stack על Shared Hosting ו-Render
הפקנו אפליקציית Node.js, React, ו-PostgreSQL לסביבת ייצור (production) ללא VPS.
בנינו מערכת לניהול למידה (Learning Management System) מלאה עבור G3HUB. ה-stack כלל: • Frontend: React 18, Vite, ו-TailwindCSS • Backend: Node.js 20 ו-Express 5 • Database: PostgreSQL 15 באמצעות Supabase • ORM: Drizzle ORM
לא היה לנו VM בענן או VPS. היה לנו רק חשבון shared hosting ב-cPanel שכבר הריץ אתר WordPress. הנה איך הצלחנו לגרום לזה לעבוד.
פיצול התשתית לא יכולנו להריץ את Node.js ו-PostgreSQL על אותו שרת. פיצלנו את האפליקציה על פני שלושה שירותים: • Frontend: cPanel shared hosting (קבצים סטטיים) • API: Render (Free tier) • Database: Supabase (Free tier)
המכשולים הגדולים ביותר
1. חסימת בסיס הנתונים ניסינו להריץ את ה-API של Node.js ישירות ב-cPanel. זה נכשל מיד. ספקי shared hosting חוסמים לעיתים קרובות חיבורי outbound בפורט 5432. זה אומר שהאפליקציה שלכם לא יכולה לתקשר עם בסיס נתונים חיצוני. כדי לפתור זאת, העברנו את ה-API ל-Render.
2. כאב ה-Monorepo קוד המקור שלנו השתמש ב-pnpm workspaces. כשדחפנו (pushed) ל-Render, ה-build נכשל כי Render לא זיהה את ה-dependencies של ה-workspace המקומי שלנו. הפתרון: השתמשנו ב-esbuild כדי לארוז (bundle) הכל לקובץ יחיד של 6.4MB. החלפנו את ה-package.json המורכב בגרסה מינימלית המכילה רק dependencies חיצוניים.
3. מלחמת ה-CORS וה-Proxy ניסינו להשתמש ב-Apache mod_proxy כדי לנתב קריאות API מהדומיין שלנו ל-Render. זה גרם ל-timeout. shared hosting מגביל לעיתים קרובות את המודול הזה. הפתרון: השתמשנו ב-PHP cURL proxy. מכיוון שה-frontend והסקריפט של PHP נמצאים על אותו דומיין, נמנענו מכל בעיות ה-CORS. סקריפט ה-PHP מעביר את הבקשות ל-Render בשקט.
טיפים לפריסה (Deployment) • בצעו build ב-PowerShell, לא ב-Git Bash. Windows מטפל במשתני סביבה (environment variables) בצורה שונה ב-Git Bash. • השתמשו בסיסמה לבסיס הנתונים ללא תווים מיוחדים. תווים כמו @ או ! דורשים URL encoding וגורמים לשגיאות חיבור. • השתמשו ב-UptimeRobot. ה-free tier של Render נכנס למצב שינה אחרי 15 דקות. הגדירו ping ל-health check endpoint שלכם כדי להשאיר אותו ער.
עלות תשתית כוללת: $0 לחודש.
אם יש לכם תקציב, השתמשו ב-VPS. זה מסיר את המכשולים האלו. אבל אם אין לכם תקציב בכלל, ניתוב יצירתי הופך אפליקציות מוכנות לייצור (production-ready) לאפשריות.
מקור: https://dev.to/oyohedmond/deploying-a-full-stack-lms-on-shared-hosting-render-free-the-hard-way-4ke0
