ווב: אתר ואפליקציית ווב
הווב הוא עוד פלטפורמה של האפליקציה שלך, לצד iOS ואנדרואיד. Ploa מארחת אותו בכתובת חינמית ב-ploa.app, וכל גרסה עוברת לבודקים, דרך הבדיקה של Ploa ולאוויר, כמו שבנייה עוברת בחנויות. לאפליקציית ווב יכול להיות צד שרת משלה: API, משימות מתוזמנות ומסד נתונים.
מה לבקש מהסוכן
תוסיף לאפליקציה הזו אתר תצוגה עם Ploa, ותשלח את הגרסה הראשונה לבודקים.
תבנה את אפליקציית הווב ותן ל-dana@example.com לבדוק אותה. תשחרר אותה הלילה ב-22:00 אחרי שאגיד שהיא טובה.
תחבר את www.example.com לאתר ותגיד לי אילו רשומות DNS להוסיף.
תיצור שרת לאפליקציית הווב הזו בענן של Ploa, תפרוס את ה-API, ותריץ את המיגרציות של מסד הנתונים בכל שחרור.
הכלים שמאחורי הבקשות האלה: כל כלי ה-MCP › הווב והשרת של האפליקציה.
מי עושה מה
| מה הוא עושה | |
|---|---|
| הסוכן שלך | שואל אותך איזו כתובת ואיזה סוג ווב, מוסיף אותו, בונה כל גרסה בפריימוורק של הפרויקט ושולח אותה, קובע מי בודק אותה, מחבר את הדומיין שלך, ויוצר ופורס את צד השרת. |
| Ploa | ממספרת כל גרסה, בודקת אותה כשהיא עולה ושוב כשמשחררים, מעלה אותה לכתובת בדיקה משלה, מארחת את האתר עם התעודה שלו, שומרת את 10 הגרסאות האחרונות, ומריצה את השרת ב-Google Cloud. |
| אתה | בוחר את הכתובת ומה הווב, מאשר כל שחרור, מוסיף את רשומות ה-DNS לדומיין שבבעלותך, נותן את הסודות של השרת, ובוחר איפה השרת רץ. |
מה הווב של אפליקציה
בוחרים אחד משלושה, ואפשר לשנות אחר כך:
| סוג | מה זה |
|---|---|
| אתר תצוגה | דפים על האפליקציה: מה היא עושה, צילומי מסך, קישורים לאפליקציות שלה בחנויות. |
| אפליקציית ווב | האפליקציה עצמה בדפדפן, שנבנית מאותו פרויקט. |
| שניהם | דפי התצוגה בכתובת, ואפליקציית הווב תחת /app. |
- ניתן להתקנה (PWA) הוא מתג. כשהוא דולק, אפשר להוסיף את האתר למסך הבית, ו-Ploa בודקת בכל גרסה את ה-manifest, האייקונים וה-service worker.
- לאפליקציה שנמצאת בשתי החנויות לא צריך PWA בטלפונים: אנשים צריכים לקבל את האפליקציות מהחנויות. משאירים אותו כבוי, או מדליקים אותו למחשבים ומפנים את הטלפונים לחנויות (הבדיקה של Ploa אומרת מה חסר).
- אפליקציה יכולה להיות רק בווב, בלי אפליקציות בחנויות בכלל.
הכתובת, ודומיין שבבעלותך
לכל אתר יש כתובת חינמית, <name>.ploa.app, כמו myapp.ploa.app. את השם אתה בוחר; הסוכן שואל אותך ולא בוחר בשבילך.
Ploa לא מוכרת דומיינים. אפשר לחבר דומיין שכבר בבעלותך, בתוכניות שכוללות את זה (ראה המקום לפי תוכנית):
- מוסיפים את הדומיין בעמוד הווב של האפליקציה, עם
ploa web domain example.com, או דרך הסוכן שלך. - Ploa נותנת את רשומות ה-DNS להוסיף במקום שבו מנוהל ה-DNS של הדומיין: רשומת TXT שמוכיחה שהוא שלך, והרשומה שמפנה אותו ל-Ploa (רשומות A לדומיין הבסיסי, CNAME לתת-דומיין כמו
www). בדומיין הבסיסי מוחקים את שאר רשומות ה-A וה-AAAA על@. - אם ה-DNS של הדומיין ב-Cloudflare, בכרטיס של הדומיין יש להגדיר ב-Cloudflare: נכנסים ל-Cloudflare, בוחרים את החשבון שהדומיין נמצא בו, רואים כל רשומה ש-Ploa תוסיף, תשנה או תמחק, ו-Ploa כותבת אותן בשבילך, DNS only, ובודקת את הדומיין. Ploa משתמשת בכניסה הזו רק לזה ומחזירה אותה ל-Cloudflare מיד אחר כך. אפשר גם להוסיף את הרשומות בעצמך, עם Proxy status על DNS only. חוץ מזה Ploa לא משנה את ה-DNS שלך, וגם הסוכן לא, אלא אם ביקשת ממנו.
- Ploa בודקת את הרשומות בעצמה כל כמה דקות, ואומרת מה עוד חסר. שינויי DNS מופיעים בדרך כלל תוך דקות, לפעמים תוך שעות. כשהן נכונות, האתר נפתח בדומיין עם תעודה משלו, שנוצרת אוטומטית.
דומיין מחובר לסביבת עבודה אחת בכל פעם.
כל פריימוורק של ווב
ploa web build בונה את הפרויקט בפקודה של הפריימוורק שלו, ושולח את התיקייה שהבנייה יצרה. הוא מכיר:
Expo (web), Next.js עם output: "export", Vite, Astro, SvelteKit עם adapter-static, Nuxt (nuxi generate), React Router במצב SPA, Angular, Gatsby, Create React App, Vue CLI, Eleventy, Docusaurus, VitePress, Hugo, Jekyll, MkDocs, Flutter (flutter build web), כל פרויקט עם סקריפט build, ו-HTML פשוט שלא צריך בנייה.
- חבילות שחסרות מותקנות קודם, עם מנהל החבילות שקובץ ה-lock של הפרויקט מציין.
--no-buildשולח את מה שכבר נבנה.- אפליקציית Flutter צריכה את תיקיית ה-
web/שלה: מוסיפים אותה פעם אחת עםflutter create --platforms=web .
האחסון הוא לקבצים סטטיים בלבד. פרויקט שמוגדר להריץ שרת (Next.js בלי output: "export", פלט שרת של Astro, adapter שרת של SvelteKit, React Router או Remix עם SSR) נדחה לפני שהוא נבנה, עם הסבר איך להפוך אותו לסטטי. API, משימות ומסד נתונים נמצאים בשרת של האפליקציה: ראה צד השרת של אפליקציית הווב.
גרסאות
כל העלאה היא גרסה. המספר שלה הוא הגרסה שבפרויקט (app.json, package.json, או pubspec.yaml ב-Flutter), כך שהיא תואמת ל-iOS ולאנדרואיד, ועוד מספר בנייה ש-Ploa סופרת: 1.4.1 (13). עם --version קובעים גרסה אחרת.
העלאה רצה כמו בנייה: עמוד הווב של האפליקציה מראה את השלבים שלה בזמן אמת (העלאה, מספור, הבדיקה של Ploa, עלייה לכתובת הבדיקה), עם לעצור… כל עוד היא עולה. גרסה שנעצרה לא מגיעה לבודקים. קבצים כמו .env, .git ו-node_modules אף פעם לא נשלחים. Ploa שומרת את הקבצים של 10 הגרסאות האחרונות.
מבנייה ועד לאוויר
| שלב | מה קורה |
|---|---|
| נבנתה | הגרסה הועלתה ונבדקה. |
| בודקים | היא עולה לכתובת בדיקה משלה, <site>--<build>.ploa.app. |
| הבדיקה של Ploa | Ploa בודקת אותה שוב כשמשחררים. |
| באוויר | המבקרים מקבלים אותה בכתובת של האתר ובדומיינים שלך. |
בודקים
לכל גרסה יש כתובת בדיקה משלה, ומנועי חיפוש אף פעם לא מוסיפים אותה לאינדקס. בוחרים מי יכול לפתוח אותה:
- בודקים: אנשים שהוספת לפי אימייל נכנסים עם קוד שנשלח אליהם, פעם אחת בכל מכשיר ל-30 יום. גם האנשים בסביבת העבודה שלך פותחים אותה.
- סיסמה: כל מי שיש לו את הכתובת ואת הסיסמה.
- כל מי שיש לו את הקישור.
כותבים מה לבדוק, והבודקים רואים את זה כשהם נכנסים.
הבדיקה של Ploa
Ploa בודקת כל גרסה כשהיא עולה, ושוב כשמשחררים. כל דבר לא בטוח עוצר אותה; השאר הערות. היא בודקת שהאתר נפתח וכל קובץ שהוא מבקש קיים, שאין בו מפתחות, .env או קבצים פרטיים, שאין טופס ששולח סיסמה לאתר אחר, את הכללים של האתר, שהוא נכנס במקום של התוכנית, שהוא נקרא טוב בטלפון, כותרת ותמונת שיתוף, שהוא ניתן להתקנה כשמתג ה-PWA דולק, וקישורים לאפליקציות בחנויות.
שחרור וחזרה לגרסה קודמת
- שחרור צריך את האישור שלך, כמו App Review ופרודקשן, ולשם כך צריך את ההרשאה App Review ופרודקשן. בעמוד הווב, לשחרר… שואל מה ומתי, ואז כן, לשחרר. מה-CLI או מסוכן נשלחת בקשה, ואתה מאשר אותה באישורים ב-ploa.dev. שחרור של סוכן אוטונומי עובר מיד.
- עכשיו או בשעה מסוימת ב-30 הימים הקרובים:
ploa web release 13 --at 2026-11-06T09:00. - חזרה לגרסה קודמת היא מיידית, בלי בדיקה, לכל אחת מ-10 הגרסאות האחרונות שהייתה באוויר: לחזור לזו בגרסה קודמת, או
ploa web rollback.
הכללים של האתר (ploa.json)
גרסה יכולה לבוא עם כללים משלה בקובץ ploa.json, בתיקייה הבנויה או ליד ה-package.json של הפרויקט. ה-CLI והסוכן שלך מוסיפים אותו להעלאה, והוא נשאר מחוץ לבנייה שלך, כך שהוא לא יגיע לאתר שמעלים במקום אחר.
{
"rewrites": [{ "from": "/he/*", "to": "/he.html" }],
"redirects": [{ "from": "/old", "to": "/new", "status": 301 }],
"headers": [{ "path": "/*", "set": { "Content-Security-Policy": "default-src 'self'" } }],
"proxy": [{ "from": "/api/*", "to": "https://api.example.com", "strip": true }]
}- נתיבים הם מדויקים (
/he) או קידומת שמסתיימת ב-/*. ה-proxy, אחריו ה-redirect ואחריו ה-rewrite הראשונים שמתאימים לבקשה מחליטים עליה; כל כלל headers שמתאים מוסיף את ה-headers שלו. עד 50 מכל סוג. הפניה מקידומת לכתובת שמסתיימת ב-/*שומרת את המשך הנתיב. - Headers שאתר יכול לקבוע: Content-Security-Policy (וגם Report-Only שלו), Cache-Control, Permissions-Policy, Referrer-Policy, שלוש מדיניות ה-Cross-Origin, X-Frame-Options, X-Robots-Tag, Access-Control-Allow-Origin, Link, Content-Type ו-Strict-Transport-Security (שנה או יותר). אף פעם לא Set-Cookie.
- Proxy שולח נתיב ל-API של האתר עצמו ב-https, לפי שם בלבד, לדומיין שסביבת העבודה שלך חיברה והוכיחה. עוגיות, גוף הבקשה והתשובה עוברים כמו שהם, וה-API רואה את הכתובת של המבקר עצמו. WebSockets עוד לא עוברים.
/.well-known/apple-app-site-associationו-assetlinks.json, כשהם באתר, מוגשים כ-JSON, כמו ש-Apple ו-Google קוראות אותם.
צד השרת של אפליקציית הווב
לאפליקציית ווב יכול להיות שרת משלה: API, משימות מתוזמנות ומסד נתונים Postgres, שרצים ב-Google Cloud ומנוהלים דרך Ploa. הוא חלק מהווב של האפליקציה, לא משהו שקונים: אין חבילות שרת לבחור.
| בענן של Ploa | ב-Google Cloud שלך | |
|---|---|---|
| תוכניות | Pro ו-Team, אחד לכל אפליקציה, עם המקום שהתוכנית נותנת | כל תוכנית, גם Free |
| מי משלם ל-Google | Ploa; זה בתוך התוכנית | אתה, ישירות |
| איפה | Google Cloud בתל אביב | בפרויקט שלך, באזור שאתה בוחר |
| מסד נתונים | מסד נתונים ותפקיד משלך על שרת מסדי נתונים ש-Ploa משתפת בין שרתים | מופע Cloud SQL משלך (Postgres 16, הגודל הקטן ביותר להתחלה, עם גיבויים), שאפשר להגדיל ב-Google Cloud |
| הקמה | כלום: הוא נוצר מיד | Ploa מדפיסה כמה פקודות שמריצים פעם אחת ב-Cloud Shell כדי לתת לה גישה, ואז היא ממשיכה |
המקום שיש לשרת של כל אפליקציה בענן של Ploa:
| Pro | Team | |
|---|---|---|
| ה-API | 0.25 vCPU ו-512 MB, נרדם כשאין פעילות (הבקשה הראשונה אחרי הפסקה מחכה שהוא יעלה) | 0.25 vCPU ו-512 MB, תמיד מוכן |
| Postgres | 512 MB, 5 חיבורים | 1 GB, 10 חיבורים |
| תעבורה יוצאת בחודש | 2 GB | 5 GB |
| משימות מתוזמנות | 1 | 3 |
- כל שפה. כשיש
Dockerfileבתיקיית השרת, Ploa בונה אותו. אחרת היא בונה Node, Python, Go, Java, Ruby, PHP ו-.NET כמו שהם (סקריפטstart, Procfile…). השרת מאזין למשתנהPORT. - פריסה שולחת את תיקיית השרת מהפרויקט שלך, או ש-Ploa לוקחת אותה מהריפו המקושר של האפליקציה ב-GitHub (קומיט, או הראש של הענף). בתיקייה של git נשלחים רק הקבצים ש-git שומר; במקום אחר התיקייה בלי התלויות, קבצי
.envומפתחות. אחר כך רצה פקודת השחרור, אם הגדרת אחת (מיגרציות של מסד הנתונים, למשלnpx prisma migrate deploy), והגרסה החדשה עולה לאוויר. אם הפקודה נכשלת, הגרסה לא עולה. הגרסה הקודמת נשארת כדי לחזור אליה. - משתנים: משתנים רגילים מוצגים; סודות (מפתחות, סיסמאות) נשמרים בכספת של Ploa וב-Secret Manager של Google, ולא מוצגים שוב. את
DATABASE_URLמגדירה Ploa. הגדרה או הסרה של משתנה מפעילה מחדש את הגרסה החיה. הסוכן אף פעם לא מגדיר סוד שלא נתת לו. - משימות מתוזמנות מריצות פקודה עם הגרסה החיה, לפי חמשת השדות של cron ב-UTC, לכל היותר כל 5 דקות.
- לוגים מראים מה השרת והמשימות שלו הדפיסו, בקשות וקריסות, מהחדש לישן.
- פקודה חד-פעמית (סקריפט seed, תיקון נקודתי) רצה עם הגרסה החיה, המשתנים ומסד הנתונים שלה. אין SSH: שרת הוא קונטיינרים שבאים והולכים, ושינוי ידני בתוך אחד מהם נעלם איתו.
- קונסולת ה-SQL רצה בתפקיד של השרת עצמו, כך שהיא מגיעה רק למסד הנתונים שלו. היא לקריאה בלבד, אלא אם מבקשים לכתוב.
- עצירה של שרת סוגרת אותו לכולם ושומרת את מסד הנתונים שלו. מחיקה היא של בעלים, בדפדפן, עם הקלדת שם האפליקציה: בענן של Ploa גם מסד הנתונים נמחק; בפרויקט שלך, מופע מסד הנתונים נמחק רק אם מסמנים את זה.
סוכן יוצר, פורס, ומגדיר משתנים ומשימות ברמת טיוטה. הרצת פקודה, כתיבה למסד הנתונים, עצירה וחזרה לגרסה קודמת צריכות רמת פרודקשן. ראה הרשאות ואישורים.
בלוח הבקרה ומהטרמינל
בלוח הבקרה, בעמוד הגדרות האפליקציה › ווב של כל אפליקציה יש: מה הווב, מתג ה-PWA, העלאת קובץ zip, הגרסאות עם השלבים שלהן, בודקים, שחרור, חזרה לגרסה קודמת ודומיינים, ומתחת לזה צד השרת של אפליקציית הווב: איפה הוא עומד, הגרסאות, המשתנים, המשימות, הלוגים וקונסולת ה-SQL. בהגדרות › אחסון רואים כמה מקום יש בתוכנית, כמה האתרים שלך תופסים, כל אתר וכל דומיין שחיברת.
ploa web build # build, send a new version to testers ploa web status # sites, addresses, versions ploa web release # the newest tested version, live ploa web rollback # back to the version live before ploa web domain example.com # connect a domain you own ploa server # the app's server: where it stands ploa server create --ploa # in Ploa's cloud (Pro, Team); or --own <project> ploa server deploy # the server's folder; --github from the repository ploa server env KEY=value --secret # a secret variable ploa server logs ploa server jobs --name cleanup --schedule "0 3 * * *" --command "node cleanup.js" ploa server run node seed.js # a command once ploa server sql "select count(*) from users"
הסוכן עוצר גרסה שעדיין עולה עם ploa_release_stop. כל הכלים לווב ולשרת: כל כלי ה-MCP › הווב.
המקום לפי תוכנית
כל תוכנית באה עם אחסון משלה; ההבדל בין התוכניות הוא בכמות.
| Free | Starter | Pro | Team | |
|---|---|---|---|---|
| אתרים | 1, של האפליקציה | 1 | אחד לכל אפליקציה | אחד לכל אפליקציה |
| אחסון | 100 MB | 5 GB | 10 GB | 50 GB |
| תעבורה בחודש | 1 GB | 50 GB | 100 GB | 500 GB |
| דומיינים שבבעלותך לחיבור | 0 | 1 | 3 | ללא הגבלה |
| צד השרת של אפליקציית הווב | ב-Google Cloud שלך | ב-Google Cloud שלך | אחד לכל אפליקציה בענן של Ploa, או אצלך | אחד לכל אפליקציה בענן של Ploa, עם יותר מקום, או אצלך |
| התג "Made with Ploa" | כן | לא | לא | לא |
ב-Pro וב-Team, כל אפליקציה מעבר למכסה של התוכנית מוסיפה את החלק שלה (3 GB ו-30 GB ב-Pro, 2.5 GB ו-25 GB ב-Team). גרסה שלא נכנסת באחסון נדחית, אלא אם בעלים הדליקו שימוש נוסף. תוכניות ומחירים: סביבת עבודה, צוות ותוכניות.
עוד לא
- Ploa עוד לא מוסיפה בעצמה את הקבצים שגורמים לקישורים לפתוח את האפליקציה מהחנות (
apple-app-site-association, assetlinks.json), וגם לא באנר אפליקציה חכם. אפשר להוסיף את הקבצים האלה לבד. - גרסת ווב חדשה בכל push ל-GitHub.
- שחרור הדרגתי לחלק מהמבקרים בכל פעם.
- דומיין משלך לשרת, מעטפת חיה (shell), ו-Redis או MongoDB. התעבורה היוצאת של שרת עוד לא נספרת מול המקום שלו.