# פתרון בעיות

> פתרון בעיות נפוצות ב-Nodaro באירוח עצמי, החל מהדף ‎/setup: תסמינים ותיקונים לשגיאות הפעלה, לפורטים, ל-CORS, למיגרציות, לאחסון, לתורים ולמפתחות.

Source: https://nodaro.ai/he/docs/self-hosting/troubleshooting

בדף הזה מפורטות הבעיות הנפוצות ביותר ב-Nodaro באירוח עצמי, כל אחת עם **התסמין** שלה ו**התיקון** שלה. התחילו מהדף `/setup`, שמציג את רובן במבט אחד.

## מתחילים בדף `/setup`
בכל התקנה באירוח עצמי יש מסך תקינות שמתעדכן בזמן אמת, בכתובת `http://<your-host>/setup`. לא צריך להתחבר כדי לפתוח אותו. הוא מציג רק אם כל חלק קיים ועובד, ואף פעם לא מציג סוד.

- **כרטיסים** למסד הנתונים, ל-Redis, לאחסון, למפתח ההצפנה ולמפתחות הספק, בירוק או באדום. לכרטיס של מסד הנתונים יש מצב משלו: **מיגרציות חסרות**.
- **רמז** בכל כרטיס שנכשל, עם שמות המשתנים שצריך לבדוק.
- **עדכון בזמן אמת**: הדף בודק שוב כל 5 שניות.

כשהדף מציג **ה-API אינו נגיש**, שרת הווב פועל אבל ה-API לא עונה. בדקו את יומני הקונטיינר עם `docker compose -f docker-compose.community.yml logs -f`, ובדקו ששום דבר לא חוסם את פורט `3000`.

## ההתקנה לא עולה
**`Missing or invalid env vars` (משתני סביבה חסרים או לא תקינים) בהפעלה.**
ההודעה מפרטת את המשתנים שלא עברו את בדיקת התקינות. הסיבות הנפוצות הן `SUPABASE_SERVICE_ROLE_KEY` ריק ו-`INTERNAL_ORCHESTRATOR_SECRET` שקצר מ-32 תווים.

**`port is already allocated` (הפורט כבר תפוס) ב-`docker compose up`.**
מערך השירותים חושף במארח רק שני פורטים: הפורט `3000` לאפליקציה והפורט `9001` לקונסולת MinIO, שזמינה רק דרך ממשק ה-loopback. Redis ומסד הנתונים אף פעם לא משתמשים בפורט של המארח. שנו את צד המארח במיפוי המתנגש בקובץ `docker-compose.community.yml`, למשל `"3001:3000"`. אם מדובר בפורט של האפליקציה, הגדירו גם את `PUBLIC_URL` בהתאם.

**המיגרציות נכשלו באתחול.**
היומן של האפליקציה מציין את הקובץ המדויק. ה-API מסרב לעלות מול מסד נתונים שהמיגרציות הוחלו עליו רק בחלקן. תקנו את הסיבה והריצו שוב `docker compose -f docker-compose.community.yml up`: על קבצים שכבר הוחלו מדלגים.

**`password authentication failed for user "supabase_auth_admin"` (אימות הסיסמה של המשתמש נכשל) ביומנים של שירות ההתחברות.**
ה-volume `db-data` ישן יותר מהגדרת התפקידים של מסד הנתונים, או ששיניתם את `POSTGRES_PASSWORD` אחרי ההפעלה הראשונה. הסיסמאות של התפקידים נקבעות לפי `POSTGRES_PASSWORD` רק בהפעלה הראשונה. מחקו את ה-volume עם `docker compose -f docker-compose.community.yml down -v`, מה ש**מוחק את הנתונים שלכם**, או שנו את הסיסמאות של התפקידים ידנית, כשאתם מחוברים כ-`supabase_admin`.

**בניית ה-Docker נכשלת בהורדה או באימות של ארכיון ה-ffmpeg.**
זה רלוונטי רק כשאתם בונים את האימג׳ בעצמכם. ה-Dockerfile מקבע בנייה סטטית מסוימת של ffmpeg לכל ארכיטקטורה, עם `ARG FFMPEG_TARBALL_URL_*` ו-`ARG FFMPEG_TARBALL_SHA256_*`, כי אודיו ווידאו מרונדרים משתנים בין גרסה לגרסה של ffmpeg. הורדה שנכשלה או סכום ביקורת שלא תואם עוצרים את הבנייה, במקום לשנות את הפלט שלכם בלי שתשימו לב. הבנייה המקובעת היא גרסה של `nodaroai/ffmpeg-static` ב-GitHub: ffmpeg המקורי עם תיקון אחד במתזמן, שנבנה מקוד המקור, וקוד המקור והרישיונות שלו מפורסמים לצידו. בחרו גרסה שפורסמה, ועדכנו **גם** את הכתובת **וגם** את ה-SHA-256, **בשתי** הארכיטקטורות. התייחסו לזה כאל שדרוג אמיתי של ffmpeg, ובדקו אחר כך את הפלט המרונדר שלכם.

