Heroku היה הדרך הטובה ביותר לפרוס אפליקציה ווב במשך שנים. הוא עדיין כזה — אם הצוות שלכם לפני product-market fit ולהוציא כסף על תשתיות זה בזבוז. אבל ברגע שעוברים את הנקודה הזאת, החשבון משתנה מהר. dyno סטנדרטי ב-Heroku עולה $25 לחודש. שני dynos לזמינות: $50 לחודש. הוסיפו Heroku Postgres ב-Standard-0: עוד $50 לחודש. אתם ב-$100+ לפני גדילה בתעבורה, תוספות, או scale אמיתי.

Google Cloud Run גובה רק על requests שמוגשים. סטארטאפ בתעבורה בינונית עם 10M requests לחודש ו-256MB-שנייה זמן מחשוב רץ בערך $20–40. פריסה ו-rollback ללא downtime מובנים. ואם אתם כבר ב-GCP לשירותים אחרים — ענן אחד פחות לנהל.

המדריך הזה עובר אתכם דרך המעבר בפועל — לא גרסת "תקראו את התיעוד ותגלו בעצמכם", אלא הרצף שעובד.

שלב 1: ביקורת Dockerfile — האם האפליקציה מתקינרת נכון?

Cloud Run דורש שהאפליקציה תרוץ בקונטיינר שמאזין על משתנה הסביבה PORT. לפני הכל, בדקו:

# טוב: קורא PORT מסביבה
CMD ["node", "server.js"]  # server.js: const port = process.env.PORT || 3000;

# רע: מקודד פורט
EXPOSE 3000
CMD ["./myapp", "-port", "3000"]

תיקון: החליפו כל פורט מקודד ב-$PORT. Cloud Run מגדיר אותו ל-8080 כברירת מחדל, אבל ה-Dockerfile שלכם לא צריך להקשיח את הערך הזה.

גם בדקו:


שלב 2: העברת env vars ל-Secret Manager

ב-Heroku הגדרתם heroku config:set DATABASE_URL=.... ב-Cloud Run יש שתי אפשרויות:

  1. משתני סביבה של Cloud Run — מתאים לconfig לא-רגיש (feature flags, כתובות שירותים, רמות לוג)
  2. GCP Secret Manager — נדרש לכל דבר רגיש (סיסמאות DB, מפתחות API, סודות OAuth)

לכל סוד מ-Heroku:

# יצירת הסוד
echo -n "your-secret-value" | gcloud secrets create DATABASE_URL 
  --data-file=-

# מתן גישה לשירות Cloud Run
gcloud secrets add-iam-policy-binding DATABASE_URL 
  --member="serviceAccount:your-sa@your-project.iam.gserviceaccount.com" 
  --role="roles/secretmanager.secretAccessor"

בהגדרות שירות Cloud Run שלכם, רכבו את הסוד כמשתנה סביבה. קוד האפליקציה לא משתנה — הוא עדיין קורא process.env.DATABASE_URL. רק המקור משתנה משכבת ה-config של Heroku ל-GCP Secret Manager.

אל תשכחו להעביר את Heroku Postgres. אפשרויות:

למעבר DB ללא downtime, השתמשו ב-pg_dump ו-pg_restore בשעות נמוכות תנועה, ואז החליפו את connection string.


שלב 3: הפריסה הראשונה ל-Cloud Run

ברגע שהקונטיינר מוכן והסודות ב-Secret Manager:

# בנייה ודחיפה ל-Artifact Registry
gcloud builds submit --tag gcr.io/YOUR_PROJECT/myapp:latest

# פריסה ל-Cloud Run
gcloud run deploy myapp 
  --image gcr.io/YOUR_PROJECT/myapp:latest 
  --region us-central1 
  --allow-unauthenticated 
  --set-env-vars "NODE_ENV=production" 
  --update-secrets="DATABASE_URL=DATABASE_URL:latest" 
  --min-instances 0 
  --max-instances 10

Cloud Run נותן לכם URL של *.run.app מיד. בדקו אותו לעומק לפני שנוגעים ב-DNS.

פיצול תעבורה במהלך ה-rollout: Cloud Run מאפשר פיצול תעבורה בין revisions. השתמשו בזה למעבר הראשון:

# פריסת revision חדש, שליחת 10% מהתעבורה אליו
gcloud run services update-traffic myapp 
  --to-revisions=REVISION_ID=10,PREVIOUS_REVISION=90

עקבו אחרי שיעורי שגיאות 15–30 דקות. אם יציבים — העלו ל-50%, אחר כך ל-100%.


שלב 4: Rollback תוך 30 שניות

אם ה-revision החדש מציג בעיות, rollback הוא פקודה אחת:

