מודול 2 · בשרת — שיעור 5 מתוך 5

פריסה בלי רגע של אי־ודאות

12 דקות קריאה

התחברו כדי שההתקדמות בקורס תישמר בחשבון.

הפריסה היא פעולה שגרתית, לא אירוע

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

הרצף

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 השינוי לא נכנס לתוקף תמיד פריסה מחדש אחרי שינוי קונפיגורציה

השאלה ששווה לשאול לפני כל פריסה

"אם זה יישבר עכשיו, איך אני חוזר אחורה בדקה?" אם אין תשובה — זה לא הזמן לפרוס. זה הזמן להכין את התשובה.