1 שלב הבסיס

ה-Free Stack — מה אתה באמת מקבל ב-$0, ופריסה תוך 10 דקות

מפה מלאה של מה חינמי באמת אצל Cloudflare מול מה שנראה חינמי, ואיך לפרוס Worker חי עם Static Assets ל-URL ציבורי תוך פחות מ-10 דקות — בלי כרטיס אשראי.

מה יהיה לך ביד בסוף הפרק
מטרות למידה
מה צריך לפני שמתחילים
חוט הפרויקט

הפרק הקודם: אין — זהו הפרק הראשון. מתחילים מאפס.

הפרק הזה: ממפים את כל ה-free tier, פורסים Worker חי עם Static Assets, וחושפים אותו ב-HTTPS — ומסיימים עם wrangler.toml בסיסי וטבלת מטריצה ביד.

הפרק הבא (פרק 2 — Workers ו-Storage): ניקח את אותו wrangler.toml ונוסיף לו bindings של KV / D1 / R2 / Durable Objects, ונפצח את "קיר ה-10ms" — מתי CPU נשרף ומתי לא.

מילון מונחים — פרק 1
מונחבעבריתהסבר
Workersוורקרזפונקציות serverless שרצות על ה-edge של Cloudflare ב-300+ ערים, כל אחת ב-isolate משלה. אין שרת לנהל, scale-to-zero, ואין cold start.
V8 isolateאיזולייטמנגנון בידוד קל-משקל של מנוע V8 (אותו מנוע של Chrome/Node) שמריץ את הקוד שלך בנפרד מקוד של אחרים — מהיר יותר ממכולה (container), בלי cold start, אבל בלי filesystem ובלי native modules.
Static Assetsנכסים סטטייםאירוח קבצים סטטיים מובנה ב-Workers (החליף את Workers Sites). מגדירים תיקייה בבלוק [assets] ב-wrangler.toml; ההגשה חינמית ובלתי מוגבלת.
wrangler.tomlקובץ התצורהקובץ התצורה של הפרויקט: שם ה-Worker, נקודת כניסה (main), תאריך תאימות, ובלוקים של bindings ([assets], [[kv_namespaces]], [[d1_databases]], [[r2_buckets]]).
wrangler devשרת פיתוח לוקלישרת פיתוח עם hot reload שמדמה את סביבת ה-edge דרך Miniflare; ברירת מחדל http://localhost:8787.
wrangler deployפקודת הפריסההפקודה שמעלה את ה-Worker ואת ה-Static Assets ל-edge ומפעילה אותו על URL חי בתבנית <name>.<subdomain>.workers.dev.
Miniflareסימולטור לוקלימנוע סימולציה לוקלי שמריץ את ה-Worker וה-bindings (KV/D1/R2/DO) על המחשב שלך בזמן wrangler dev — מובנה ב-Wrangler מאז v3.
.dev.varsסודות לוקלייםקובץ בפורמט dotenv (KEY="value" בכל שורה) לסודות בפיתוח לוקלי בלבד; נקרא רק ע"י wrangler dev וחייב להיות ב-.gitignore. המקבילה ל-production היא wrangler secret put.
Quick Tunnelמנהרה זמניתמנהרה חינמית (*.trycloudflare.com) שחושפת localhost ב-HTTPS בלי חשבון ובלי port forwarding. Testing-only: תקרת 200 בקשות במקביל, ואין SSE.
Workers Paidתוכנית בתשלוםתוכנית של $5/חודש מינימום שמסירה את תקרת ה-requests היומית ומעלה את ה-CPU ל-30 שניות (עד 5 דקות), 10,000 subrequests, 250 Cron ו-script של 10MB.
c3אשף יצירת פרויקטcreate-cloudflare — אשף ה-scaffolding ליצירת פרויקט חדש: npm create cloudflare@latest -- <name>. מציע תבניות Hello World / framework starters ומתקין dependencies.
.assetsignoreקובץ החרגהקובץ שמורה ל-Static Assets אילו קבצים לא להעלות (בעיקר node_modules, .git, .dev.vars). בלעדיו wrangler עלול להעלות עשרות אלפי קבצים ולחצות את מגבלת 20,000 הקבצים.
Neuronsנוירונים(אזכור קל בלבד בפרק זה) יחידת compute שמנרמלת את מחיר ה-AI inference ב-Workers AI; ה-free tier הוא 10,000 neurons/day. נכסה לעומק בפרק 3.
מתחיל8 דקותחינםמושג

למה הפרק הזה: מ-"נראה חינמי" ל-"באמת חינמי"

אתה כבר בונה דברים. פותח את Claude Code או Cursor, מתאר מה אתה רוצה, ותוך כמה דקות יש קוד שעובד על המחשב שלך. הבעיה היחידה? הקוד הזה רץ ב-localhost. אף אחד חוץ ממך לא יכול לראות אותו. וברגע שאתה רוצה לפרוס אותו לעולם — מתחיל מבול של החלטות: איפה לארח? מה זה יעלה? מתי החשבון יקפוץ פתאום ל-$40/חודש?

Cloudflare פותרת בדיוק את החלק הזה, ועושה את זה עם ה-free tier הכי נדיב בענף — אם יודעים לקרוא אותו נכון. הבעיה: יש שלושה סוגים של "חינם" אצל Cloudflare, ורובם נראים זהים מבחוץ עד שמגיע החיוב:

המטרה של הפרק הזה היא לתת לך מפה מנטלית מדויקת של שלוש הקטגוריות האלה, ולפרוס דבר ראשון חי כדי שהמילים "Worker", "deploy" ו-"workers.dev" יהפכו ממונחים מופשטים לדבר שאתה כבר עשית. אנחנו לא הולכים לכסות את כל המוצרים לעומק — לכל אחד מהם מוקדש פרק. אנחנו הולכים לבנות את ה-מסגרת שתשרת אותך עד סוף הקורס.

למה ההבחנה הזו בין שלושת סוגי ה"חינם" כל-כך קריטית? כי הסיפורי-אימה שאתה שומע על "חשבון ענן שקפץ ל-$500 בלילה" כמעט תמיד נובעים מבלבול בין הקטגוריות. מישהו בנה על מוצר "לא-חינם" בהנחה שהוא חינמי, או לא שם לב שעבר את הקיר של "חינם-עד-מגבלה" ונכנס ל-overage. כשאתה יודע מראש לאיזה דלי כל מוצר שייך, אתה בשליטה מלאה על העלות — בלי הפתעות. זו לא רק ידיעה טכנית, זו שקט נפשי.

ועוד הבטחה: בסוף הפרק לא רק שתבין את התיאוריה — יהיה לך אתר חי באינטרנט שאתה פרסת, ב-URL ציבורי, שעובד מהטלפון. זה לא תרגיל "צעצוע"; זו בדיוק אותה זרימה (createdevdeploy) שתשתמש בה לכל פרויקט אמיתי בהמשך. אנחנו בונים שריר, לא רק קוראים על אימון.

הערה על המספרים בפרק: Cloudflare משנה מחירים, מגבלות ומוצרים תכופות. כל המספרים פה אומתו מול התיעוד הרשמי בתאריך הכנת הקורס (מאי 2026), אבל הסעיפים הרגישים מסומנים — תמיד שווה לאמת מול הדף הרשמי לפני בנייה כבדה.

למי הפרק הזה (וממה אנחנו מניחים שאתה כבר יודע)

הקורס הזה מדבר אל Vibe Coder — מי שבונה דברים אמיתיים עם כלי AI (Claude Code, Cursor, V0, Lovable), נוח בטרמינל, יודע לקרוא קוד JavaScript/TypeScript אבל לא בהכרח כותב אותו מאפס. אם זה אתה, יש לך יתרון ענק: ה-AI כותב את הקוד, אבל מישהו צריך להחליט איפה הוא רץ ומה הוא עולה — וזה בדיוק הפער שהקורס סוגר. ה-AI לא ידע בשבילך שאתה הולך לשבור את מגבלת KV writes, או ש-Stream יעלה לך כסף; את ההחלטות האלה אתה מקבל, והפרק הזה נותן לך את הכלים.