באימג׳ נמצאים הרישיונות של הקובץ הבינארי של ffmpeg, בתיקייה `/usr/local/share/doc/ffmpeg-static/`: `LICENSE`, `SOURCE`, `LINK-TRACE.txt` ותיקיית `LICENSES/` עם נוסח הרישיון של כל ספרייה שמקושרת סטטית. הקובץ הבינארי של ffmpeg מופץ ברישיון GPL-3.0-or-later, וקוד המקור שלו מפורסם כקבצים מצורפים לאותה גרסה.

## הדפדפן מציג שגיאות
**העורך מופיע, אבל נשאר ריק או מציג ״טוען…״ בלי סוף.**
פתחו את הקונסולה של הדפדפן.

- **שגיאות CORS:** ראו את הפריט הבא.
- **שגיאות התחברות:** פתחו את `/config.js` בהתקנה שלכם. הקובץ צריך לציין כתובת Supabase שהדפדפן שלכם יכול להגיע אליה, `PUBLIC_URL/supabase` במערך השירותים המובנה, ואת מפתח ה-anon. הקונטיינר כותב את הקובץ באתחול מתוך `PUBLIC_URL`, `FRONTEND_SUPABASE_URL` ו-`SUPABASE_ANON_KEY`: תקנו אותם והפעילו מחדש.

**שגיאות CORS בדפדפן.**
הכתובת `http://localhost:3000` והכתובת שב-`PUBLIC_URL` מורשות תמיד, ולכן השגיאה אומרת שפתחתם את האפליקציה ב-origin אחר, כמו כתובת ברשת המקומית או פורט אחר. הגדירו את `PUBLIC_URL` ל-origin הזה, או רשמו origins נוספים ב-`CORS_ORIGIN`, מופרדים בפסיקים, למשל `CORS_ORIGIN=http://192.168.1.20:3000`. אחר כך הריצו `docker compose -f docker-compose.community.yml up -d`.

