הפריסה היא פעולה שגרתית, לא אירוע
פריסה טובה היא כזו שאפשר לעשות בשלוש אחר הצהריים, לבד, בלי לחשוב פעמיים. זה לא מגיע מהחלטות אמיצות — זה מגיע מכך שכל שלב הפיך וכל שלב נבדק.
הרצף
build → test → migrate → deploy → verify → (rollback if needed)
בכל שלב: מה יכול להיכשל, ומה עושים אז.
1. build — הבנייה עצמה צריכה להיות זהה לזו שנבדקה. אם בונים שוב בשרת, אתם פורסים משהו אחר ממה שבדקתם.
2. test — הבדיקות חייבות לרוץ לפני הפריסה, לא אחריה. גם בדיקת tsc --noEmit.
3. migrate — מיגרציות בסיס נתונים הן השלב המסוכן. הכלל: קדימה תואמת. הוסף עמודות, אל תמחק; שנה קוד קודם, ואת הנתונים אחר כך. מיגרציה שמוחקת עמודה שהגרסה הקודמת עוד קוראת היא דרך בטוחה לשבור את האתר בזמן מעבר.
4. deploy — להעלות את הגרסה החדשה, לוודא שהיא עולה, ואז להעביר אליה תעבורה.
5. verify — לא להסתפק ב-200 על דף הבית. בדקו:
curl -sf https://academy.haviv.pro/readyz
curl -sf https://academy.haviv.pro/version
curl -s -o /dev/null -w "%{http_code}\n" https://academy.haviv.pro/courses
curl -s https://academy.haviv.pro/courses | grep -q "החיפוש" || echo "התוכן לא עלה"
בדיקה לפי תוכן ולא לפי סטטוס: גרסה ישנה מחזירה גם היא 200.
6. rollback — לדעת מראש איך חוזרים. עם תמונות מתויגות זה deploy previous-tag ולוקח דקה. בלי תיוג, אין rollback — יש שחזור מגיבוי, וזה סיפור אחר.
טעויות שמכאיבות שוב ושוב
| טעות | הסימפטום | התיקון |
|---|---|---|
| משתנה סביבה חדש לא נוסף לסביבה | undefined בפרודקשן בלבד |
רשימת משתנים בגבול האתחול, נבדקת בעלייה |
| מיגרציה שרצה פעמיים | כשל בהרצה שנייה | CREATE TABLE IF NOT EXISTS, טבלת מצב מיגרציות |
| בנייה שנשענת על cache של מכונה | "עובד אצלי" | בנייה בתמונה נקייה / CI |
| שכחת restart אחרי עדכון env | השינוי לא נכנס לתוקף | תמיד פריסה מחדש אחרי שינוי קונפיגורציה |
השאלה ששווה לשאול לפני כל פריסה
"אם זה יישבר עכשיו, איך אני חוזר אחורה בדקה?" אם אין תשובה — זה לא הזמן לפרוס. זה הזמן להכין את התשובה.