אנחנו לא מניחים שאתה מכיר את Cloudflare. נתחיל מפתיחת חשבון. אנחנו כן מניחים שיש לך טרמינל, ש-Node מותקן (נבדוק מיד), ושאתה לא נבהל מהרצת פקודה. כל מונח טכני באנגלית מוסבר בפעם הראשונה שהוא מופיע, וכל המונחים מרוכזים במילון בראש הפרק.

למה דווקא Cloudflare ולא Vercel, Netlify או AWS? שלוש סיבות: ה-free tier הנדיב באמת (לא trial ל-30 יום), ה-$0 egress של R2 (חוסך הון כשמגישים קבצים), והעובדה שהכל יושב על edge אחד — compute, storage, AI ו-media באותו מקום, מחוברים ב-bindings. בשביל מי שבונה לבד ורוצה לפרוס מהר בלי להפוך ל-DevOps engineer, זה השילוב הקשה ביותר לנצח.

עשו עכשיו 3 דקות

פתח טאב חדש ל-https://dash.cloudflare.com/sign-up. אם אין לך חשבון — הירשם עכשיו (אימייל + סיסמה, בלי כרטיס אשראי). אם כבר יש לך, רק ודא שאתה מחובר. זה כל מה שצריך כדי לפרוס על ה-Workers Free plan.

מתחיל9 דקותחינםמושג

מפת ה-Developer Platform: כל המוצרים על דף אחד

כשנכנסים לראשונה ל-Cloudflare Developer Platform זה מציף: עשרות שמות מוצרים, כל אחד עם דף תיעוד משלו. אבל יש סדר מתחת לבלגן. אפשר לחלק את הכל ל-חמש שכבות, וכל המוצרים נתלים על דבר אחד מרכזי — ה-Worker.

שכבהמה היא עושהמוצרים עיקריים
Computeהרצת הקוד שלךWorkers, Workflows, Cron Triggers, Queues, Durable Objects
Storageשמירת נתוניםKV (מפתח-ערך), D1 (SQL), R2 (קבצים), Durable Objects (state)
AIinference ו-RAGWorkers AI, Vectorize, AI Gateway, AI Search
Mediaוידאו, תמונות, דפדפןStream, Images, Browser Rendering, Calls (Realtime)
Edge / Glueחיבור ואבטחהStatic Assets, Tunnel, Turnstile, Zero Trust Access, Email Routing, Analytics Engine

הנקודה החשובה ביותר: ה-Worker הוא המרכז. כל שאר השכבות מתחברות אליו כ-binding — שורה אחת ב-wrangler.toml שאומרת ל-Worker "יש לך גישה ל-KV הזה / D1 הזה / R2 הזה". במקום לנהל קרדנציאלס, מחרוזות חיבור ו-API keys, אתה מצהיר על binding וה-Worker מקבל אובייקט מוכן לשימוש (כמו env.DB או env.BUCKET). זה הדפוס שיחזור על עצמו בכל פרק בקורס.

למה ה-binding כל-כך חשוב? כי הוא מבטל שכבה שלמה של כאב. בענן רגיל, כדי שהקוד שלך יגיע לבסיס נתונים אתה מנהל מחרוזת חיבור עם סיסמה, דואג שהיא לא תדלוף ל-git, מגדיר רשתות ו-firewall. ב-Cloudflare, ה-binding הוא קישור ישיר ברמת הפלטפורמה — אין סיסמה לנהל, אין endpoint ציבורי לחשוף, והגישה מהירה כי הכל באותו edge. כשתבנה את ה-SaaS המלא בפרק 6, ה-wrangler.toml שלך יחזיק את כל ה-bindings יחד — D1, R2, KV, AI — והקוד פשוט יקרא env.DB, env.BUCKET, env.AI. זה כל הסוד.

אל תיבהל מכמות המוצרים. בקורס הזה נוסיף אותם בהדרגה, שכבה אחרי שכבה — בדיוק לפי המפה למעלה. בפרק הזה אנחנו נוגעים ב-Compute (Worker) וב-Edge (Static Assets, Tunnel). בפרק 2 נוסיף את כל שכבת ה-Storage. בפרק 3 את ה-AI. וכן הלאה. עד סוף הקורס, כל קופסה במפה תהיה משהו שכבר השתמשת בו.

טעות שכדאי להימנע ממנה כבר עכשיו: לנסות להבין את כל המוצרים לפני שמתחילים לבנות. זו דרך בטוחה לשיתוק. הגישה הנכונה היא הפוכה — תתחיל עם Worker + Static Assets (מה שתפרוס היום), ותוסיף primitive רק כשיש לך בעיה ספציפית שהוא פותר. צריך לשמור config? תוסיף KV. צריך נתונים רלציוניים? תוסיף D1. צריך לאחסן קבצים שמשתמשים מעלים? תוסיף R2. כל אחד מהם הוא בסך הכל עוד binding ב-wrangler.toml — תוספת של דקות, לא ימים. המפה היא מצפן, לא רשימת מטלות.

Worker המרכז — הכל נתלה כאן Compute Workers · Workflows Cron · Queues · DO Storage KV · D1 · R2 Durable Objects AI Workers AI · Vectorize AI Gateway · AI Search Media Stream · Images Browser · Calls Edge / Glue Static Assets · Tunnel Turnstile · Access · Email
עשו עכשיו 3 דקות

פתח את https://flarecalc.com והסתכל ברשימת המוצרים בצד. סמן לעצמך 3 מוצרים שאתה לא מכיר בכלל — נחזור אליהם לאורך הקורס. (FlareCalc הוא כלי צד-שלישי, לא של Cloudflare, אבל הוא מעודכן ל-2026 ושימושי לאמידת עלות.)

בינוני9 דקותחינםמושג

Workers על Isolates: למה אין Cold Start ולמה זה משנה לך

אם אתה בא מ-AWS Lambda או מ-Vercel functions, אתה מכיר את ה-cold start — הבקשה הראשונה אחרי שקט מחכה שניות עד שהקונטיינר נטען. ב-Workers אין דבר כזה, וזה לא טריק שיווקי. זה נובע מארכיטקטורה שונה לחלוטין.

במקום להריץ כל פונקציה בקונטיינר (מכולה) משלה, Cloudflare מריצה אותה ב-V8 isolate — אותו מנגנון בידוד שבו Chrome מפריד בין טאבים. ה-isolate הוא קל-משקל בקיצוניות: אלפי isolates חיים באותו תהליך, וההפעלה של אחד חדש לוקחת מילי-שניות בודדות, לא שניות. התוצאה: ה-Worker שלך רץ קרוב למשתמש (ב-300+ ערים ברחבי העולם), נטען מיידית, ו-scale-to-zero — כשאף אחד לא משתמש בו, הוא לא צורך כלום, ולא משלמים על זמן המתנה.

למה זה משנה לך בפועל? כי המודל הזה הופך כל פרויקט קטן לזול עד אפס. ב-AWS Lambda מאחורי API Gateway, אפילו אפליקציה שאף אחד לא משתמש בה יכולה לצבור עלויות (provisioned concurrency, idle resources). ב-Workers, אם אין תעבורה — אין עלות, נקודה. אתה יכול לפרוס עשרה פרויקטי-צד שונים, להשאיר אותם חיים לנצח, ולשלם $0 כל עוד הם לא חוצים את הקוטה. זה משחרר אותך לנסות רעיונות בלי לחשב כל הזמן "כמה זה ידלוף לי בחשבון".

אבל יש מחיר. ה-isolate מגיע עם מגבלות שחשוב להפנים כבר עכשיו, כי הן יקבעו מה אפשר ומה אי-אפשר לפרוס:

מגבלת isolateמה זה אומר בפועל
128MB זיכרוןזהה ב-free וב-paid. מספיק לרוב ה-APIs; לא מספיק לטעון מודל גדול לזיכרון או לעבד קובץ ענק.
אין filesystemאי-אפשר לכתוב/לקרוא קבצים מהדיסק. לאחסון משתמשים ב-R2 / KV / D1 (binding), לא ב-fs.
אין native modulesחבילות npm שתלויות בקוד C/C++ מקומפל (כמו sharp או bcrypt native) לא ירוצו. צריך חלופות pure-JS או WebAssembly.
10ms CPU (free)הקיר החשוב ביותר — נפרק אותו לעומק בפרק 2. בקצרה: זה זמן חישוב, לא זמן wall-clock.

נקודת מפתח שתחזור בכל הקורס: ה-isolate רץ אצל Cloudflare, אבל כלי הפיתוח רצים אצלך. wrangler, node ו-npm מותקנים על המחשב שלך ומריצים סימולציה לוקלית של ה-edge (Miniflare). זאת הסיבה ש-"פריסה תוך 10 דקות" מניחה ש-Node כבר מותקן — בלעדיו אין כלום.

מה זה אומר בפועל לדבר שאתה פורס

בוא נתרגם את המגבלות האלה למקרים אמיתיים שתיתקל בהם כ-Vibe Coder, כי ההבדל בין "הבנתי את התיאוריה" ל"לא אבזבז שעה על באג" הוא בדיוק כאן:

הכלל המנטלי: Worker מצוין ב-glue ובהזרמת נתונים, פחות טוב ב-compute כבד. כשה-AI כותב לך קוד שעושה הרבה עיבוד מקומי, עצור ושאל — האם זה צריך לרוץ ב-Worker, או שיש primitive מנוהל שעושה את זה בשבילי?

עשו עכשיו 3 דקות

פתח טרמינל והרץ node -v ו-npm -v. אם אחד מהם לא מותקן — התקן Node LTS מ-nodejs.org לפני שממשיכים. זו ההנחה הסמויה מאחורי "פריסה תוך 10 דקות": Node קיים, ויש לך גישה לטרמינל.

בינוני10 דקותחינםמושג

ה-Free Tier המלא במספרים: מה מקבלים ב-$0

זה הסעיף שתחזור אליו שוב ושוב. כל המספרים פה אומתו מול התיעוד הרשמי (מאי 2026). שמור אותו — בתרגיל 2 תהפוך אותו לטבלה אישית לאפליקציה שלך.

Compute — מה ה-Worker עצמו מקבל

מגבלהFreeהערה
בקשות ליום100,000 / day≈ 3M/חודש. בקשות ל-Static Assets לא נספרות.
CPU per request10msזמן חישוב, לא wall-clock (פרק 2).
Subrequests per request50כמה fetch() חיצוניים בבקשה אחת.
זיכרון128MBזהה ב-paid.
גודל script (דחוס)3MBpaid מעלה ל-10MB.
Cron Triggers5משימות מתוזמנות לחשבון.

Storage — איפה שומרים נתונים

מוצרFree tierלמה הוא טוב
Static Assetsהגשה חינם ובלתי מוגבלת; 25MiB/קובץ; 20,000 קבציםSPA, אתרים סטטיים, נכסים.
KV100,000 reads / 1,000 writes ליום; 1GB; ערך עד 25MiB; מפתח עד 512Bconfig, feature flags, sessions, cache.
D1 (SQLite)5M rows read / 100,000 rows written ליום; 5GBנתונים רלציוניים ומובנים.
R2 (קבצים)10GB; 1M Class A (כתיבות); 10M Class B (קריאות); $0 egressהעלאות, תמונות, גיבויים. ה-egress החינמי הוא היתרון הגדול.
Queues10,000 ops/day; retention 24h (לא-נשלט)תורי עבודה. חינם מ-2026.

תוספות שכדאי לזכור

שים לב ל-אסימטריה בין reads ל-writes. KV נותן 100,000 קריאות אבל רק 1,000 כתיבות. D1 נותן 5 מיליון שורות-קריאה אבל "רק" 100,000 שורות-כתיבה. הדפוס הזה — קריאות זולות, כתיבות יקרות — הוא בדיוק מה שיקבע איזו מגבלה תיפול ראשונה אצלך. נחזור לזה בסעיף ה-$5.

איך לקרוא את המספרים האלה נכון

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

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

עשו עכשיו 4 דקות

כתוב בשורה אחת איזו אפליקציה אתה רוצה לבנות (למשל "כלי שמסכם מאמרים"). לצד כל primitive ברשימה (Workers / KV / D1 / R2) נחש כמה פעולות ביום היא תעשה. שמור את הנייר הזה — נשתמש בו בתרגיל המטריצה ובסעיף ה-$5.

בינוני8 דקותחינם מול בתשלוםאזהרה

מה נראה חינמי אבל לא: Stream, Images Storage, Containers

כאן נופלים הכי הרבה אנשים. כל המוצרים בקטגוריה הזו נראים כמו חלק מ-Cloudflare החינמית, אבל אין להם free tier אחסון/delivery — והחיוב מתחיל מהדקה הראשונה, לפעמים גם אם אף אחד לא משתמש בתוכן.

מוצרמה לא חינםה-workaround החינמי
Stream (וידאו)אין free tier. ~$5 ל-1,000 דקות מאוחסנות + ~$1 ל-1,000 דקות נמסרות. משלמים על אחסון גם אם הסרטון לא נצפה.R2 + HLS self-hosting (פרק 4).
Cloudflare Images (אחסון)אחסון הוא paid-only. רק Image Transforms (resize/WebP) חינמיים — 5,000 לחודש.R2 (10GB) + Image Transforms (פרק 4).
Containerspaid-only, דורש Workers Paid ($5 מינימום). GA מאפריל 2026.Workers + isolate לרוב המקרים; Containers רק כשחייבים runtime מלא.
Email — שליחהשליחת email דורשת תוכנית בתשלום.Email Routing (קבלת email) חינם לחלוטין (פרק 5).
Analytics Engineחינם כרגע, אבל החיוב כבר מתוכנן — "free forever" זמני.השתמש, אבל אל תבנה production קריטי בהנחה שזה יישאר חינם (פרק 5).

הכלל הפשוט: וידאו ותמונות מאוחסנות עולות כסף, גם ב-Cloudflare. מה שחינם זה ה-compute (Worker), האחסון הגנרי (R2/KV/D1) וההגשה הסטטית. ברגע שאתה רואה מוצר מדיה מנוהל — עצור ובדוק ב-FlareCalc לפני שאתה בונה עליו.

למה Cloudflare בכלל מציעה את המוצרים ה"לא-חינמיים" האלה אם יש workaround חינמי לכל אחד? כי ה-workaround עולה לך בעבודה. Stream נותן לך transcoding אוטומטי, HLS, ו-player מובנה — דברים שתצטרך לבנות בעצמך עם R2 + HLS. Cloudflare Images נותן ניהול מלא של נכסי תמונה. הבחירה היא קלאסית: זמן מול כסף. בתור Vibe Coder בתחילת פרויקט, כמעט תמיד עדיף ה-workaround החינמי (R2 + Transforms) — אתה עוד לא יודע אם הפרויקט ישרוד, אז למה לשלם. אם וכאשר תגיע למסה קריטית של וידאו, Stream הופך משתלם. נדון בזה לעומק בפרק 4; כאן העיקר הוא לדעת שהמוצרים האלה לא חינמיים, כדי לא להיתפס.