**הכפתור עריכה ב-NodarCut, או הכפתור עריכה בתוצאת וידאו באפליקציה, מציג חלונית במקום העורך.**
עורך הווידאו שמתארח אצל Nodaro מאפשר הטמעה רק מ-`http://localhost:3000`. ב-origin אחר, הריצו עורך משלכם והגדירו את `FREECUT_URL`. ראו את הסעיף [עורכי וידאו ואודיו](https://nodaro.ai/docs/self-hosting/configuration#video-and-audio-editors) בדף תצורה.

**הכפתור עריכה בתוצאת אודיו לא עושה כלום, או מציג חלונית במקום העורך.**
Nodaro לא מארח עורך אודיו. הריצו AudioMass משלכם והגדירו את `AUDIOMASS_URL`.

## מסד נתונים
**מיגרציה נכשלת עם "relation … does not exist" (הטבלה … לא קיימת).**
מיגרציה רצה שלא לפי הסדר. החילו את הקבצים שב-`supabase/migrations/` לפי סדר שמות הקבצים, למשל בעורך ה-SQL של Supabase. אפשר להריץ כל אחד מהם שוב על מסד נתונים שהוא כבר הוחל עליו.

**קריאה חוזרת של OAuth נכשלת עם `500`.**
הטבלאות של אפליקציות OAuth חסרות, כי מיגרציה מסוימת לא הוחלה. החילו את כל המיגרציות לפי סדר שמות הקבצים. ראו את הדף [מסד נתונים](https://nodaro.ai/docs/self-hosting/database#apply-the-migrations-to-a-managed-project).

**ה-API עולה מחדש בלולאה.**
ה-API לא מצליח להגיע ל-Postgres. זה צפוי כל עוד מסד הנתונים לא פועל. כש-Postgres חוזר לפעול, הריצו `docker compose -f docker-compose.community.yml restart nodaro`.

## אחסון
**העלאות נכשלות במערך השירותים המובנה.**
פתחו את קונסולת MinIO בכתובת `http://localhost:9001`. פרטי הגישה שמוגדרים כברירת מחדל נמצאים בקובץ ה-Compose.

**העלאות ל-Cloudflare R2 נכשלות עם `401` או `403`.**
ודאו שלאסימון ה-API יש הרשאת **Object Read & Write** (קריאה וכתיבה של אובייקטים) על ה-bucket. אם יש דומיין מותאם אישית לפני R2, בדקו גם את הגדרת הגישה הציבורית של ה-bucket: Nodaro נותן לדפדפן כתובות מדיה ציבוריות, ולכן קריאה מה-bucket חייבת לעבוד בלי אימות.

**כל בקשה לאחסון נכשלת עם שגיאת הרשאה או שגיאת נקודת קצה.**
הגדירו את `R2_REGION` לאזור של שירות האחסון. AWS, DigitalOcean Spaces ו-Supabase מקומי דוחים את ברירת המחדל `auto`, והשגיאה שלהם לא מזכירה את האזור.

**כל העלאה נכשלת אחרי שהגדרתם את `STORAGE_OBJECT_ACL`.**
למפתחות האחסון אין הרשאה להגדיר ACL לאובייקטים. השאירו את המשתנה ריק, אלא אם שירות האחסון שלכם לא מקבל מדיניות bucket.

**`[storage] failed to create bucket` (יצירת ה-bucket נכשלה) ביומן האתחול עם R2.**
לא מזיק. אסימונים של R2 לא יכולים ליצור buckets, וה-bucket שלכם כבר קיים.

## הרצות ורכיבים
**תהליכים נכנסים לתור, אבל אף פעם לא מתחילים לרוץ.**
בדקו את היומנים עם `docker compose -f docker-compose.community.yml logs nodaro`. ה-orchestrator מקבל את העבודה שלו מ-Redis, ולכן כש-Redis לא נגיש, שום דבר לא רץ. בדקו את `REDIS_URL` והריצו `docker compose -f docker-compose.community.yml exec redis redis-cli ping`, שאמור להחזיר `PONG`.

**רכיב נכשל עם `Missing API key` (חסר מפתח API).**
הרכיב קורא לספק שאין לו מפתח. הוסיפו את המפתח בדף `/setup` או בקובץ `.env`. ראו את הדף [מפתחות ספק](https://nodaro.ai/docs/self-hosting/provider-keys).

**תמונות ווידאו עובדים, אבל כל יכולות הטקסט נכשלות.**
המשתנה `KIE_API_BASE_URL` מצביע על פרוקסי שמעביר רק את נתיבי המדיה. ראו את הסעיף [העברת התעבורה לספקים דרך פרוקסי משלכם](https://nodaro.ai/docs/self-hosting/provider-keys#send-provider-traffic-through-your-own-proxy) בדף מפתחות ספק.

**הדבקת מפתח או חיבור ל-Nodaro Cloud נכשלים עם `EncryptionKeyMissingError`.**
להתקנה אין מפתח הצפנה. עם פרויקט Supabase מנוהל, הגדירו את `NODARO_ENCRYPTION_KEY` לערך של 64 תווים הקסדצימליים, שמתקבל מהפקודה `openssl rand -hex 32`.

**מפתחות הספק מוצגים כ-`missing` (חסר) אחרי שחזור.**
מסד הנתונים שוחזר בלי מפתח ההצפנה שמתאים לו. ראו את הדף [גיבוי ושחזור](https://nodaro.ai/docs/self-hosting/backups#troubleshooting).

**רכיב נכשל עם `503 nodaro_connection_required`.**
הרכיב הזה בלעדי ל-Nodaro, והוא צריך חיבור ל-Nodaro Cloud. ראו את הדף [חיבור ל-Nodaro Cloud](https://nodaro.ai/docs/self-hosting/cloud-connect).

**הרצות דרך Nodaro Cloud נכשלות עם `Token expired` (האסימון פג).**
האסימון של החיבור תקף 90 ימים, והתוקף שלו פג. לחצו על **ניתוק**, ואז על **חיבור**.

**הרצות דרך Nodaro Cloud נכשלות עם `402 instance_cap_reached`.**
ההתקנה הגיעה לתקרת ההוצאה החודשית שלה. העלו את התקרה ב-app.nodaro.ai, תחת **חיוב › מופעים מחוברים**.

**הרצות תקינות מסומנות `Execution orphaned` (הרצה יתומה).**
שתי התקנות חולקות מסד נתונים אחד, עם מופעי Redis נפרדים. תנו לכל התקנה ערך `RUNTIME_ENV` משלה. ראו את הדף [הרחבת קיבולת](https://nodaro.ai/docs/self-hosting/scaling#two-installs-one-database).

**רכיב רינדור תלת־ממד Pro נכשל עם `503 SCENE_CAPABILITY_UNAVAILABLE`.**
רכיב [רינדור תלת־ממד Pro](https://nodaro.ai/docs/nodes/video/pro-3d-render) רץ על שירות בנייה ש-Nodaro מארח, והוא לא חלק מהמהדורות לאירוח עצמי. הרכיב אף פעם לא עובר בשקט למנוע רינדור אחר. השתמשו ברכיבים [יצירת סצנת תלת־ממד](https://nodaro.ai/docs/nodes/video/generate-3d-scene) ו[רינדור וידאו](https://nodaro.ai/docs/nodes/video/render-video), שרצים על השרת שלכם.

## התחברות ו-MCP
**נתיבי ה-SSO מחזירים `404 unknown_provider`.**
לא מוגדר ספק. בדקו את `EXTERNAL_SSO_PROVIDERS`, ובמערך השירותים של Compose, הוסיפו אותו תחת `environment:` של השירות `nodaro`. ראו את הדף [כניסה מאוחדת (SSO)](https://nodaro.ai/docs/self-hosting/sso).

**כל קריאה ל-API נדחית עם `403 sso_required`.**
פרופיל הממשק מאפשר רק SSO, והחשבון לא נוצר או קושר דרך SSO. ראו את הסעיף [שיטות התחברות](https://nodaro.ai/docs/self-hosting/editions-and-profiles#sign-in-methods) בדף מהדורות ופרופילי ממשק.

**הבקשות של לקוח MCP נדחות עם `405 wrong_mcp_host`.**
הלקוח משתמש בכתובת הראשית של האפליקציה. תנו לו במקומה את הכתובת של מארח ה-MCP שלכם. ראו את הדף [MCP בהתקנה באירוח עצמי](https://nodaro.ai/docs/self-hosting/mcp).

## עדכונים
**תווית הגרסה מציגה רק את הגרסה המובנית, ורשימת עדכוני הגרסה ריקה.**
בדיקת העדכונים לא מצליחה לקרוא מ-GitHub. שורת היומן `[update-check] … read failed: HTTP 403 (rate limit: 0 of 60 left…)` אומרת שכתובת היציאה שלכם כבר מיצתה את המכסה האנונימית של GitHub. הגדירו את `NODARO_UPDATE_CHECK_TOKEN`. ראו את הדף [עדכון גרסה](https://nodaro.ai/docs/self-hosting/updating#which-version-you-run).

## קבלת עזרה
אם עדיין נתקעתם, פתחו Issue ב-[GitHub](https://github.com/nodaroai/app.nodaro.ai/issues) וצרפו את יומני ה-Docker של קונטיינר האפליקציה.

## שאלות נפוצות

### מאיפה מתחילים כש-Nodaro באירוח עצמי לא עובד כמו שצריך?

פתחו את הדף ‎/setup בהתקנה שלכם. הדף מציג בזמן אמת כרטיסים ירוקים או אדומים למסד הנתונים, ל-Redis, לאחסון, למפתח ההצפנה ולמפתחות הספק, עם רמז לכל כרטיס שנכשל, ולא צריך להתחבר כדי לפתוח אותו.

### מה המשמעות של השגיאה "port is already allocated" (הפורט כבר תפוס) ב-docker compose up?

תוכנה אחרת במחשב שלכם משתמשת בפורט 3000 או 9001. שנו את צד המארח במיפוי הזה בקובץ docker-compose.community.yml, למשל ל-"3001:3000", והגדירו את PUBLIC_URL בהתאם.

### למה העורך נשאר ריק או במצב טעינה בלי סוף?

פתחו את הקונסולה של הדפדפן. שגיאות CORS אומרות שה-origin שבו פתחתם את האפליקציה לא מורשה, ולכן הגדירו את PUBLIC_URL או את CORS_ORIGIN. שגיאות התחברות אומרות שהקובץ ‎/config.js מציין כתובת Supabase או מפתח anon שהדפדפן לא יכול להשתמש בהם.

### למה התהליכים שלי אף פעם לא מתחילים לרוץ?

ה-orchestrator מקבל את העבודה שלו מ-Redis. בדקו את היומנים עם docker compose logs nodaro, בדקו את REDIS_URL, והריצו docker compose exec redis redis-cli ping, שאמור להחזיר PONG.

### איפה אפשר לקבל עזרה בהתקנה באירוח עצמי?

פתחו Issue ב-github.com/nodaroai/app.nodaro.ai וצרפו את יומני ה-Docker של קונטיינר האפליקציה.
