# פריסה

Canonical page: https://phishdestroy.github.io/TgWitness/he/docs/reference/deployment/

הפעל את TgWitness כשירות ב-Windows, Linux, macOS או Docker, מאחורי HTTPS, עם גיבויים ועדכונים.

**אנגלית** · [Русский](https://github.com/phishdestroy/TgWitness/blob/main/docs/ru/DEPLOYMENT.md) · [אוקראינית](https://github.com/phishdestroy/TgWitness/blob/main/docs/uk/DEPLOYMENT.md) · [Español](https://github.com/phishdestroy/TgWitness/blob/main/docs/es/DEPLOYMENT.md) · [פורטוגזית (ברזיל)](https://github.com/phishdestroy/TgWitness/blob/main/docs/pt/DEPLOYMENT.md) · [Türkçe](https://github.com/phishdestroy/TgWitness/blob/main/docs/tr/DEPLOYMENT.md) · [العربية](https://github.com/phishdestroy/TgWitness/blob/main/docs/ar/DEPLOYMENT.md) · [فارسی](https://github.com/phishdestroy/TgWitness/blob/main/docs/fa/DEPLOYMENT.md) · [אורדו](https://github.com/phishdestroy/TgWitness/blob/main/docs/ur/DEPLOYMENT.md) · [हिन्दी](https://github.com/phishdestroy/TgWitness/blob/main/docs/hi/DEPLOYMENT.md) · [באסהה אינדונזיה](https://github.com/phishdestroy/TgWitness/blob/main/docs/id/DEPLOYMENT.md) · [Tiếng Việt](https://github.com/phishdestroy/TgWitness/blob/main/docs/vi/DEPLOYMENT.md) · [סינית פשוטה](https://github.com/phishdestroy/TgWitness/blob/main/docs/zh/DEPLOYMENT.md)

## בחר התקנה

עבור החבילה הניידת, חלצו את הקובץ `TgWitness-<version>-windows-amd64-portable.zip` מ- GitHub Releases. עבור השיטות האחרות, הורידו וחילצו את קובץ ה-ZIP של הקוד המקור או שיבטו את המאגר, ולאחר מכן הריצו את הפקודה הבאה מתוך ספריית הפרויקט:

| התקנה | התחל | פועל ברקע? |
| --- | --- | --- |
| חבילת תוכנה ניידת ל-Windows | `TgWitness.cmd` | לא; השאר את החלון פתוח. |
| יליד Windows | `Start.cmd` | לא; השתמש במשימת הכניסה האופציונלית לשימוש ברקע. |
| תואם באופן מובנה ל-Linux/macOS | `sh start.sh` | לא; יש להשתמש ב-systemd/launchd להפעלה ברקע. |
| Docker על כל מארח נתמך | `docker compose up -d --build --wait` | כן, כל עוד הדמון של Docker פועל. |
| עוזר Docker ב-Windows | `scripts\Docker.cmd` | כן; התוכנה ממתינה לבדיקת תקינות שרת האינטרנט. |
| עוזר Docker ב-Linux/macOS | `sh scripts/docker-start.sh` | כן; התוכנה ממתינה לבדיקת תקינות שרת האינטרנט. |

לגבי שרת ענן שצד שלישי אמור להיות מסוגל לבדוק — שנוצר באמצעות ה-API של הספק, ללא SSH, ונגיש רק דרך Cloudflare Tunnel — ראו [פריסה ברמת אבטחה גבוהה](https://github.com/phishdestroy/TgWitness/blob/main/docs/HIGH-ASSURANCE.md).

הפעלה מקורית יוצרת קובץ `.venv` פרטי ומתקינה את התלויות המוצמדות. Docker בונה אותן בתוך התמונה, ללא צורך ב-Python במארח. ההתקנה הראשונית דורשת גישה לאינטרנט. כאשר לא נמצא Python 3.11 ומעלה, ה-`Start.cmd` מבקש אישור לפני התקנת Python 3.12 עבור המשתמש הנוכחי ב-Windows (באמצעות winget, או לחלופין באמצעות מתקין python.org לאחר בדיקת החתימה של Python Software Foundation); הוא לעולם אינו מבקש הרשאות מנהל. Docker ושירותי מערכת ההפעלה נותרים תנאים מוקדמים.

התקנות מקוריות וניידות משתמשות ב-`data/live` בתוך התיקייה שלהן. Docker משתמש בנפח בשם `tgwitness-data` ב-`/data`. אלה הן התקנות נפרדות עד שתעביר בכוונה את ספריית הנתונים המלאה. אל תצפה שמכולה חדשה של Docker תזהה חשבונות מקוריים באופן אוטומטי.

## דרישות התקנה

התקנה מקומית דורשת Python 3.11 או גרסה מאוחרת יותר עם `venv` ו-`ensurepip`, גישה לאינטרנט להתקנת התלות הראשונה, וספריית פרויקט הניתנת לכתיבה עבור `.venv`. הפאנל המצורף אינו דורש Node.js או בניית ממשק משתמש. הפעל את תוכנת ההפעלה מחשבון מערכת ההפעלה הרגיל שלך; TgWitness אינו דורש הרשאות מנהל/root.

- **Windows:** `Start.cmd` בודק את `py -3`, לאחר מכן את `python`, ולאחר מכן את תיקיות ההתקנה המוגדרות כברירת מחדל לכל משתמש ו- "Program Files", ודורש גרסה 3.11 או מאוחרת יותר. אם אף אחת מהן לא עובדת, הוא מציע את ההתקנה האוטומטית לכל משתמש שתוארה לעיל. `py -3 start.py` גם עובד. החבילה הניידת אינה דורשת Python כלל.
- **לינוקס:** `start.sh` מנסה את `python3.13`, `python3.12`, `python3.11`, `python3` ו- `python`, ומדפיס את פקודת ההתקנה עבור apt, dnf, pacman, zypper, apk או Homebrew כאשר אף אחת מהן אינה מתאימה. התקנות של Debian/Ubuntu עשויות לדרוש את חבילת `python3-venv` המתאימה למתורגמן הנבחר. גרסת Python המוגדרת כברירת מחדל הישנה יותר בהפצה חייבת להיות מוחלפת או משלימה ב-Python 3.11+.
- **macOS:** התקן הפצה עדכנית של Python 3.11 ומעלה; אל תניח שהמתורגמן המסופק על ידי מערכת ההפעלה עומד בדרישות. השתמש ב-`python3 start.py` מתוך ספריית הפרויקט.
- **Docker:** יש להשתמש ב-Docker Engine/Desktop עם Compose v2.20 או גרסה חדשה יותר. Docker Desktop חייב להשתמש במכולות לינוקס ב-Windows. המכולה מתקינה את תלותי ה-Python שלה; המארח אינו זקוק להתקנה נפרדת של Python.

השתמש באחסון מקומי קבוע עבור ספריית הנתונים. תכנן את הקיבולת בהתאם להודעות, קובצי מדיה, צמיחת WAL, ייצוא וגיבויים; אין מפרט מינימום אוניברסלי מבוסס ראיות לדיסק/RAM עבור כל עומס עבודה. ארכיטקטורות מעבד וגרסאות Python ללא גלגלי תלות תואמים עשויות לדרוש כלי בנייה נוספים והסמכה משלהן. "נייד" אינו מהווה טענה לתמיכה אוניברסלית במערכות הפעלה או בחומרה.

Windows 11/Python 3.12 אומתו באופן מקומי. הגדרות עבור Linux/macOS/קונטיינרים ו-CI מסופקות, אך לא הוצאו לפועל במארח הפיתוח הזה. ראו את [הקובץ VERIFICATION.md](https://phishdestroy.github.io/TgWitness/he/docs/reference/verification/) לקבלת ההיקף המדויק.

## מחשב מקומי

השתמש ב-`Start.cmd` ב-Windows או ב-`sh start.sh` ב-Linux/macOS. `scripts\Setup.cmd` או `sh start.sh --setup-only` מכינים את הסביבה. תוכנת ההפעלה מתקינה את התלויות הנדרשות בשימוש הראשון; בהפעלות הבאות היא עושה שימוש חוזר בסביבה. נדרשת גישה לאינטרנט לצורך ההתקנה ואיסוף הנתונים מ-Telegram, אך עיון ברשומות קיימות ויצירת ייצוא פועלים במצב לא מקוון.

הפעל את `python start.py --check` לאחר ההתקנה כדי לבדוק תלות מקומיות, Ed25519, אחסון, תצורת מפתחות וכתובת ההאזנה מבלי להפעיל את האספן. השתמשו ב-`--json` לקבלת פלט מובנה. העבירו את הפקודות המיועדות `--data-dir`, `--host` ו- `--port`. הבדיקה אינה מתקינה חבילות, אינה יוצרת יומן ואינה מתחברת ל-Telegram; היא אינה מהווה אימות של תקינות או כיסוי. בעת ההפעלה מתבצעת אימות נפרד של יומנים קיימים. גם `python start.py --help` נמנע מהתקנה.

אפשרויות:

לאחר השימוש ב-start.py, הפעל פקודות עזר באמצעות `.venv\Scripts\python.exe` ב- Windows או `.venv/bin/python` ב-Linux/macOS, או הפעל תחילה את הסביבה הזו. הדוגמאות ל-`python -m ...` המופיעות להלן מניחות שהסביבה פעילה.

```
python -m tgwitness --data-dir /path/to/private/data --host 127.0.0.1 --port 8787
```

משתני סביבה: TGWITNESS_DATA, TGWITNESS_HOST, TGWITNESS_PORT, TGWITNESS_TOKEN. TGWITNESS_VAULT_KEY_FILE בוחר במצב מפתח חיצוני עבור התקנה חדשה; ראה להלן. TGWITNESS_TOKEN, אם צוין, חייב להכיל לפחות 24 תווים; יש להשתמש בערך אקראי קריפטוגרפי. ללא ערך זה, האפליקציה מייצרת אסימון אקראי בן 256 סיביות בקובץ panel-token.txt. הגדרת הסביבה אינה מחליפה את הקובץ הזה. יש להפעיל מחדש כדי להחליף את פרטי ההזדהות.

רק תהליך אחד בדיוק יכול להיות הבעלים של ספריית נתונים. נעילת קבצים חוצת-פלטפורמות של מערכת ההפעלה מונעת כתיבה מקבילה בשוגג. השתמש בעובד Uvicorn אחד. הלוח יכול לנהל מספר בלתי מוגבל של סביבות עבודה, עם ספריות סביבת עבודה נוספות תחת profiles/<id>/. עבור מופעי שירות נפרדים, יש להשתמש בספריות ויציאות נפרדות. קבצי WAL של SQLite צריכים להיות מאוחסנים באחסון מקומי קבוע, ולא במערכת קבצים ברשת. אין לשתף אמצעי אחסון אחד בין עותקים.

## חבילת תוכנה ניידת ל-Windows

כל גרסה ב-GitHub כוללת את `TgWitness-<version>-windows-amd64-portable.zip` ואת `.sha256`. היא מכילה את סביבת ההרצה הרשמית של Python 3.12 הניתנת להטמעה מ-python.org (סכום הבדיקה מוצמד ב-`tools/build_portable.py`), את TgWitness ואת התלויות המוצמדות שלו, ושלושה משגרים:

| קובץ | מטרה |
| --- | --- |
| `TgWitness.cmd` | הפעל את הפאנל; אפשרויות נוספות מועברות, לדוגמה: `TgWitness.cmd --port 8790` |
| `TgWitness-Demo.cmd` | הפעל את ההדגמה הסינתטית ב-`data\demo` |
| `TgWitness-Check.cmd` | הפעל את בדיקת המוכנות מבלי להפעיל את התוכנה |

חלץ את הארכיון כולו לתיקייה הניתנת לכתיבה, כגון `Documents\TgWitness`; אל תפעיל אותו מתוך קובץ ה-ZIP או מתוך תיקיית Program Files. סביבת ההרצה משתמשת בנתיב מודול מבודד, כך שהתקנות Python אחרות ו-`PYTHONPATH` אינן משפיעות עליה. הנתונים נשמרים בתיקיית `data` של החבילה. כדי לעדכן, עצרו את TgWitness, חלצו את הגרסה החדשה לתיקייה חדשה והעתיקו את תיקיית `data` אליה.

הקימו אותו בעצמכם ב-Windows 64 סיביות עם Python 3.12:

```
python tools/build_portable.py
```

הבונה מאמת את בדיקת הסיכום בזמן ריצה, מתקין את התלות המוגבלות בתוך החבילה, מבצע בדיקת מוכנות באמצעות המתורגמן המובנה וכותב את קובץ ה-ZIP ואת בדיקת הסיכום ל-`dist/`.

## קונטיינר

```
docker compose up -d --build --wait
```

פעולה זו יוצרת אמצעי אחסון קבוע בעל שם עבור /data. יציאת האינטרנט ממופה ל-127.0.0.1:8787. התהליך פועל כ-UID 10001 עם יכולות מצומצמות, מערכת קבצים שורשית לקריאה בלבד, ו- /data ו- /tmp הניתנים לכתיבה. `--wait` בודק את תקינות שרת האינטרנט לפני החזרה; הוא אינו מבצע אימות או משלוח של Telegram. העוזרים המסופקים משתמשים בזמן המתנה של 180 שניות לאחר הבנייה. הורדות התלות הראשוניות עשויות לארוך זמן רב יותר מכך.

שני קבצי ה-Compose הבסיסיים משתמשים בשם הפרויקט `tgwitness`, ולכן חילוץ גרסה חדשה לספרייה אחרת אינו בוחר באופן אוטומטי נפח נתונים חדש. שמרו על פריסה אחת בלבד פעילה עבור פרויקט זה. עבור התקנות עצמאיות, השתמשו ב- `docker compose -p NAME ...` ייחודי וביציאת מארח שונה, ושמרו על שניהם בעת עדכונים. עבור פריסה ישנה יותר המשתמשת בשם פרויקט שונה, המשיכו להשתמש בשמה המקורי יחד עם `-p`; `docker compose ls` מציג רשימה של פרויקטים קיימים.

העתיקו את `deploy/env.example` ל-`.env` ושנו את `TGWITNESS_PORT` כדי להשתמש ביציאת לולבק שונה. לדוגמה, `TGWITNESS_PORT=8788` חושף את הלוח ב- `http://127.0.0.1:8788`; הקונטיינר עדיין מאזין על 8787. `.env` מתעלם מ-Git.

אחזור האסימון הראשוני:

```
docker compose exec tgwitness cat /data/panel-token.txt
```

פקודות שימושיות:

```
docker compose ps
docker compose logs --tail 100 -f
docker compose stop
docker compose up -d --wait
```

`restart: unless-stopped` מפעיל מחדש את האספן לאחר קריסה או הפעלה מחדש של הדמון של Docker . בשרת לינוקס, הפעל את Docker בעת האתחול באמצעות מנהל השירותים של ההפצה שלך , בדרך כלל `sudo systemctl enable --now docker`. ב-Windows/macOS, הפעל את ההגדרה "התחל בעת כניסה" ב-Docker Desktop. יציאה מהמחשב, מצב שינה או עצירה של של Docker עלולים להפריע לאיסוף. מכולה שהופסקה במפורש תישאר מופסקת עד שתפעיל אותה שוב.

נפח /tmp מוגבל ל-512 MiB בתצורת הדוגמה. מבנה הייצוא משתמש במקום זאת ב-`temporary-exports/` של כל סביבת עבודה ב-/data הקבוע. יש לשמור מקום שם לייצוא בו-זמני, לצמיחת היומן/WAL, למדיה ולגיבויים. המשגר משתמש בקובץ deploy/constraints.txt כדי לקבע גרסאות תלויות ריצה מוסמכות. Docker ושרתים בעלי אבטחה גבוהה מתקינים מתוך deploy/requirements.lock ו- deploy/build.lock באמצעות pip --require-hashes: כל קובץ חבילה חייב להתאים ל-SHA-256 שנרשם ב-commit, ולכן קובץ שהוחלף ב-PyPI או במראה נדחה. תמונת הבסיס של Python וחבילות מערכת ההפעלה עדיין דורשות אישור גרסה עצמאי.

אין להשתמש ב-docker compose down -v אלא אם כן בכוונתכם להשמיד את היומן והמפתחות. דוחות תקינות הקונטיינר מתייחסים לזמינות שרת האינטרנט, ולא להצלחת לכידת הודעות טלגרם. בדקו את מצב האספן בלוח הבקרה, את פעילותו, את השגיאות ואת אירועי הכיסוי.

### פרופיל עד עצמאי

השירות האופציונלי `witness` מפעיל עד [עצמאי](https://phishdestroy.github.io/TgWitness/he/docs/reference/witness/) בתוך קונטיינר משלו, עם מפתח ויומן משלו בנפח ה-`witness-data`, ורק אסימון עד לקריאה בלבד עבור האספן. צרו את האסימון בדף **ה-Witness** בלוח הבקרה, הוסיפו אותו יחד עם אסימון בוט וערוץ ל-`.env`, ואז הפעילו את הפרופיל:

```
docker compose --profile witness up -d          # deploy/compose/compose.image.yaml: same flag
docker compose logs witness                     # witness key fingerprint
```

השירות מגיע לאספן בתוך רשת Compose בכתובת `http://tgwitness:8787` (`TGWITNESS_WITNESS_COLLECTOR` מבטל את ההגדרה הזו; לדוגמה, `/profiles/<workspace ID>` עבור סביבת עבודה אחרת). עבור עד בשרת נפרד, המנוהל על ידי אדם אחר, יש להשתמש ב-`deploy/compose/compose.witness.yaml` שם, כאשר `TGWITNESS_WITNESS_COLLECTOR` מוגדר לכתובת ה-HTTPS של האספן; קובץ זה מכיל רק את העד.

## התקן תמונה שפורסמה

האתר יהיה זמין לאחר השלמת [תהליך השחרור](https://phishdestroy.github.io/TgWitness/he/docs/reference/deployment/#automated-github-releases) בהצלחה ותצורת חבילת GHCR ציבורית. שם/בעל המאגר אינו מקודד באופן קבוע בעץ המקור הזה. יש להשתמש בתמונה המוצגת בסיכום תהליך השחרור של אותה גרסה.

העתיקו את `deploy/env.example` ל-`.env`. הגדירו את `TGWITNESS_IMAGE` לגרסה שפורסמה, תוך שימוש בנתיב המאגר **באותיות קטנות**, לדוגמה:

```
TGWITNESS_IMAGE=ghcr.io/your-owner/your-repository:0.7.0
TGWITNESS_PORT=8787
```

הפעל קובץ זה בנפרד, במקום `compose.yaml`:

```
docker compose --project-directory . -f deploy/compose/compose.image.yaml pull
docker compose --project-directory . -f deploy/compose/compose.image.yaml up -d --wait
docker compose --project-directory . -f deploy/compose/compose.image.yaml exec tgwitness cat /data/panel-token.txt
```

אין צורך בבניית קוד מקור, ב-Python או במהדר על השרת המארח. תהליך העבודה של המהדורה מיועד למכולות Linux AMD64 ו-ARM64, כולל מכונת הווירטואלית של Docker Desktop ב-Linux. יש להשתמש בתגית גרסה או ב-`ghcr.io/owner/repository@sha256:...` מתוך סיכום תהליך העבודה. לא הוגדרה תגית `latest` נעה או שדרוג יישום ללא השגחה. התמונות וגרסאות המקור משתמשות באותו נפח נתונים כאשר שם הפרויקט שלהן תואם.

## HTTPS אוטומטי בשרת

השתמש בשרת עם Docker, דומיין שבשליטתך ואחסון מקומי קבוע. כוונו את רשומות ה-A/AAAA של הדומיין אל השרת; פרסמו AAAA רק אם ה-IPv6 מגיע אליו. אפשרו כניסת TCP 80 ו-443 ויציאת DNS/HTTPS לצורך הנפקת תעודות. שירותים אחרים אינם רשאים להשתמש ביציאות אלה.

העתיקו את `deploy/env.example` ל-`.env` והגדירו שם מארח, ללא סכמה או נתיב:

```
TGWITNESS_DOMAIN=watch.your-domain.org
```

התחל את בניית הקוד המקור עם שכבת-על HTTPS:

```
docker compose -f compose.yaml -f deploy/compose/compose.https.yaml up -d --build --wait
docker compose -f compose.yaml -f deploy/compose/compose.https.yaml exec tgwitness cat /data/panel-token.txt
```

```
docker compose --project-directory . -f deploy/compose/compose.image.yaml -f deploy/compose/compose.https.yaml up -d --wait
```

עבור תמונה שפורסמה, השתמש ב-`deploy/compose/compose.image.yaml` כקובץ הראשון במקום זאת. שמור את שני הארגומנטים `-f` לשימוש מאוחר יותר בפקודות סטטוס, יומנים, עדכון והפסקת פעולה.

Caddy משיג ומחדש תעודה, מפנה HTTP ל-HTTPS ומעביר בקשות לאספן ברשת Compose הפרטית. למצב התעודה יש נפח קבוע משלו. יציאת המארח הישירה של האספן נשארת בלולבק בלבד. תצורת Caddy המסופקת אינה מאפשרת רישום גישה.

פתח את `https://watch.your-domain.org` והזן את אסימון הפאנל. מוכנות לכתיבה אינה מאשרת הנפקת תעודה או נגישות חיצונית. אם HTTPS אינו מוכן, בדוק את ה-DNS, כללי חומת האש, וכן:

```
docker compose -f compose.yaml -f deploy/compose/compose.https.yaml logs --tail 100 caddy
```

תמונת ה-Caddy המסופקת נושאת את התגית `2-alpine`. ביצוע פקודת pull מרענן את התמונה; הצמיד תקציר שנבדק לפריסה שלך אם אתה זקוק לגרסאות תשתית קבועות.

## עדכונים וגיבויים

שמרו על שם הפרויקט Compose ועל נפח הנתונים גם לאחר עדכונים. תחילה עצרו את האספן ובצעו גיבוי מלא. עבור פריסה מבוססת-מקור כברירת מחדל:

```
docker compose stop
docker compose cp tgwitness:/data ../tgwitness-backup-before-update
```

השתמשו בכל פעם ביעד גיבוי חדש, מחוץ למאגר, והגנו עליו כעל חומר הדורש גישה לחשבון. הנתיב המופיע בדוגמה הוא להמחשה בלבד; השתמשו במיקום הגיבוי הפרטי שלכם. העתיקו את הספרייה כולה, כולל קבצים מוסתרים, כל סביבות העבודה, המפתחות, יומני הראיות והמדיה. גבו בנפרד את מפתח המאסטר של הכספת החיצונית, אם הוגדר. קובץ ZIP של ראיות אינו גיבוי יישום שניתן לשחזר. עבור HTTPS, שמרו גם את כרכי Caddy אם אתם צריכים לשמור על מצב האישור/החשבון שלו.

לצורך פריסה מהמקור, יש להוריד את קבצי הגרסה החדשה ולהריץ:

```
docker compose up -d --build --wait
```

לצורך פריסת תמונה, יש לשנות את `TGWITNESS_IMAGE` לגרסה הרצויה, ולאחר מכן להריץ:

```
docker compose --project-directory . -f deploy/compose/compose.image.yaml pull
docker compose --project-directory . -f deploy/compose/compose.image.yaml up -d --wait
```

השתמשו בקובצי ה-Compose של ההתקנה שלכם גם עבור פקודות ה-stop/copy שלעיל. שמרו על `.env`, על התצורה המותאמת אישית ועל אותו שם פרויקט. `down` שומר על כרכים שמותיים; **`down -v` מוחק אותם**. אין להעתיק את `.venv` בין מערכות הפעלה או גרסאות Python. לעדכונים מקוריים, עצרו את TgWitness, גבו את ספריית הנתונים המלאה שלו, החליפו את קבצי המקור והפעילו את `python start.py --setup-only` לפני ההפעלה.

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

## מהדורות אוטומטיות ב-GitHub

[תהליך שחרור](https://github.com/phishdestroy/TgWitness/blob/main/.github/workflows/release.yml)הגרסאות מוכן לשימוש לאחר שהפרויקט יועלה למאגר GitHub עם Actions מופעל. הוא פועל כאשר **מתפרסמת** גרסה ב-GitHub, כולל גרסת טרום-שחרור. טיוטות ודחיפות תגיות לבדן אינן מפרסמות חבילות.

1. הגדר את גרסת החבילה ואת יומן השינויים, ולאחר מכן פרסם גרסה המתויגת ב-`v` בתוספת הגרסה המדויקת של `pyproject.toml`, כגון `v0.7.0`.
2. תהליך העבודה מאמת את התג ומריץ את בדיקות Python המשותפות ל-Windows/Linux/macOS, בדיקות דפדפן כלליות/ייבוא חשבונות/QR, חבילת המקור ו-Docker. כמו כן, מתבצעת התקנה מקורית חדשה בכל שלושת מערכות ההפעלה באמצעות Python 3.12.
3. לאחר שעובר את הבדיקות הללו, הוא מבצע בדיקת תפקוד (smoke test) לתמונת ARM64 תחת QEMU, מפרסם תמונות AMD64/ARM64 ב-`ghcr.io/<lowercase-owner>/<lowercase-repository>:<version>`, ומצרף את קובץ ה-ZIP המקורי, את בדיקת הסיכום (checksum) ואת ה-Python wheel לגרסה. משימה נפרדת ב-Windows בונה ומצרפת את קובץ ה-ZIP הנייד ואת בדיקת הסיכום שלו.
4. לאחר הפרסום הראשון, יש לפתוח את הגדרות חבילת ה-GHCR ולהגדיר את הנראות ל**"ציבורי"** אם הכוונה היא לאפשר הורדת תמונות באופן אנונימי. מאגר קוד פתוח ציבורי לבדו אינו מבטיח חבילת קונטיינר ציבורית. מדיניות הארגון חייבת לאפשר פרסום החבילה. זרימת העבודה משתמשת ב-`GITHUB_TOKEN`; אין להכניס למאגר סיסמאות רישום או פרטי התחברות ל-VPS.

הצלחת זרימת העבודה מרחוק לא הוכחה על ידי הכנה מקומית זו. אמולציית ARM64 היא בדיקת תפקוד בסיסית בלבד, ואינה מהווה הסמכה לחומרה מקורית או לשימוש ב-Telegram בסביבה חיה. תהליך זה אוטומטי את אריזת הגרסה; הפעלת שרת עדיין דורשת את הפקודה Compose ואת תנאי הקדם של הדומיין/המארח. שרתים קיימים אינם משודרגים או מופעלים מחדש באופן אוטומטי עם פרסום גרסה חדשה.

## שרת מרוחק

יש להגביל את השירות ל-loopback ולהשתמש במנהרת SSH, או לסיים את HTTPS ב- פרוקסי הפוך. קובץ ה-Compose הבסיסי מיועד לשימוש מקומי בלבד; שכבת-העל האופציונלית `deploy/compose/compose.https.yaml` מספקת את Caddy עבור דומיין שהוגדר. הקפידו שלא לכלול את אסימון ה-bearer בכתובות URL וביומני הפרוקסי. פרוקסי הפוך צריך להגביל את גודל הבקשות ואת קצב החיבורים. אל תחשפו HTTP רגיל לאינטרנט.

דוגמאות ל-systemd, למשימת כניסה ל-Windows, לסוכן משתמש ב-macOS ול-Caddy מסופקות בתיקיית [deploy/.](https://github.com/phishdestroy/TgWitness/blob/main/deploy/README.md) יש לבדוק/להתאים את הנתיבים שלהן לפני ההתקנה. מדובר בתבניות מסופקות, ולא בהגדרות פלטפורמה המבוצעות באופן מקומי. אין שירות או משימה ברקע הרשומים על ידי המשגר הרגיל.

ב-Windows, הפעלה של `pythonw.exe` ללא חלון מאחסנת אבחון אתחול/שרת ב- `logs/server.log` תחת ספריית הנתונים (5 MiB לכל קובץ, שתי גיבויים מתחלפים). הפעלות קונסולה שומרות את יומני הקונסולה. רישום גישה ל-HTTP מושבת בשני המצבים. יש להגן על היומנים באמצעות ספריית הנתונים ולבדוק אותם לפני השיתוף.

## הפעלה מחדש ופערים

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

StringSession שומר על ההרשאה אך לא על מצב העדכון/הישות המתמשך של Telethon. הדיאלוגים נטענים מחדש בעת ההפעלה. Telegram/Telethon יכולים לשחזר חלק מהפרעות השידור במהלך הפעולה, אך TgWitness אינו מבטיח השמעה חוזרת מתמשכת לאחר הפעלה מחדש של התהליך. בכל הפעלה נרשמים ראש היומן הקודם וגבול המצב הלא מקוון. המוניטור בודק את החיבור כל 10 שניות ומוסיף אות חיים כל דקה (**פרמטרים → תיעוד פעילות כל**). הפרעות קצרות עלולות להחמיץ; תעבורה מחוברת אינה מבטיחה מסירת עדכונים מלאה. תמונות מצב הן תצפיות מפורשות על ההיסטוריה הנוכחית, לעולם לא תיקון פערים.

תור המדיה מאוחסן במסד הנתונים SQLite של כל סביבת עבודה. הודעה והמשימה שלה נשמרים באופן אטומי. משימות שהופסקו במהלך הריצה משוחזרות לצורך ניסיון חוזר בעת ההפעלה. לכל הורדה יש זמן המתנה בסיסי של 120 שניות בתוספת זמן בהתאם לגודל הקובץ בקצב של 256 KiB/s, וכן מגבלה של 1–2,000 MiB לכל סוג קובץ מצורף; זמן ההמתנה, המהירות והניסיונות החוזרים מוגדרים תחת **"פרמטרים"**. האספן מדלג על קבצים שגודלם אינו ידוע. השהיה שומרת על המשימות בתור. הניסיון החוזר משתמש במתאר הקובץ המקורי שנצפה, לעולם לא בגרסה האחרונה של הודעה שעברה עריכה לאחר מכן. לכשלים זמניים יש מספר ניסיונות חוזרים מוגבל; הפסקות של FloodWait במדיה נשמרות גם לאחר הפעלה מחדש. שחזור המדיה נפרד משחזור העדכונים של Telegram ואינו יכול לשחזר קבצים שנעלמו.

## גיבוי, שחזור וקיבולת

עצור את התהליך לפני העתקת **ספריית הנתונים כולה**, כולל vault.key, signing.enc, credentials.enc, קבצי מסד הנתונים SQLite/WAL, מדיה, אסימון, נקודות ביקורת, וכל הפרופילים/תתי-הספריות. שחזר את העותק המלא בזמן ששירות היעד מושבת. מפתחות vault חסרים או אי-התאמה במפתחות החתימה יגרמו לכישלון ההפעלה; אין ליצור מחדש מפתחות כדי לכפות גישה.

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

אימות סטארט-אפ וייצוא רשומות זרם במקום טעינת היומן כולו. ייצוא מקבע תמונת מצב של קריאה בעוד שכתובות WAL חדשות יכולות להמשיך; ייצוא ארוך-טווח יכול לשמור דפי WAL, ולכן נפח הדיסק עדיין חשוב. קבצי ZIP מוגבלים ל-4 GiB ללא דחיסה כדי להתאים לברירת המחדל של המאמת העצמאי; **פרמטרים → ZIP חתום הגדול ביותר** מעלה את המגבלה, וארכיונים כאלה מאומתים באמצעות `verify.py --max-gib N`. בפורמטים אחרים אין מגבלה על מספר האירועים. דפדפנים נתמכים מזרימים קטעי תגובה לקובץ שנבחר על ידי המשתמש. דפדפנים אחרים מאחסנים במאגר זמני לכל היותר 128 MiB ומפנים העברות גדולות יותר ל-CLI המאושר:

```
python -m tgwitness.download --token-file data/live/panel-token.txt --out evidence.zip
```

השתמש ב-`--profile ID` מתוך **'ייצוא' → 'מזהה סביבת עבודה'** עבור סביבת עבודה אחרת, `--format zip|jsonl|csv|html`, `--url https://your-server` עבור שרת מרוחק, או `--max-mib` כדי לשנות את מגבלת ההעברה של 5 GiB. HTTP רגיל מותר רק עבור loopback. האסימונים מועברים בכותרות, הפניות נדחות, קבצים קיימים אינם נמחקים, והורדות לא שלמות אינן מתפרסמות כקבצים מוגמרים. אם TGWITNESS_TOKEN מבטל את האסימון שנוצר, השתמש בקובץ מוגן בנפרד המכיל את הערך הפעיל: panel-token.txt אינו נכתב מחדש על ידי הביטול. ה-SHA-256 של הפקודה הוא רק בדיקת סיכום העברה; אמת באופן עצמאי את קובץ ה-ZIP החתום.

קובצי הייצוא מהשרת נשמרים בתוך ה-`temporary-exports/` הפרטי של כל סביבת עבודה. תגובות מוצלחות מנקות את הקבצים שלהן. ייצואים שנקטעו מוסרים בעת ההפעלה הבאה של סביבת העבודה, תוך שמירה על נעילת המופע הבלעדי שלה. ספרייה זו היא חלק ממודל האיומים/קיבולת האחסון; יש להשתמש בנפח נתונים מוצפן. העברות בהיקף של מספר ג'יגה-בייט בקנה מידה תעשייתי עדיין דורשות אימות במערכת היעד שלכם.

הלוח מציג מדיה בתור/שנכשלה, המדיה הוותיקה ביותר הממתינה, שטח דיסק פנוי, הפסקות בבקשות טלגרם, ומקורות שגישתם לא אושרה. אבחונים אלה אינם מהווים ניטור משלוח מלא מקצה לקצה. סביבות העבודה חולקות תהליך; חשבון רועש יכול עדיין להשפיע על אחרים. תהליכי עבודה נפרדים, שמירה/סיבוב, שחזור עדכונים עמיד והסמכת פריסה מלאה נותרים על כנם. הגישה המוגבלת ללוח המחוונים מתועדת במסמך [הגישה וההרשאות](https://phishdestroy.github.io/TgWitness/he/docs/reference/access/); נקודות ביקורת עצמאיות מכוסות במדריך [העדים](https://phishdestroy.github.io/TgWitness/he/docs/reference/witness/).

## אפשרויות חיבור והגנה

נתיבי החיבור הם לכל סביבת עבודה ויש להגדירם לפני ההרשאה. SOCKS5/HTTP CONNECT משתמשים בתלות המוצמדת python-socks. MTProxy משתמש ב- תחבורה ביניים אקראית ניסיונית של Telethon; סודות TLS מזויפים אינם נתמכים. המעבר הישיר למצב גיבוי תלוי במצב [ה-IP](https://phishdestroy.github.io/TgWitness/he/docs/reference/connection/#ip-modes) הנבחר: מצב "הסתרת IP" מסרב לכך; מצב הגיבוי המפורש מאפשר זאת לאחר עיכוב. מצב מנהרה/VPN מאפשר נתיבים ישירים אך אינו יוצר VPN. זו אינה מדיניות רשת מערכתית.

בהתקנות חדשות, TGWITNESS_VAULT_KEY_FILE מצביע על קובץ מפתח ראשי אקראי המוגן בנפרד. יש לעגן אותו לקריאה בלבד מחוץ ל-/data בתוך קונטיינר. יש לשמור את מטא-הנתונים הציבוריים של salt בקובץ vault.external.json בנפרד עבור כל סביבת עבודה והמפתח הראשי. כספות מקומיות קיימות דורשות הגירה מתוכננת; הגדרת משתנה זה אינה ממירה אותן באופן אוטומטי. אחסון וייצוא של הודעות/מדיה אינם מוצפנים על ידי היישום. יש להשתמש בנפחים מוצפנים ובאחסון זמני פרטי מספיק במידת הצורך.

נהלים מפורטים: [חיבור/אבטחה](https://phishdestroy.github.io/TgWitness/he/docs/reference/connection/) ו [מצבי הפעלה](https://phishdestroy.github.io/TgWitness/he/docs/reference/operations/).