מקרה מבחן מהיר: נניח שאתה בונה אפליקציה שמאפשרת למשתמשים להעלות תמונת פרופיל ולהציג אותה בגדלים שונים. התחושה אומרת "אשתמש ב-Cloudflare Images, זה בדיוק בשבילי". המציאות: אחסון ב-Cloudflare Images הוא paid. הדרך הנכונה ב-$0: אחסן את המקור ב-R2 (10GB, $0 egress), והגש בגדלים שונים דרך Image Transforms (5,000 unique/חודש חינם). אותה חוויית משתמש בדיוק, אפס עלות. זה בדיוק סוג ההחלטה שהקורס מאמן אותך לקבל אוטומטית.

חינם-לתמיד Static Assets (הגשה) Tunnel Turnstile Email Routing (קבלה) אין תקרת נפח חינם-עד-מגבלה Workers · KV · D1 R2 · Queues Workers AI · Vectorize Image Transforms חינם עד שתיגע בקיר לא-חינם Stream (אחסון/delivery) Images (אחסון) Containers Email (שליחה) צריך workaround / כרטיס
מסגרת החלטה: האם המוצר הזה באמת חינמי? (triage 3-דליים)

לכל מוצר ששאלת לגביו, עבור בשלוש השאלות לפי הסדר:

שאלה 1: האם יש לו free tier בלי תקרת נפח?

שאלה 2: האם יש לו free tier עם מגבלה יומית/חודשית?

שאלה 3: אין free tier אחסון/delivery בכלל?

טעות נפוצה: לבנות על Cloudflare Images storage בהנחה שיש free tier

למה זה מפתה: "Image Transforms" כתוב בגדול עם 5,000 חינם לחודש — אז נראה שכל מה שקשור לתמונות חינמי.

למה זה טעות: אחסון התמונות ב-Cloudflare Images הוא paid-only. רק ה-transform (resize/WebP) חינמי. אם תבנה flow שתלוי באחסון Images — תופתע מחיוב.

מה לעשות במקום: אחסן את התמונות ב-R2 (10GB חינם, $0 egress) והעבר אותן דרך Image Transforms ב-URL. אותה תוצאה, ב-$0.

עשו עכשיו 3 דקות

ב-flarecalc.com נסה להוסיף "Stream" עם 1,000 דקות וידאו מאוחסנות, וראה את העלות החודשית קופצת. זה ה-trap שאתה הולך להימנע ממנו לאורך הקורס.

בינוני8 דקותחינםהחלטה

Static Assets מול Pages ב-2026: על מה להתחיל פרויקט חדש

אם חיפשת איך לארח אתר ב-Cloudflare, בטוח נתקלת ב-Pages וגם ב-Static Assets, ואולי שמעת לחישות ש-"Pages מת". בוא נסדר את זה נכון, כי זה תחום עם הרבה דיסאינפורמציה.

Pages אינו deprecated ואינו sunset. Cloudflare הצהירה זאת בפומבי. פרויקט Pages קיים שעובד ימשיך לעבוד, ולאתר סטטי פשוט עם git CI/CD — Pages עדיין בחירה תקפה לחלוטין.

אבל — וזה ה"אבל" המעשי — ל-Workers יש feature-set רחב בהרבה, והפיצ'רים החדשים נוחתים שם קודם. כמה מהיכולות הבאות זמינות רק על Workers, לא על Pages:

יכולתWorkersPages
Durable Objects bindings
Cron Triggers
Queue consumers
Email Workers
Logpush
Gradual Deployments
Static Assets serving
git CI/CD מובנה✓ (דרך Builds)

המסקנה המעשית: פרויקט full-stack חדש ב-2026 צריך להתחיל על Workers + Static Assets. לא כי Pages "מת", אלא כי אתה רוצה גישה ל-Durable Objects, Cron ו-Queues כשתצטרך אותם — בלי הגירה כואבת באמצע. וזה בדיוק מה שנעשה בפרק הזה: Worker עם בלוק [assets] שמגיש את ה-frontend.

מבחינה מעשית, ההבדל בחוויית הפיתוח קטן. בשני המקרים אתה כותב HTML/CSS/JS (או build של framework כמו React/Svelte) לתיקייה, ו-Cloudflare מגישה אותה מה-edge. ההבדל הוא מה מסביב: על Workers, אותו פרויקט שמגיש את ה-frontend יכול גם להריץ API (ה-Worker עצמו), לגשת ל-D1, לתזמן Cron ולצרוך Queues — הכל ב-wrangler.toml אחד. על Pages תצטרך Pages Functions נפרדות עם פחות יכולות. בשביל Vibe Coder שבונה SaaS שלם, זה ההבדל בין מקום אחד לכל הלוגיקה לבין פיצול מלאכותי.

עוד נקודה ששווה לדעת: גם Workers תומך ב-git CI/CD מובנה (Workers Builds) — אז גם הטיעון הקלאסי בעד Pages ("רק על Pages יש deploy אוטומטי מ-git") כבר לא תקף ב-2026. אין כמעט מקרה שבו פרויקט חדש חייב להתחיל על Pages.

מסגרת החלטה: Pages מול Workers + Static Assets לפרויקט חדש

שאלה 1: זה פרויקט חדש ב-2026?

שאלה 2: יש לך פרויקט Pages קיים שעובד, ואתה לא צריך פיצ'ר Workers-only?

שאלה 3: אתה צריך פיצ'ר ש-Workers-only (למשל Durable Objects או Cron)?

טעות נפוצה: להכריז ש-"Pages מת" (או הפוך — להתעלם מ-Workers)

למה זה מפתה: ראית פוסטים שאומרים ש-Cloudflare זונחת את Pages, אז מסקת ש-Pages פסול לחלוטין — או הפוך, ראית מדריך ישן שמתחיל הכל על Pages.

למה זה טעות: Cloudflare הצהירה במפורש ש-היא לא עושה sunset ל-Pages. מצד שני, פיצ'רים חדשים (DO bindings, Cron, Queue consumers, Email Workers, Logpush, Gradual Deployments) נוחתים על Workers קודם — אז להתחיל full-stack חדש על Pages זה לחסום את עצמך מראש.

מה לעשות במקום: פרויקט חדש → Workers + Static Assets בגלל ה-feature-set. פרויקט Pages קיים שעובד → השאר אותו, אל תהגר בלי סיבה. אל תנסח "deprecated/frozen/מת".

עשו עכשיו 4 דקות

פתח את https://developers.cloudflare.com/workers/static-assets/migrate-from-pages/ וקרא רק את טבלת ההשוואה של הפיצ'רים. סמן פיצ'ר אחד שיש ב-Workers ואין ב-Pages שרלוונטי לאפליקציה שאתה רוצה לבנות.

בינוני11 דקותחינםתרגול

מתקינים את הסביבה: c3, wrangler dev, Miniflare ו-.dev.vars

עכשיו לחלק שאתה מחכה לו — לפרוס משהו חי. נתחיל ביצירת השלד. הכלי הוא c3 (create-cloudflare), אשף שיוצר פרויקט מוכן, מתקין dependencies ומגדיר wrangler.toml ראשוני.

הפקודה (זו הפקודה המאומתת — העתק בדיוק):

npm create cloudflare@latest -- my-first-worker

(אם אתה מעדיף pnpm או yarn: pnpm create cloudflare@latest my-first-worker או yarn create cloudflare my-first-worker.)

האשף ישאל כמה שאלות. לפרק הזה בחר את התבנית "Hello World example" → "Worker only" — Worker בסיסי שמחזיר טקסט. עצור לפני שלב ה-deploy (אם האשף מציע לפרוס בסוף — סרב בינתיים), כי אנחנו רוצים להבין כל שלב.

הקובץ החשוב: wrangler.toml

זה לב הפרויקט. הנה מבנה בסיסי תקין (מאומת מול התיעוד) עם בלוק [assets] לאתר סטטי:

name = "my-first-worker"
main = "src/index.ts"
compatibility_date = "2026-05-01"
compatibility_flags = ["nodejs_compat"]

