פריסת אפליקציות Full-Stack על תשתית חינמית

בנינו מערכת לניהול למידה (LMS) עבור G3HUB. ה-Stack: React 18, Node.js 20, ו-PostgreSQL 15.

לא היה לנו VPS. לא היה לנו תקציב לענן. היה לנו רק חשבון אחסון משותף ב-cPanel ודדליין.

רוב המדריכים מניחים שיש לכם שרת ייעודי. היינו צריכים למצוא דרך לגרום לשירותים שונים לתקשר זה עם זה ב-0$ לחודש.

הארכיטקטורה

• Frontend: React + Vite (מאוחסן ב-cPanel) • Backend: Node.js + Express (מאוחסן ב-Render Free Tier) • Database: PostgreSQL (מאוחסן ב-Supabase Free Tier)

המכשולים והפתרונות

1. אחסון משותף חוסם מסדי נתונים ניסינו להריץ את ה-Node.js API ב-cPanel. זה נכשל כי המארח חסם חיבורי יציאה (outbound connections) ל-PostgreSQL בפורט 5432. פתרון: העברת ה-API ל-Render. Render מאפשר חיבורים אלו.

2. שגיאות פריסה ב-Monorepo Render לא הצליח להבין את תלויות ה-pnpm workspace שלנו כמו @workspace/db. פתרון: השתמשנו ב-esbuild כדי לארוז (bundle) הכל לקובץ יחיד של 6.4MB. לאחר מכן השתמשנו ב-package.json מינימלי עם תלויות חיצוניות בלבד. זה הפך את ה-API לעצמאי (self-contained).

3. בעיית ה-CORS וה-Proxy ה-Apache mod_proxy באחסון משותף היה מוגבל. לא יכולנו להעביר בקשות API בקלות מה-frontend ל-Render. פתרון: השתמשנו ב-PHP cURL proxy. ה-frontend קורא לסקריפט ה-PHP המקומי. סקריפט ה-PHP מעביר את הבקשה ל-Render. זה עוקף בעיות CORS והגבלות חומת אש (firewall).

4. שגיאות תעודת SSL ה-connection pooler של Supabase גרם לשגיאות SSL ב-Node.js. פתרון: הגדרנו את משתנה הסביבה NODE_TLS_REJECT_UNAUTHORIZED=0.

פירוט עלויות

• cPanel: $0 (קיים) • Render: $0 (Free Tier) • Supabase: $0 (Free Tier) • סה"כ: $0 לחודש

תובנות למפתחים

  • בדקו קישוריות יציאה (outbound connectivity) בשלב מוקדם. בדקו אם השרת שלכם באמת יכול לתקשר עם מסד הנתונים לפני שאתם כותבים קוד.
  • השתמשו ב-esbuild עבור monorepos. קובץ bundled יחיד הרבה יותר קל לפריסה מאשר מבנה תיקיות מורכב.
  • השתמשו ב-UptimeRobot. ה-Free Tier של Render נכנס למצב שינה אחרי 15 דקות. ping פשוט שומר עליו פעיל.
  • הימנעו מתווים מיוחדים בסיסמאות למסדי נתונים. שימוש ב-@ או ! בתוך מחרוזת חיבור (connection string) גורם לכאבי ראש אינסופיים של URL-encoding.

אם אתם יכולים להרשות לעצמכם, קנו VPS ב-5$. זה יסיר את כל המכשולים האלו. אבל אם יש לכם 0$, ניתוב יצירתי (creative routing) הופך אפליקציות production לאפשריות.

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

Optional learning community: https://t.me/GyaanSetuAi