פריסת אפליקציות 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