# Static Assets: הגשת קבצים מתיקיית ./public, וחשיפת env.ASSETS
# ל-Worker כדי שיוכל ליפול חזרה לקבצים סטטיים ב-routes של SPA.
[assets]
directory = "./public"
binding = "ASSETS"

# bindings שתוסיף בהמשך הקורס (כולם free-tier) — כרגע מוערים:
# [[kv_namespaces]]
# binding = "MY_KV"
# id = "<your-kv-namespace-id>"
#
# [[d1_databases]]
# binding = "DB"
# database_name = "my-app-db"
# database_id = "<your-d1-database-id>"

טיפ: לאתר סטטי לחלוטין (בלי קוד Worker) אפשר למחוק את שורת main ואת שורת binding, ולהשאיר רק directory — Cloudflare תגיש את הקבצים בלי Worker בכלל. בקורס הזה נשאיר Worker, כי בפרק הבא נוסיף לו לוגיקה.

הרצה לוקלית: wrangler dev + Miniflare

היכנס לתיקיית הפרויקט והרץ:

npx wrangler dev

זה מפעיל שרת פיתוח לוקלי על http://localhost:8787 עם hot reload — כל שינוי בקוד מתעדכן מיד. מתחת למכסה המנוע רץ Miniflare, סימולטור שמריץ את ה-Worker ואת ה-bindings (KV/D1/R2) על המחשב שלך, כך שאתה מפתח בלי לגעת בענן. (יש גם npx wrangler dev --remote שמריץ מול ה-edge האמיתי — שימושי כש-Miniflare לא מדמה משהו במדויק.)

למה שני מצבים? Miniflare (ברירת המחדל, לוקלי) מהיר, חינמי ולא נוגע בקוטה — אידיאלי ל-90% מהפיתוח. אבל הוא סימולציה, ולפעמים יש פערים: מודל ה-consistency של KV, התנהגות מדויקת של Workers AI, או binding שעוד לא ממומש מקומית. כשמשהו עובד ב-wrangler dev אבל נשבר אחרי deploy, הצעד הראשון לדיבוג הוא להריץ wrangler dev --remote ולראות אם הבעיה מופיעה מול ה-edge האמיתי. זה חוסך שעות.

סודות לוקליים: .dev.vars

כשתצטרך מפתח API או סוד בפיתוח, אל תכתוב אותו בקוד ואל תשים אותו ב-[vars] (שם הוא plaintext ונכנס ל-git). במקום זה, צור קובץ .dev.vars בשורש הפרויקט בפורמט dotenv:

API_KEY="sk-local-dev-value"
DATABASE_URL="postgres://user:pass@host:5432/db"

.dev.vars נקרא רק ע"י wrangler dev, וחייב להיכנס ל-.gitignore. המקבילה ל-production היא npx wrangler secret put SECRET_NAME — שמצפין את הסוד בצד השרת.

טעות נפוצה: לשים סוד אמיתי ב-[vars] או לעשות commit ל-.dev.vars

למה זה מפתה: [vars] נראה כמו המקום הטבעי ל-variables, ו-.dev.vars נמצא בשורש הפרויקט "אז למה לא לשמור אותו".

למה זה טעות: [vars] הוא plaintext שנכנס ל-deploy ול-git — כל מי שרואה את ה-repo רואה את הסוד. .dev.vars ב-commit חושף את הסודות הלוקליים בהיסטוריית git לנצח.

מה לעשות במקום: .dev.vars לפיתוח (ב-gitignore), wrangler secret put ל-production. לעולם לא סוד אמיתי ב-[vars].

עשו עכשיו 4 דקות

הרץ npm create cloudflare@latest -- my-first-worker ובחר "Hello World example" → "Worker only". עצור לפני deploy — רק תן ל-c3 ליצור את התיקייה.

עשו עכשיו 3 דקות

היכנס לתיקיית הפרויקט והרץ npx wrangler dev. פתח את http://localhost:8787 בדפדפן וודא שאתה רואה את תגובת ה-Worker. עצור עם Ctrl+C.

עשו עכשיו 3 דקות

צור קובץ .dev.vars בשורש הפרויקט עם שורה אחת: API_KEY="sk-local-dev-value". הוסף .dev.vars ל-.gitignore עכשיו, לפני כל commit.

בינוני10 דקותחינםתרגול

הפריסה הראשונה: wrangler deploy ל-URL חי

זה הרגע. שני שלבים ויש לך URL ציבורי. ראשית מתחברים, ואז פורסים.

שלב 1 — התחברות

npx wrangler login

זה יפתח מסך OAuth בדפדפן שמבקש לאשר ל-Wrangler גישה לחשבון Cloudflare שלך. אל תיבהל — זה צפוי, וזו דרך החיבור הסטנדרטית. אחרי האישור, ה-token נשמר לוקלית. ודא שאתה מחובר לחשבון הנכון:

npx wrangler whoami

למה OAuth ולא הדבקת API token? כי זו הדרך הבטוחה והמהירה למתחיל. ה-OAuth flow מאמת אותך מול הדפדפן שכבר מחובר ל-Cloudflare, ושומר token מצומצם-הרשאות לוקלית. אין צורך ליצור token ידנית, להעתיק אותו, או לדאוג שידלוף. (למתקדמים ול-CI/CD יש דרך אחרת — משתנה סביבה CLOUDFLARE_API_TOKEN — אבל לפיתוח לוקלי, wrangler login הוא הנכון.) אם wrangler whoami מראה את האימייל והחשבון הנכונים, אתה מוכן.

שלב 2 — פריסה

npx wrangler deploy

בפעם הראשונה Cloudflare תבקש ממך לבחור subdomain לחשבון (למשל nadav-dev). זה קורה פעם אחת בלבד — מכאן והלאה כל ה-Workers שלך יחיו תחת אותו subdomain. אחרי הפריסה ה-Worker חי בכתובת:

https://<WORKER_NAME>.<YOUR_SUBDOMAIN>.workers.dev

למשל https://my-first-worker.nadav-dev.workers.dev. פתח אותה — היא חיה, ב-HTTPS, נגישה מכל מקום בעולם. שים לב שקיבלת HTTPS בלי לעשות כלום — בלי תעודת SSL, בלי הגדרת DNS, בלי שרת. זה חלק ממה שהופך את workers.dev לכלי כל-כך מהיר לדמואים.

כמה דברים ששווה לדעת על ה-URL הזה: ה-subdomain (nadav-dev בדוגמה) משותף לכל ה-Workers בחשבון, ושם ה-Worker (my-first-worker) נקבע משדה name ב-wrangler.toml. אם תשנה את name ותפרוס שוב — תקבל URL חדש, וה-Worker הישן יישאר חי תחת השם הקודם (עד שתמחק אותו). לכתובת ייצור אמיתית (דומיין משלך) מחברים custom domain — אבל זה לפרק מתקדם; ל-MVP ולדמו, *.workers.dev מספיק לחלוטין.

אתר סטטי + Worker יחד

אם הוספת בלוק [assets] עם directory = "./public", אז wrangler deploy מעלה גם את הקבצים הסטטיים. ה-binding ASSETS מאפשר ל-Worker שלך ליפול חזרה לקובץ סטטי (דפוס שימושי ל-SPA: כל route לא-מוכר מחזיר את index.html). זה בדיוק מה שתבנה בתרגיל 1.

בפועל זה עובד כך: כשבקשה מגיעה, Cloudflare בודקת קודם אם יש קובץ סטטי תואם בתיקיית ה-assets. אם כן — היא מגישה אותו ישירות (חינם, בלי להפעיל את ה-Worker). אם לא — הבקשה עוברת לקוד ה-Worker, שיכול להחליט מה לעשות: להחזיר תשובת API, או — בעזרת env.ASSETS.fetch() — להחזיר את index.html כדי שה-router בצד הלקוח (React Router, למשל) יטפל ב-route. זה הדפוס הסטנדרטי ל-SPA full-stack: frontend סטטי + API באותו Worker, באותו URL, ב-deploy אחד. ה-index.html הראשון שלך יכול להיות פשוט כמו:

<!DOCTYPE html>
<html lang="he" dir="rtl">
<head><meta charset="UTF-8"><title>האתר שלי</title></head>
<body>
  <h1>האתר הראשון שלי על Cloudflare</h1>
  <p>פרוס על ה-edge, חי בכל העולם, ב-$0.</p>
</body>
</html>

שמור אותו ב-./public/index.html, וה-deploy יגיש אותו בשורש ה-URL.

Logs חיים

לראות מה קורה ב-Worker בזמן אמת:

npx wrangler tail

זה מזרים לטרמינל כל בקשה ו-console.log מה-Worker הפרוס — כלי הדיבוג הראשון שתשתמש בו. בניגוד ל-wrangler dev שמראה logs לוקליים, wrangler tail מראה לך מה קורה ב-Worker החי, מול תעבורה אמיתית. כשמשתמש מדווח "האתר נשבר אצלי", זה הדבר הראשון שתפעיל כדי לראות את השגיאה בזמן אמת.

שלוש טעויות התחלה נפוצות בפריסה הראשונה, שכדאי להכיר מראש: (1) לשכוח wrangler login — ה-deploy ייכשל עם שגיאת אימות; הפתרון פשוט, פשוט להתחבר. (2) שם Worker תפוס או לא חוקי — שמות מותר להם אותיות קטנות, מספרים ומקפים בלבד; אם name ב-wrangler.toml מכיל רווח או אות גדולה, תקבל שגיאה. (3) לבחור subdomain בחיפזון — ה-subdomain קבוע לחשבון, אז בחר שם נקי וקריא (לא test123) כי הוא יופיע בכל URL שתפרוס. אף אחת מאלה לא קריטית — כולן הודעות שגיאה ברורות עם פתרון מיידי — אבל לדעת עליהן מראש חוסך את רגע הבלבול הראשון.

c3 יצירת שלד wrangler dev localhost:8787 (Miniflare) wrangler deploy העלאה ל-edge URL חי *.workers.dev tunnel localhost ציבורי
תרגיל: פריסת Worker + Static Assets חי על workers.dev 20 דקות
  1. הרץ npm create cloudflare@latest -- my-first-worker ובחר תבנית "Hello World example" → "Worker only".
  2. צור תיקיית ./public בתוך הפרויקט, ובתוכה index.html פשוט (כותרת + פסקה: "האתר הראשון שלי על Cloudflare").
  3. הוסף ל-wrangler.toml בלוק [assets] עם directory = "./public" ו-binding = "ASSETS".
  4. צור קובץ .assetsignore (בסעיף הבא) עם השורות: node_modules, .git, .DS_Store, *.log, .dev.vars.
  5. הרץ npx wrangler dev ואמת ב-localhost:8787 שהדף הסטטי וה-Worker עובדים.
  6. הרץ npx wrangler login, ואז npx wrangler deploy — בחר subdomain בפעם הראשונה.
  7. פתח את ה-URL <name>.<subdomain>.workers.dev מהטלפון ואמת שהוא חי.

פלט נראה לעין שתסיים איתו: Worker חי עם Static Assets פרוס על *.workers.dev — URL ציבורי שעובד מכל מכשיר. שמור צילום מסך של הדף החי מהטלפון, ואת ה-URL ב-README של הפרויקט.

עשו עכשיו 3 דקות

הרץ npx wrangler login, אשר את ה-OAuth בדפדפן שנפתח, ואז npx wrangler whoami לוודא שאתה מחובר לחשבון הנכון.

מתחיל7 דקותחינםאזהרה

מלכודת .assetsignore: למה ה-deploy מעלה 40,000 קבצים

זו אחת המלכודות שתופסת כמעט כל מי שעובר מ-Pages ל-Static Assets, ולוקח שעה להבין מה קרה. הנה התרחיש: אתה מריץ wrangler deploy, וה-deploy פתאום לוקח דקות, מנסה להעלות עשרות אלפי קבצים, ואולי אפילו נכשל. למה?

כי Static Assets לא מחריג node_modules אוטומטית כמו ש-Pages עשה. כשהגדרת directory = "./public" זה בסדר — אבל אם בטעות כיוונת את ה-directory לשורש הפרויקט, או ש-node_modules נמצא בתוך תיקיית ה-assets, wrangler ינסה להעלות את כל ה-node_modules. תיקיית node_modules טיפוסית מכילה עשרות אלפי קבצים — וזה חוצה מיד את מגבלת 20,000 הקבצים של ה-free tier.

הפתרון: קובץ .assetsignore בתוך תיקיית ה-assets, שמורה ל-wrangler מה לדלג עליו. הפורמט הוא רשימת נתיבים/glob, אחד בכל שורה (סגנון דומה ל-.gitignore):

node_modules
.git
.DS_Store
*.log
.dev.vars
.env

אחרי שיצרת אותו, בפלט של wrangler deploy ודא שמספר הקבצים שמועלים סביר (בודדים עד עשרות לאתר טיפוסי), לא עשרות אלפים. זה הסימן שה-.assetsignore עובד.

איפה בדיוק שמים את הקובץ? בתוך תיקיית ה-assets (זו שהגדרת ב-directory), לא בשורש הפרויקט. אם directory = "./public", אז הקובץ הוא ./public/.assetsignore. זו נקודה שמבלבלת — בניגוד ל-.gitignore שיושב בשורש, .assetsignore יושב בתוך התיקייה שממנה מעלים.

שתי דרכים נוספות להימנע מהמלכודת לגמרי: (1) הקפד שתיקיית ה-assets תכיל רק את ה-build הסטטי (HTML/CSS/JS/תמונות) — לא את כל הפרויקט. אם אתה משתמש ב-framework, ה-directory צריך להצביע על תיקיית ה-dist/build, שבה אין node_modules מלכתחילה. (2) תמיד תסתכל על השורה בפלט ה-deploy שאומרת כמה קבצים הועלו — היא ה-canary שלך. ראית מספר תלת-ספרתי ומעלה לאתר פשוט? עצור ובדוק את ה-directory ואת ה-.assetsignore.

הערה על תחביר ה-glob

התחביר המדויק של תבניות ב-.assetsignore דומה לסגנון ה-ignore של Pages (נתיבים ו-glob כמו *.log). הדוגמה למעלה מכסה את 95% מהמקרים. לפני שאתה מסתמך על תבנית מורכבת (למשל negation), אמת אותה מול https://developers.cloudflare.com/workers/static-assets/.

טעות נפוצה: לשכוח .assetsignore ולהיתקע במגבלת 20,000 הקבצים

למה זה מפתה: ב-Pages זה עבד בלי לחשוב — node_modules הוחרג אוטומטית, אז למה שיהיה אחרת?

למה זה טעות: Static Assets, בניגוד ל-Pages, לא מחריג אוטומטית node_modules/.git/.DS_Store. node_modules טיפוסי = עשרות אלפי קבצים → deploy איטי או כשל במגבלת 20,000.

מה לעשות במקום: צור .assetsignore עם node_modules, .git, .DS_Store, *.log, .dev.vars לפני ה-deploy הראשון; אמת בפלט שמספר הקבצים סביר.

עשו עכשיו 3 דקות

צור קובץ .assetsignore בתיקיית ה-assets שלך עם השורות: node_modules / .git / .DS_Store / *.log / .dev.vars. שמור — נשתמש בו בפריסה הבאה.

בינוני9 דקותחינםתרגול

חושפים localhost ב-HTTPS: wrangler tunnel quick-start