gcloud run services update-traffic myapp 
  --to-revisions=PREVIOUS_REVISION=100

או לחצו "Edit traffic" ב-Cloud Console. בשונה מ-Heroku — שם git push heroku main עם commit בעייתי משאיר אתכם מתרוצצים לבטל ולדחוף מחדש — Cloud Run שומר את כל ה-revisions הקודמים חיים עד שמוחקים אותם ידנית. ה-rollback מיידי, לא פריסה מחדש.


שלב 5: ניתוב DNS

לאחר שה-revision החדש יציב ומגיש תעבורת בדיקות:

  1. הוסיפו custom domain: Cloud Console → Cloud Run → השירות שלכם → Manage Custom Domains
  2. הוסיפו רשומת CNAME או A לפי מה שCloud Run מראה לכם
  3. המתינו להפצה (5 דקות עד כמה שעות בהתאם ל-TTL)
  4. וודאו ש-HTTPS פעיל — Cloud Run מפרסם תעודת TLS מנוהלת אוטומטית
  5. הסירו את ה-custom domain הישן מ-Heroku

השאירו את אפליקציית Heroku רצה 48 שעות לאחר ניתוב DNS, ליתר ביטחון.


השוואת עלויות: Heroku מול Cloud Run

הגדרה Heroku Cloud Run
2 dynos (Standard-2x) $100/חודש ~$15–30/חודש
Postgres (Standard-0, 25 GB) $50/חודש Cloud SQL ~$25/חודש
Custom domain + SSL כלול כלול
Auto-scaling תוסף בתשלום מובנה
פריסה ללא downtime מובנה מובנה
Rollback פריסה מחדש ידנית פיצול תעבורה לפי revision
סה"כ טיפוסי לסטארטאפ $150–300+/חודש $40–80/חודש

הפער גדל ב-scale. תמחור dyno של Heroku קבוע ללא קשר לתעבורה. מודל per-request של Cloud Run אומר שסוף שבוע שקט כמעט לא עולה כלום.


מכשולים נפוצים

Sticky sessions. Cloud Run הוא stateless ומאוזן על פני instances. אם האפליקציה תלויה ב-sticky sessions (נפוץ עם Socket.io או session stores בצד שרת), העברו מצב session ל-Redis (Cloud Memorystore) לפני המעבר.

עבודות מתוזמנות (Heroku Scheduler). ל-Cloud Run אין scheduler מובנה. השתמשו ב-Cloud Scheduler כדי להפעיל Cloud Run job לפי לוח זמנים cron, או עברו ל-Cloud Tasks לעבודות מבוססות תור.

Background workers. אם אתם משתמשים ב-worker dynos של Heroku לצרכני תור, פרסו אותם כשירות Cloud Run נפרד עם --min-instances 1 כדי שלא יסקייל ל-zero בזמן המתנה להודעות.

אפליקציות WebSocket. Cloud Run תומך ב-WebSockets, אבל צריך HTTP/2 מופעל והsessions לא sticky. ארכיטקטו reconnection בצד ה-client.


המעבר במבט אחד

שלב מה לעשות מה לשים לב
1. ביקורת Dockerfile PORT מסביבה, stateless, הפעלה מהירה פורטים מקודדים, כתיבה לדיסק
2. סודות מעבר ל-Secret Manager, הרשאה ל-SA אל תשכחו credentials של DB
3. פריסה ראשונה gcloud run deploy, בדיקה על *.run.app cold start, health check
4. פיצול תעבורה 10% ← 50% ← 100%, מעקב שגיאות עלייה בשגיאות = rollback
5. ניתוב DNS custom domain, TLS מנוהל השאירו Heroku פעיל 48 שעות

מה הלאה

Cloud Run הוא צעד טבעי מעלה מ-Heroku — אותה פשטות, כלכלה טובה יותר, וגדל עמכם מ-100 ל-1M משתמשים ללא ארכיטקטורה מחדש. ברגע שאתם ב-Cloud Run, הצעד הבא הוא חיבור pipeline CI/CD מסודר כך שכל push ל-main יבנה, יבדוק ויפרס אוטומטית — בלי שאף אחד ירוץ gcloud run deploy ידנית.

קראו צ׳קליסט ה-CI/CD הראשון שלכם להגדרה המדויקת, ומדריך ה-DevOps לסטארטאפ לתמונת הפלטפורמה המלאה.

מבצעים מעבר מ-Heroku או VM ורוצים שמישהו יבדוק את ה-setup שלכם לפני ניתוב ה-DNS? הזמינו שיחת היכרות חינם — נבחן את הארכיטקטורה שלכם ונמסור לכם תוכנית מעבר.

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *