# פרוקסי הפוך ו-HTTPS

> הגישו את Nodaro באירוח עצמי בדומיין שלכם ב-HTTPS, עם nginx או Caddy לפני פורט 3000, הגדירו את PUBLIC_URL ואת CORS_ORIGIN והפעילו מחדש.

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

**פרוקסי הפוך** מאפשר להגיש את Nodaro שלכם באירוח עצמי בדומיין אמיתי, עם HTTPS. הקונטיינר של Nodaro כבר מריץ שרת ווב, Caddy, בפורט `3000`, ולכן מוסיפים לפני הפורט הזה פרוקסי אחד שמסיים את חיבור ה-TLS, ומגדירים ב-Nodaro את הכתובת הציבורית שלו. גם nginx וגם Caddy מתאימים.

## מה פורט 3000 מגיש
שרת הווב בתוך הקונטיינר מגיש הכול באותו origin:

| נתיב | מי עונה |
| --- | --- |
| `/` | העורך והאפליקציות, כקבצים סטטיים |
| `/v1/*` | ה-API, שמאזין בפורט `9000` בתוך הקונטיינר |
| `/storage/*` | המדיה ב-MinIO המובנה |
| `/supabase/*` | שירות ההתחברות המובנה וה-API של הנתונים |
| `/config.js` | הגדרות זמן הריצה שהדפדפן קורא לפני שהאפליקציה עולה |

הפרוקסי שלכם צריך רק להעביר כל בקשה לפורט `3000`.

## אפשרות א׳: nginx
מתאים כשכבר מריצים nginx או פרוקסי אחר.

```nginx
server {
listen 443 ssl http2;
server_name nodaro.example.com;
ssl_certificate     /etc/letsencrypt/live/nodaro.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/nodaro.example.com/privkey.pem;

client_max_body_size 100M;
proxy_buffering off;          # important for SSE

location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
```

- ההגדרה `client_max_body_size 100M` מאפשרת להעלאות לעבור.
- ההגדרה `proxy_buffering off` שומרת על הזרימה של אירועי השרת (SSE). Nodaro משתמש בהם כדי להזרים פלט טקסט ואת התקדמות ההרצה.

## אפשרות ב׳: Caddy על המארח
Caddy משיג בשבילכם תעודה של Let's Encrypt:

```text
nodaro.example.com {
reverse_proxy 127.0.0.1:3000 {
flush_interval -1
}
}
```

פתחו את הפורטים `80` ו-`443`, וכוונו את רשומות ה-`A` או ה-`AAAA` של הדומיין אל המארח. ההגדרה `flush_interval -1` שומרת על הזרימה של אירועי השרת (SSE).

## הגדרת הכתובת הציבורית של Nodaro
אחרי כל אחת מהאפשרויות, הגדירו בקובץ `.env`:

```bash
PUBLIC_URL=https://nodaro.example.com
CORS_ORIGIN=https://nodaro.example.com
# On the bundled MinIO, serve the media from the same domain:
R2_PUBLIC_URL=https://nodaro.example.com/storage/nodaro-assets
```

ואז החילו אותם:

```bash
docker compose -f docker-compose.community.yml up -d
```

אין צורך בבנייה מחדש. באתחול, הקונטיינר כותב לקובץ `/config.js` את הכתובת הציבורית, את כתובת ההתחברות של הדפדפן ואת מפתח ה-anon, והדפדפן קורא את הקובץ הזה לפני שהאפליקציה עולה.

המשתנה `PUBLIC_URL` הוא הכתובת של ההתקנה בכל מקום: בקריאות החוזרות של ההתחברות ושל OAuth, בכתובות ה-URL של המדיה ובבדיקת ה-CORS. הכתובות `http://localhost:3000` ו-`PUBLIC_URL` מותרות תמיד כ-origins של הדפדפן.

## הגשה ביותר משם מארח אחד
- **origins נוספים.** רשמו אותם ב-`CORS_ORIGIN`, מופרדים בפסיקים, למשל `CORS_ORIGIN=https://nodaro.example.com,http://192.168.1.20:3000`.
- **זרמים בשם המארח של המבקר.** כשה-API חולק את ה-origin של האפליקציה, כמו בקונטיינר ברירת המחדל, הגדירו `PUBLIC_URL_SAME_ORIGIN=true`. אז הקובץ `/config.js` נותן לדפדפן את `/` ככתובת ה-API במקום את `PUBLIC_URL`, כך שהזרמים נשארים בשם המארח שהמבקר פתח. רק הערך המדויק `true` מפעיל את ההגדרה. אל תגדירו אותה כשה-API באמת נמצא במארח אחר.

קובץ ה-Compose לא מעביר את `PUBLIC_URL_SAME_ORIGIN` מהקובץ `.env`. הוסיפו אותו תחת `environment:` של השירות `nodaro`. ראו את הסעיף [איך מגדירים משתנה](https://nodaro.ai/docs/self-hosting/configuration#how-to-set-a-variable) בדף תצורה.

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

## איך נרשמות כתובות הלקוחות
שרת הווב בקונטיינר מקבל כותרות `X-Forwarded-*` רק מפרוקסי בכתובות פרטיות: `127.0.0.1/8`, `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`, `fd00::/8` ו-`::1`.

- **מפרוקסי מהימן**, שרת הווב מצמצם את `X-Forwarded-For` לכתובת לקוח אחת: הכתובת הימנית ביותר ברשימה שהיא לא בעצמה פרוקסי מהימן. הוא מדלג על כתובת שלקוח כתב בעצמו בכותרת.
- **מפרוקסי בכתובת ציבורית**, שרת הווב מחליף את הכותרות האלה בערכים שהוא עצמו ראה.

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

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

## MCP צריך שם מארח משלו
לקוחות MCP חייבים להגיע ישירות ל-API בפורט `9000`: שרת הווב בפורט `3000` דוחה בקשות MCP. ראו את הדף [MCP בהתקנה באירוח עצמי](https://nodaro.ai/docs/self-hosting/mcp).

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

### האם הקונטיינר של Nodaro כבר כולל שרת ווב?

כן. הקונטיינר של Nodaro מריץ את Caddy בפורט 3000. Caddy מגיש את העורך, מעביר את ‎/v1 ל-API בפורט 9000, ומגיש את המדיה ואת שירות ההתחברות המובנה באותו origin. כדי לקבל HTTPS, הציבו לפני פורט 3000 פרוקסי שמסיים את חיבור ה-TLS.

### מה צריך לשנות אחרי שמעבירים את Nodaro לדומיין?

הגדירו את PUBLIC_URL ואת CORS_ORIGIN לכתובת ה-HTTPS שלכם, וב-MinIO המובנה הגדירו את R2_PUBLIC_URL לכתובת https://your-domain/storage/nodaro-assets. אחר כך הריצו docker compose up -d. אין צורך בבנייה מחדש.

### למה פרוקסי ה-nginx שלי שובר את הזרמת הפלט?

כברירת מחדל, nginx אוגר תגובות, ולכן הוא מעכב את אירועי השרת (SSE). הגדירו proxy_buffering off. עם Caddy על המארח, הגדירו flush_interval -1 בבלוק reverse_proxy.

### האם Nodaro יכול לענות ביותר משם מארח אחד?

כן. רשמו את ה-origins הנוספים ב-CORS_ORIGIN, מופרדים בפסיקים. אם ה-API חולק את ה-origin של האפליקציה, כמו בקונטיינר ברירת המחדל, הגדירו גם PUBLIC_URL_SAME_ORIGIN=true, כדי שהזרמים יישארו בשם המארח שהמבקר משתמש בו.