תרחיש קלאסי של Vibe Coder: בנית משהו ב-localhost, ולקוח/חבר רוצה לראות אותו עכשיו מהטלפון שלו. עד היום היית שולף את ngrok. מ-מרץ 2026, Wrangler עושה את זה בפקודה אחת, חינם, בלי חשבון:

npx wrangler tunnel quick-start http://localhost:8787

זה מקים Quick Tunnel — מנהרה זמנית שמחזירה URL אקראי בתבנית https://<random>.trycloudflare.com שמפנה ל-localhost שלך. אין port forwarding, אין הגדרת DNS, אין חשבון. אתה מכוון אותו ל-port של ה-wrangler dev שלך (8787 כברירת מחדל), והנה — ה-localhost שלך חי באינטרנט ב-HTTPS.

למה זה כל-כך שימושי ל-Vibe Coder? כי הפער בין "עובד אצלי" ל"הלקוח רואה" הוא לרוב חיכוך מטופש: לפרוס deploy מלא רק כדי שמישהו יסתכל, או להתעסק עם הגדרות רשת. Quick Tunnel מוחק את החיכוך — אתה ממשיך לפתח לוקלית עם hot reload מלא, והלקוח רואה כל שינוי בזמן אמת דרך ה-URL הציבורי. זה גם פותר תרחישים כמו בדיקת webhook מספק חיצוני (Stripe, GitHub) שצריך URL ציבורי כדי לשלוח אליו אירועים, או בדיקת איך האתר נראה בפועל על מכשיר נייד אמיתי, לא רק ב-DevTools.

חשוב להבין מה Quick Tunnel אינו: ה-URL אקראי ומשתנה בכל הרצה, הוא נעלם כשאתה סוגר את הטרמינל, ואין לך שליטה על הדומיין. לכל אלה — דומיין יציב, URL קבוע, ניהול מרחוק — צריך named tunnel (פרק 5). Quick Tunnel הוא ה-"ngrok של 30 שניות", לא תשתית production.

(הפקודה היא חלק מסט פקודות ה-tunnel שנוסף ב-2026-03-19: create, list, info, delete, run, quick-start — ניהול מנהרות מתוך Wrangler בלי להתקין cloudflared בנפרד.)

טעות נפוצה: להשתמש ב-Quick Tunnel ל-streaming/SSE או לעומס אמיתי

למה זה מפתה: זה כל כך קל ש"למה לא להשתמש בזה לדמו עם הרבה משתמשים, או ל-UI שמזרים תשובות (SSE)".

למה זה טעות: Quick Tunnel הוא testing-only: תקרת 200 בקשות במקביל, ואין תמיכת SSE. SSE נכשל בשקט, בלי שגיאה ברורה — אתה תחפש את הבאג שעות.

מה לעשות במקום: ל-demo מהיר ללקוח — Quick Tunnel מצוין. ל-streaming UI (SSE) או לעומס אמיתי — named tunnel (נכסה בפרק 5) או הרצה ישירות מול wrangler dev.

תרגיל: חשיפת localhost ללקוח ב-HTTPS עם Quick Tunnel 15 דקות
  1. ודא ש-npx wrangler dev רץ ומשרת את ה-Worker ב-localhost:8787השאר אותו רץ בטרמינל הזה.
  2. פתח טרמינל שני והרץ בו את הפקודה המלאה (ה-URL הוא ה-argument שמכוון את המנהרה ל-port המקומי): npx wrangler tunnel quick-start http://localhost:8787
  3. העתק את ה-URL *.trycloudflare.com שחזר.
  4. פתח אותו ממכשיר אחר (טלפון / רשת אחרת) ואמת שהדף נטען ב-HTTPS.
  5. בצע שינוי קטן בקוד ה-Worker, שמור, ואמת שה-hot reload משתקף גם דרך ה-tunnel.
  6. תעד בקובץ: למה זה testing-only (200 concurrent + אין SSE) ומתי תצטרך named tunnel.

פלט נראה לעין שתסיים איתו: URL חי *.trycloudflare.com שחושף את ה-localhost ב-HTTPS, מאומת ממכשיר חיצוני (צילום מסך מהטלפון), + הערה כתובה על מגבלת ה-200/SSE.

עשו עכשיו 4 דקות

הרץ npx wrangler dev בטרמינל אחד (השאר אותו רץ), ובטרמינל שני npx wrangler tunnel quick-start http://localhost:8787. העתק את ה-URL ל-*.trycloudflare.com ופתח אותו בטלפון שלך — זה ה-localhost שלך חי באינטרנט.

בינוני10 דקותחינם מול בתשלוםהחלטה

ה-Forcing Function של $5: מתי Workers Paid הופך מחובה

בשלב מסוים, לכל אפליקציה רצינית, ה-free tier ייגמר. השאלה היא לא אם אלא מתי, ואיזה primitive ישבור ראשון. ההבנה הזו היא מה שמבדיל בין "פרסתי משהו" ל"אני יודע לתכנן עלות".

הקפיצה הראשונה היא ל-Workers Paid — $5/חודש מינימום. מה $5 פותחים:

מגבלהFreePaid ($5/חודש)
בקשות100,000/dayללא תקרה יומית (10M כלולים, ואז overage)
CPU per request10ms30s ברירת מחדל (עד 5min; 15min ל-Cron/Queue)
Subrequests5010,000
Cron Triggers5250
גודל script3MB10MB
Workers לחשבון100500

הקפיצה פרופורציונלית: ה-CPU עולה פי 3,000 (מ-10ms ל-30s), הבקשות הופכות לבלתי-מוגבלות יומית, וה-KV writes קופצים מ-1,000/יום ל-1M/חודש. בשביל $5 זו עסקה מצוינת — וזו הסיבה שאין טעם "להילחם" על ה-free tier כשכבר חצית.

נקודה פסיכולוגית שכדאי לקבל מראש: הרבה מפתחים מתעקשים להישאר ב-$0 גם כשהאפליקציה כבר חוצה את הקיר, ומשקיעים שעות ב-workarounds מפותלים כדי לחסוך $5. זו טעות בחישוב. אם האפליקציה שלך מספיק פעילה כדי לשבור את ה-free tier, שעה אחת של עבודה שלך שווה הרבה יותר מ-$5. ה-$5 אינו "כישלון להישאר חינמי" — הוא סימן שהאפליקציה מצליחה. המטרה של הקורס היא לדעת בדיוק מתי זה קורה ולמה, לא להימנע מזה לנצח.

שווה גם לדעת מה $5 לא פותח: הוא לא הופך מוצרי "לא-חינם" (Stream, Images storage, Containers) לזולים — לאלה יש תמחור נפרד משלהם. $5 הוא ספציפית עבור Workers Paid (ה-compute ומגבלות ה-storage primitives הסטנדרטיים). אם האפליקציה שלך נשענת על Stream או Containers, החשבון יהיה גבוה יותר — ולכן ה-triage 3-דליים מהסעיף הקודם כל-כך חשוב.

איזו מגבלה תיפול ראשונה?

זוכר את האסימטריה reads-מול-writes מסעיף המספרים? היא קובעת את הסדר. חשוב: מה שבא עכשיו הוא heuristic מעשי — מה שראינו בפועל — לא דירוג רשמי של Cloudflare. אבל הוא עובד לרוב האפליקציות.

הסיבה שהסדר הזה חוזר על עצמו היא בכמה אפליקציות עובדות: רובן קוראות הרבה וכותבות מעט — חוץ מנקודה אחת, שבה הן כותבות לכל אירוע משתמש (session חדש, click, מדד analytics). הכתיבות האלה הולכות לרוב ל-KV, וה-1,000 כתיבות/יום הן הקוטה הקטנה ביותר במערכת כולה — לכן הן נשברות ראשונות. אחרי שמסדרים את הכתיבות (מעבירים analytics ל-Analytics Engine, sessions ל-Durable Objects), הקיר הבא הוא ה-CPU, שנפגע ברגע שמתחילים לעבד נתונים בתוך ה-Worker. ו-D1 writes נשברים אחרונים כי רוב האפליקציות פשוט לא כותבות 100,000 שורות ביום. כשאתה מתכנן אפליקציה, שאל לגבי כל פעולה: "האם זו כתיבה? לאן? כמה פעמים ביום?" — והתשובה תגיד לך איפה הקיר.

מסגרת החלטה: איזו מגבלה תיפול ראשונה / מתי $5 הופך מחובה (heuristic "בפועל")

בפועל (לא דירוג רשמי), זה הסדר הטיפוסי שבו המגבלות נשברות:

שאלה: חצית את הראשון מבין השלושה אצלך?

טעות נפוצה: להניח ש-10ms CPU זה כמו 10ms wall-clock

למה זה מפתה: "10ms זה כלום, כל קריאת רשת לוקחת יותר" — אז נראה שאי-אפשר לעשות כלום ב-Worker.

למה זה טעות: המגבלה היא זמן CPU בלבד. await על fetch() באורך 500ms לא צורך CPU בזמן ההמתנה — הוא חינם. אבל JSON.parse על payload גדול או regex על עשרות KB כן שורפים את ה-10ms.

מה לעשות במקום: אל תפחד מקריאות רשת איטיות; כן היזהר מ-parsing/regex/לולאות כבדות. כל compute לא-טריוויאלי דוחף ל-$5 (30s CPU). לעיבוד כבד — שקול Queue/Workflow או שדרוג.

הערה לישראלי

ה-$5 הוא חיוב USD לכרטיס אשראי (≈ ~18 ₪), והבנק שלך עשוי להוסיף עמלת המרת מטבע. אין מדרגת תשלום בשקלים ואין הבדל אזורי. שים לב: ה-free tier עצמו לא דורש כרטיס בכלל — רק השדרוג ל-Paid.

תרגיל: בניית טבלת ה-Free-Tier Matrix לאפליקציה שלך 20 דקות
  1. פתח טבלה (Google Sheets או Markdown) עם עמודות: מוצר | מגבלה חינמית | המגבלה שנופלת ראשונה | מחיר השדרוג.
  2. מלא שורה לכל primitive: Workers, Static Assets, KV, D1, R2, Queues, Workers AI.
  3. לכל מוצר הזן את המגבלה החינמית מסעיף "במספרים" ואת trigger השדרוג מסעיף ה-$5.
  4. הוסף שורות "לא חינם": Stream, Images storage, Containers, Email sending — וסמן אותן באדום.
  5. אמת מספר אחד מול flarecalc.com (למשל KV writes או Workers requests).
  6. בתחתית כתוב משפט אחד: "באפליקציה שלי, ה-primitive שייפול ראשון הוא ___ כי ___".

פלט נראה לעין שתסיים איתו: טבלת free-tier matrix מלאה (קובץ Markdown/Sheets) עם 7+ מוצרים, שורת "לא חינם" אחת לפחות, ומשפט מסקנה שמזהה את המגבלה הראשונה שתיפול. זה ה-artifact שתשתמש בו בכל הפרקים הבאים.

עשו עכשיו 4 דקות

קח את הנייר מה-do-now של סעיף המספרים (כמה פעולות/יום): סמן את ה-primitive הראשון שחוצה את המגבלה החינמית. זה ה-primitive שיכריח אותך לשלם $5 — נאמת אותו בתרגיל המטריצה.

מתחיל6 דקותחינםסיכום

סיכום ומה הלאה: מ-Worker חי ל-Storage Primitives

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

מה השגת

מילון 2026 — מה השתנה השנה

Cloudflare זזה מהר. שלושה שינויים שכדאי להכיר (כולם רק רקע לפרק הזה — נעמיק בהם בפרקים הבאים):

גשר לפרק הבא

יש לך Worker חי, אבל הוא עדיין "טיפש" — הוא לא זוכר כלום בין בקשות. בפרק 2 ניקח את אותו wrangler.toml ונוסיף לו זיכרון: KV, D1, R2 ו-Durable Objects. נפצח את "קיר ה-10ms" עד הסוף (מתי CPU נשרף ומתי לא), ותלמד לבחור את ה-primitive הנכון לכל בעיית אחסון — לפי consistency, מחיר והמגבלה שתיפול ראשונה. הטבלה שבנית היום תהיה הכלי שתשתמש בו שם.

שגרת עבודה — פרק 1
תדירותפעולה
בכל פרויקט חדשהתחל עם c3, הוסף .assetsignore מיד, ודא ש-.dev.vars ב-.gitignore לפני commit ראשון.
לפני כל deployהרץ wrangler dev מקומית, ובדוק שמספר הקבצים בפלט ה-deploy סביר (לא עשרות אלפים).
בכל בנייה חדשהשאל את שאלת ה-triage 3-דליים: חינם-לתמיד / חינם-עד-מגבלה / לא-חינם? אמת מול FlareCalc.
חודשיבדוק שימוש מול הקוטה (KV writes, CPU, requests) — לזהות מתי מתקרבים לקיר ה-$5.
דבר אחד שכדאי לעשות עכשיו

פרוס את ה-Worker הראשון שלך באמת — אל תדחה את תרגיל 1. הרגע שבו אתה פותח את ה-URL *.workers.dev מהטלפון והדף נטען הוא מה שהופך את כל המושגים בפרק הזה ממילים למיומנות. 10 דקות, ויש לך אתר חי בעולם.

עשו עכשיו 3 דקות

שמור את ה-URL של ה-Worker החי שלך ואת קובץ המטריצה במקום קבוע (ה-README של הפרויקט). בפרק 2 נוסיף לאותו wrangler.toml את ה-bindings של KV/D1/R2.

בדוק את עצמך — 5 שאלות
  1. למה ל-Workers אין cold start, ומה ההבדל המהותי בין isolate לקונטיינר? (רמז: מה Chrome עושה בין טאבים?)
  2. למה KV נותן 100,000 קריאות אבל רק 1,000 כתיבות ביום — ואיך האסימטריה הזו קובעת איזו מגבלה תיפול ראשונה? (רמז: קריאות זולות, כתיבות יקרות.)
  3. מדוע fetch() באורך 500ms לא שורף את מגבלת ה-10ms CPU, אבל JSON.parse על קובץ גדול כן? (רמז: CPU time מול wall-clock.)
  4. למה פרויקט full-stack חדש ב-2026 צריך להתחיל על Workers ולא על Pages — בלי לטעון ש-"Pages מת"? (רמז: feature-set, לא deprecation.)
  5. מתי תשתמש ב-Quick Tunnel ומתי תזדקק ל-named tunnel? (רמז: 200 concurrent ו-SSE.)
סיכום הפרק

בפרק הזה הפכת את Cloudflare ממבוך של מוצרים למפה ברורה. ראית שיש שלושה סוגי "חינם" — לתמיד, עד-מגבלה, ולא-חינם — ושהמיומנות האמיתית היא לזהות לאיזה דלי כל מוצר שייך לפני שבונים עליו. הבנת ש-ה-Worker הוא המרכז, שהוא רץ על isolate בלי cold start, ושהמגבלה החשובה ביותר היא 10ms CPU — זמן חישוב, לא זמן המתנה.

ובעיקר — פרסת. יש לך Worker חי עם Static Assets על URL ציבורי, קובץ wrangler.toml תקין, .assetsignore שמונע את מלכודת 40,000 הקבצים, ו-localhost חשוף ב-HTTPS לדמו מהיר. וכשתגיע לקיר — אתה כבר יודע איזה primitive ישבור ראשון ולמה $5 שווים את זה.

בפרק הבא ניקח את ה-Worker ה"טיפש" הזה וניתן לו זיכרון: KV, D1, R2 ו-Durable Objects — והפעם נפצח את קיר ה-10ms עד הסוף.

צ'קליסט — סיכום פרק 1