# การติดตั้ง

Canonical page: https://phishdestroy.github.io/TgWitness/th/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) · [Português (Brasil)](https://github.com/phishdestroy/TgWitness/blob/main/docs/pt/DEPLOYMENT.md) · [ภาษาตุรกี](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 แหล่งที่มา หรือคัดลอก repository แล้วเรียกใช้คำสั่งต่อไปนี้จากไดเรกทอรีของโครงการ:

| การติดตั้ง | เริ่ม | ทำงานในพื้นหลังหรือไม่? |
| --- | --- | --- |
| แพ็กเกจแบบพกพาสำหรับ Windows | `TgWitness.cmd` | ไม่; ให้หน้าต่างเปิดไว้ |
| Windows ฉบับดั้งเดิม | `Start.cmd` | ไม่; ใช้任务การลงชื่อเข้าระบบแบบเลือกใช้สำหรับการทำงานในพื้นหลัง |
| รองรับ Linux/macOS โดยตรง | `sh start.sh` | ไม่; ใช้ systemd/launchd สำหรับการทำงานในพื้นหลัง |
| Docker บนโฮสต์ใดก็ตามที่ได้รับการสนับสนุน | `docker compose up -d --build --wait` | ใช่ครับ ในขณะที่ Docker daemon กำลังทำงานอยู่ |
| เครื่องมือช่วยเหลือ 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 จะสร้างส่วนประกอบเหล่านี้ภายในภาพ (image) โดยไม่จำเป็นต้องใช้ 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 หรือการสร้างส่วนหน้า (frontend) ให้เรียกใช้โปรแกรมเริ่มต้นจาก บัญชีระบบปฏิบัติการปกติของคุณ; TgWitness ไม่ต้องการสิทธิ์ผู้ดูแลระบบ/root

- **Windows:** `Start.cmd` ตรวจสอบ `py -3` ก่อน แล้ว `python` ต่อ ตามด้วยโฟลเดอร์ติดตั้งตามค่าเริ่มต้นของผู้ใช้แต่ละคนและ โฟลเดอร์ Program Files และต้องการเวอร์ชัน 3.11 หรือใหม่กว่า หากไม่มีอันใดทำงานได้ มัน จะเสนอการติดตั้งอัตโนมัติตามผู้ใช้แต่ละคนตามที่อธิบายไว้ข้างต้น `py -3 start.py` ก็ทำงานได้เช่นกัน แพ็กเกจแบบพกพาไม่ต้องการ Python เลย
- **Linux:** `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 ต้องใช้คอนเทนเนอร์ Linux บน Windows คอนเทนเนอร์จะติดตั้ง ไลบรารี Python ที่จำเป็นด้วยตัวเอง; ระบบโฮสต์ไม่จำเป็นต้องติดตั้ง Python แยกต่างหาก

ใช้พื้นที่จัดเก็บข้อมูลแบบถาวรในเครื่องสำหรับไดเรกทอรีข้อมูล วางแผนความจุจากข้อความ, สื่อ, การเติบโตของ WAL, การส่งออก และการสำรองข้อมูล; ไม่มีข้อกำหนดขั้นต่ำ สำหรับดิสก์/RAM ที่อิงจากหลักฐานและใช้ได้กับทุกภาระงาน สถาปัตยกรรม CPU และเวอร์ชัน Python ที่ไม่มี wheel ของ dependency ที่เข้ากันได้ อาจต้องการเครื่องมือสร้างเพิ่มเติมและ การรับรองความเหมาะสมของตนเอง "Portable" ไม่ใช่คำยืนยันถึงการสนับสนุนระบบปฏิบัติการหรือฮาร์ดแวร์แบบสากล

Windows 11/Python 3.12 ได้ผ่านการตรวจสอบในเครื่องแล้ว ส่วนการกำหนดค่าสำหรับ Linux/macOS/คอนเทนเนอร์ และ CI ได้จัดเตรียมไว้แล้ว แต่ยังไม่ได้ดำเนินการบนเครื่องโฮสต์พัฒนาการนี้ ดู [VERIFICATION.md](https://phishdestroy.github.io/TgWitness/th/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 worker เพียงหนึ่งตัว แผงควบคุมสามารถจัดการพื้นที่ทำงานได้ไม่จำกัด โดยมีไดเรกทอรีพื้นที่ทำงานเพิ่มเติมอยู่ภายใต้ profiles/<id>/. สำหรับอินสแตนซ์บริการที่แยกกัน ให้ใช้ไดเรกทอรีและพอร์ตที่ต่างกัน ไฟล์ WAL ของ SQLite ต้องเก็บไว้ในพื้นที่จัดเก็บข้อมูลถาวร แบบท้องถิ่น ไม่ใช่ในระบบไฟล์เครือข่าย อย่าใช้โวลุ่มเดียวกันระหว่างรีพลิกา

## แพ็กเกจแบบพกพาสำหรับ Windows

ทุกเวอร์ชันที่เผยแพร่บน GitHub จะประกอบด้วย `TgWitness-<version>-windows-amd64-portable.zip` และ `.sha256` ซึ่งประกอบด้วย Python 3.12 เวอร์ชันรันไทม์อย่างเป็นทางการที่สามารถฝังได้จาก python.org (ค่า checksum ถูกตรึงไว้ใน `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-bit ด้วย Python 3.12:

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

ตัวสร้างจะตรวจสอบค่า checksum ขณะทำงาน ติดตั้งการพึ่งพาที่จำกัดลงใน แพ็กเกจ ดำเนินการตรวจสอบความพร้อมด้วยตัวแปลภาษาที่ฝังไว้ และเขียนไฟล์ ZIP พร้อมค่า checksum ลงใน `dist/`

## Container

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

สิ่งนี้สร้าง volume ที่มีชื่อและคงที่สำหรับ /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` เพื่อใช้พอร์ต loopback ที่ต่างกัน ตัวอย่างเช่น `TGWITNESS_PORT=8788` เปิดแผงควบคุมที่ `http://127.0.0.1:8788`; คอนเทนเนอร์ยังคงรับฟังที่พอร์ต 8787 `.env` ถูก Git-ignored

รับโทเค็นเริ่มต้น:

```
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 daemon รีสตาร์ท บนเซิร์ฟเวอร์ Linux ให้เปิดใช้งาน Docker เมื่อบูตระบบโดยใช้ผู้จัดการบริการ ของระบบปฏิบัติการของคุณ ซึ่งโดยทั่วไปคือ `sudo systemctl enable --now docker` บน Windows/macOS ให้เปิดใช้งาน การตั้งค่า "เริ่มเมื่อลงชื่อเข้าใช้" ของ Docker Desktop การออกจากระบบเดสก์ท็อป การเข้าสู่โหมดสลีป หรือ Docker daemon ที่ถูกหยุด สามารถขัดขวางการเก็บข้อมูลได้ คอนเทนเนอร์ที่ถูกหยุดอย่างชัดเจนจะยังคง อยู่ในสถานะหยุดจนกว่าคุณจะเริ่มมันขึ้นใหม่

ในตัวอย่างการกำหนดค่านี้ ปริมาณ /tmp ถูกจำกัดไว้ที่ 512 MiB การสร้างไฟล์ส่งออก จะใช้`temporary-exports/` ของแต่ละพื้นที่ทำงานบน /data ที่คงอยู่แทน ให้สำรองพื้นที่ ไว้ที่นั่นสำหรับการส่งออกพร้อมกัน การขยายตัวของ journal/WAL ไฟล์สื่อ และการสำรองข้อมูล ตัวเรียกใช้งาน (launcher) ใช้ deploy/constraints.txt เพื่อกำหนดเวอร์ชันที่ผ่านการรับรองของ dependency ใน runtime Docker และเซิร์ฟเวอร์ระดับความมั่นใจสูงจะติดตั้งจาก deploy/requirements.lock และ deploy/build.lock ด้วย pip --require-hashes: ทุกไฟล์แพ็กเกจต้องตรงกับ SHA-256 ที่บันทึกไว้ใน commit ดังนั้นไฟล์ที่ถูกแทนที่บน PyPI หรือมิเรอร์จะถูกปฏิเสธ ภาพพื้นฐานของ Python และแพ็กเกจระบบปฏิบัติการยังคงต้องผ่านการรับรองเวอร์ชันอย่างอิสระ

อย่าใช้คำสั่ง `docker compose down -v` เว้นแต่คุณมีเจตนาที่จะทำลายบันทึกและกุญแจ รายงานสภาพคอนเทนเนอร์แสดงถึงความพร้อมใช้งานของเว็บเซิร์ฟเวอร์ ไม่ใช่การจับข้อมูล Telegram ที่สำเร็จ ตรวจสอบสถานะของตัวเก็บข้อมูลบนแผงควบคุม สัญญาณชีพ ความผิดพลาด และเหตุการณ์การครอบคลุม

### โปรไฟล์ผู้เป็นพยานอิสระ

บริการ `witness` (แบบเลือกใช้) ทำงานเป็น[พยานอิสระ](https://phishdestroy.github.io/TgWitness/th/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>` สำหรับ พื้นที่ทำงานอื่น) สำหรับ witness บนเซิร์ฟเวอร์แยกต่างหาก ที่ดำเนินการโดยบุคคลอื่น ให้ใช้ `deploy/compose/compose.witness.yaml` ที่นั่น โดยตั้งค่า `TGWITNESS_WITNESS_COLLECTOR` เป็นที่อยู่ HTTPS ของผู้เก็บข้อมูล; ไฟล์ดังกล่าวมีเพียง witness เท่านั้น

## ติดตั้งภาพระบบที่เผยแพร่แล้ว

ข้อมูลนี้จะพร้อมใช้งานหลังจากกระบวนการ[ปล่อย](https://phishdestroy.github.io/TgWitness/th/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 รวมถึงเครื่องเสมือน Linux ของ Docker Desktop ใช้แท็กเวอร์ชันหรือ `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 overlay:

```
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` ทั้งสองไว้สำหรับคำสั่ง status, logs, update และ stop ในภายหลัง

Caddy รับและต่ออายุใบรับรอง, เปลี่ยนเส้นทาง HTTP เป็น HTTPS, และส่งต่อ คำขอไปยังตัวเก็บข้อมูลบนเครือข่าย Compose ส่วนตัว สถานะของใบรับรองมี โวลุ่มถาวรเป็นของตัวเอง พอร์ตโฮสต์โดยตรงของตัวเก็บข้อมูลยังคงเป็น loopback เท่านั้น การตั้งค่า 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` ของมัน การดึงข้อมูลจะอัปเดตภาพนั้น; หากต้องการเวอร์ชันโครงสร้างพื้นฐานที่คงที่ ให้ปักหมุด digest ที่ผ่านการทดสอบแล้วในระบบของคุณ

## การอัปเดตและการสำรองข้อมูล

รักษาชื่อโครงการ Compose และปริมาณข้อมูลให้คงเดิมระหว่างการอัปเดต ก่อนอื่นให้หยุด ตัวเก็บข้อมูล (collector) และสร้างสำเนาสำรองอย่างครบถ้วน สำหรับการติดตั้งแบบอิงแหล่งที่มา (source-based deployment) ตามค่าเริ่มต้น:

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

ใช้จุดหมายปลายทางสำรองข้อมูลใหม่ทุกครั้ง ซึ่งอยู่นอกรีโพสิตอรี และปกป้องมันในฐานะ ข้อมูลที่เข้าถึงได้เฉพาะบัญชีเท่านั้น เส้นทางตัวอย่างนี้ใช้เพื่ออธิบายเท่านั้น; ให้ใช้ ตำแหน่งสำรองข้อมูลส่วนตัวของคุณเอง คัดลอกไดเรกทอรีทั้งหมด รวมถึงไฟล์ที่ซ่อนอยู่ พื้นที่ทำงานทั้งหมด กุญแจ บันทึก และสื่อข้อมูล สำรองข้อมูลกุญแจหลักของ vault ภายนอกแยกต่างหาก หากมีการกำหนดค่าไว้ ไฟล์ 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` เก็บ volumes ที่มีชื่อไว้; **`down -v` ลบพวกมันออก** อย่าคัดลอก `.venv` ระหว่างระบบปฏิบัติการ หรือเวอร์ชัน Python สำหรับการอัปเดตแบบเนทีฟ ให้หยุด TgWitness สำรองข้อมูล ไดเรกทอรีข้อมูลทั้งหมด เปลี่ยนไฟล์ต้นฉบับ และรัน `python start.py --setup-only` ก่อนเปิดใช้งาน

ตรวจสอบสิทธิ์การเข้าถึงแผงควบคุม, ตัวตนบัญชี, สถานะการสังเกตการณ์ และขอบเขตการครอบคลุมหลังการ อัปเดต การรีสตาร์ทจะไม่สร้างการอัปเดต Telegram ที่พลาดไปใหม่ การย้อนกลับอาจ จำเป็นต้องใช้ข้อมูลสำรองก่อนการอัปเดต หากเวอร์ชันในอนาคตเปลี่ยนแปลงรูปแบบการจัดเก็บข้อมูล

## การปล่อยเวอร์ชันอัตโนมัติบน GitHub

[กระบวนการปล่อย](https://github.com/phishdestroy/TgWitness/blob/main/.github/workflows/release.yml)เวอร์ชันจะพร้อมใช้งานทันทีหลังจาก โครงการนี้ถูกส่งไปยัง repositori GitHub ที่เปิดใช้งาน Actions แล้ว ระบบจะทำงานเมื่อ GitHub Release ถูก**เผยแพร่** รวมถึงเวอร์ชันก่อนปล่อย (prerelease) การส่งร่าง (drafts) และการส่งแท็ก (tag pushes) เพียงอย่างเดียวจะไม่เผยแพร่แพ็กเกจ

1. กำหนดเวอร์ชันแพ็กเกจและบันทึกการเปลี่ยนแปลง (changelog) แล้วเผยแพร่เวอร์ชันที่ติดแท็กด้วย `v` พร้อมทั้งเวอร์ชัน `pyproject.toml` ที่ถูกต้อง เช่น `v0.7.0`.
2. กระบวนการทำงานนี้จะตรวจสอบความถูกต้องของแท็กและดำเนินการตรวจสอบ Python ที่ใช้ร่วมกันบน Windows/Linux/macOS, general/account-import/QR browser, source-package และ Docker การติดตั้งแบบเนทีฟใหม่ยัง ได้รับการทดสอบบนระบบปฏิบัติการทั้งสามโดยใช้ Python 3.12
3. เมื่อการตรวจสอบดังกล่าวผ่านแล้ว ระบบจะทำการทดสอบเบื้องต้น (smoke test) ภาพระบบ ARM64 บน QEMU, เผยแพร่ ภาพระบบ AMD64/ARM64 ไปยัง `ghcr.io/<lowercase-owner>/<lowercase-repository>:<version>`, และแนบไฟล์ ZIP แหล่งที่มา, ค่า checksum และไฟล์ Python wheel ไปยังการปล่อยเวอร์ชัน ส่วนงานแยกต่างหาก บน Windows จะทำการสร้างและแนบไฟล์ ZIP แบบพกพาพร้อมค่า checksum ของมัน
4. หลังการเผยแพร่ครั้งแรก ให้เปิดการตั้งค่าแพ็กเกจ GHCR และตั้งการมองเห็น เป็น **Public** หากมีวัตถุประสงค์ที่จะดึงภาพแบบไม่ระบุตัวตน การมี repositori แหล่งที่มาแบบสาธารณะ เพียงอย่างเดียวไม่รับประกันว่าแพ็กเกจคอนเทนเนอร์จะเป็นแบบสาธารณะ นโยบายขององค์กรต้อง อนุญาตให้เผยแพร่แพ็กเกจได้ กระบวนการทำงานนี้ใช้ `GITHUB_TOKEN`; ไม่ควรมี รหัสผ่านของ registry หรือข้อมูลรับรอง VPS ใน repositori

ความสำเร็จของกระบวนการทำงานจากระยะไกลยังไม่ได้รับการยืนยันจากการเตรียมการในระบบท้องถิ่นนี้ การจำลอง ARM64 เป็นการตรวจสอบเบื้องต้น (smoke check) ไม่ใช่การรับรองการทำงานบนฮาร์ดแวร์ต้นฉบับหรือการรับรอง Telegram ในสภาพแวดล้อมจริง สิ่งนี้ช่วยอัตโนมัติในการแพ็กเกจเวอร์ชันใหม่; การเริ่มต้นเซิร์ฟเวอร์ยังคงต้องใช้คำสั่ง Compose และข้อกำหนดเบื้องต้นเกี่ยวกับโดเมน/โฮสต์ เซิร์ฟเวอร์ที่มีอยู่จะไม่ถูกอัปเกรด หรือรีสตาร์ทโดยอัตโนมัติเมื่อมีเวอร์ชันใหม่ถูกเผยแพร่

## เซิร์ฟเวอร์ระยะไกล

ให้บริการนี้ผูกกับ loopback และใช้ SSH tunnel หรือยุติ HTTPS ที่ proxy กลับด้าน ไฟล์ Compose พื้นฐานใช้ได้เฉพาะในเครื่องท้องถิ่นเท่านั้น; ส่วน overlay `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 วินาที และเพิ่มสัญญาณชีพทุกนาที (**พารามิเตอร์ → Liveness record every**). การขัดจังหวะสั้นๆ อาจถูกมองข้ามได้; การเชื่อมต่อที่เสถียรไม่รับประกันการส่งข้อมูลอัปเดต อย่างครบถ้วน ภาพถ่าย (Snapshots) เป็นการสังเกตประวัติปัจจุบันอย่างชัดเจน ไม่เคยเป็นการซ่อมแซมช่องว่าง

คิวสื่อถูกเก็บไว้ในฐานข้อมูล SQLite ของแต่ละพื้นที่ทำงาน ข้อความและงานที่เกี่ยวข้อง จะถูกบันทึกแบบอะตอมิก งานที่กำลังทำงานอยู่แต่ถูกขัดจังหวะจะได้รับการกู้คืนเพื่อลองใหม่เมื่อเริ่มต้นใหม่ การดาวน์โหลดแต่ละครั้งมีเวลาหมดอายุพื้นฐาน 120 วินาที บวกกับเวลาตามความเร็ว 256 KiB/s ตามขนาดไฟล์ และ ขีดจำกัด 1–2,000 MiB ต่อประเภทไฟล์แนบ; เวลาหมดอายุ ความเร็ว และการลองใหม่ ตั้งอยู่ในส่วน **Parameters** ผู้รวบรวม จะข้ามไฟล์ที่มีขนาดไม่ทราบ การหยุดชั่วคราวจะเก็บงานในคิวไว้ การลองใหม่จะใช้ ตัวระบุไฟล์ที่สังเกตได้เดิม ไม่เคยใช้เวอร์ชันล่าสุดของข้อความที่ถูกแก้ไขในภายหลัง ความล้มเหลวชั่วคราวมีการลองใหม่ที่จำกัด; การหยุดชั่วคราวของ FloodWait สำหรับสื่อจะคงอยู่หลังการเริ่มต้นใหม่ การกู้คืนสื่อแยกต่างหากจากการกู้คืนการอัปเดต Telegram และไม่สามารถสร้างไฟล์ที่หายไปใหม่ได้

## การสำรองข้อมูล การกู้คืนข้อมูล และความจุ

หยุดกระบวนการก่อนที่จะคัดลอก**ไดเรกทอรีข้อมูลทั้งหมด** รวมถึง vault.key, signing.enc, credentials.enc, ฐานข้อมูล SQLite/ไฟล์ WAL, สื่อ, โทเค็น, จุดตรวจสอบ, และโปรไฟล์/ไดเรกทอรีย่อยทั้งหมด กู้คืน สำเนาทั้งหมดในขณะที่บริการปลายทางถูกหยุดไว้ การขาดกุญแจ vault หรือ ความไม่ตรงกันของกุญแจลงนามจะทำให้การเริ่มต้นล้มเหลว; อย่าสร้างกุญแจใหม่เพื่อบังคับการเข้าถึง

เก็บสำรองข้อมูลลับไว้ในรูปแบบที่เข้ารหัสและมีการควบคุมการเข้าถึง ไฟล์ ZIP ของหลักฐานสามารถพกพาได้ ตรวจสอบหลักฐานที่บันทึกไว้ ไม่ใช่การสำรองข้อมูลแอปพลิเคชันหรือการสำรองข้อมูลเซสชัน Telegram ไม่มีระบบลบข้อมูลอัตโนมัติตามระยะเวลาที่กำหนด วางแผนพื้นที่ดิสก์สำหรับข้อความทั้งหมด เมตาดาต้าดิบ สื่อข้อมูล การส่งออกชั่วคราว และการสำรองข้อมูล

เริ่มต้นการตรวจสอบและส่งออกบันทึกสตรีมแทนการโหลดบันทึกทั้งหมด การส่งออกจะตรึงภาพสแนปช็อตที่อ่านได้ในขณะที่การเขียน WAL ใหม่สามารถดำเนินต่อไปได้; การส่งออกที่ใช้เวลานาน สามารถเก็บหน้า WAL ไว้ได้ ดังนั้นความจุของดิสก์ยังคงมีความสำคัญ ZIP ถูกจำกัดไว้ที่ 4 GiB เมื่อไม่ถูกบีบอัด เพื่อให้สอดคล้องกับค่าเริ่มต้นของผู้ตรวจสอบอิสระ; **พารามิเตอร์ → Largest signed 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` จาก **Exports → Workspace 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/`ส่วนตัวของแต่ละพื้นที่ทำงาน การส่งออกที่สำเร็จจะลบไฟล์ที่เกี่ยวข้องออกไป การส่งออกที่ถูกขัดจังหวะจะถูกลบออกเมื่อ พื้นที่ทำงานเริ่มต้นขึ้นครั้งต่อไป โดยยังคงล็อกอินสแตนซ์เฉพาะไว้ ไดเรกทอรีนี้เป็นส่วนหนึ่งของ โมเดลภัยคุกคาม/ความจุพื้นที่จัดเก็บ; ให้ใช้โวลุ่มข้อมูลที่เข้ารหัส การถ่ายโอนข้อมูลระดับการผลิต หลายกิกะไบต์ยังคงต้องผ่านการตรวจสอบความเหมาะสมบนระบบเป้าหมายของคุณ

แผงควบคุมแสดงสื่อที่อยู่ในคิว/ล้มเหลว สื่อที่รอการประมวลผลที่เก่าที่สุด พื้นที่ดิสก์ว่าง การหยุดชั่วคราวของคำขอ Telegram และแหล่งข้อมูลที่การเข้าถึงยังไม่ได้รับการยืนยัน การวินิจฉัยเหล่านี้ไม่ใช่ ระบบตรวจสอบการส่งข้อมูลแบบ end-to-end ที่สมบูรณ์ พื้นที่ทำงานใช้กระบวนการร่วมกัน; บัญชีที่มีกิจกรรมรบกวนอาจ ยังคงส่งผลกระทบต่อบัญชีอื่นได้ กระบวนการทำงานแยกกัน การเก็บรักษา/หมุนเวียนข้อมูล การกู้คืนการอัปเดต ที่ทนทาน และการรับรองการปรับใช้อย่างเต็มรูปแบบยังคงมีอยู่ การเข้าถึงแผงควบคุมที่จำกัดขอบเขตถูกบันทึก ไว้ใน[ส่วนการเข้าถึงและสิทธิ์](https://phishdestroy.github.io/TgWitness/th/docs/reference/access/); จุดตรวจสอบอิสระถูกครอบคลุมในคู่มือ [ผู้เป็นพยาน](https://phishdestroy.github.io/TgWitness/th/docs/reference/witness/)

## ตัวเลือกการเชื่อมต่อและการป้องกัน

เส้นทางเชื่อมต่อถูกกำหนดตามพื้นที่ทำงาน (workspace) และควรตั้งค่าก่อนการอนุญาต SOCKS5/HTTP CONNECT ใช้ไลบรารี python-socks ที่ถูกกำหนดไว้ MTProxy ใช้ การขนส่งขั้นกลางแบบสุ่มทดลองของ Telethon; ไม่สนับสนุน Fake TLS ee secrets การเปลี่ยนไปใช้เส้นทางสำรองโดยตรงขึ้นอยู่กับโหมด [IP](https://phishdestroy.github.io/TgWitness/th/docs/reference/connection/#ip-modes) ที่เลือก: โหมด Hide IP ไม่อนุญาต; โหมด fallback แบบชัดเจนอนุญาตหลังจากรอระยะเวลาหนึ่ง โหมด Tunnel/VPN อนุญาตเส้นทางโดยตรงแต่ไม่สร้าง VPN นี่ไม่ใช่กฎนโยบายเครือข่ายระดับระบบ

สำหรับการติดตั้งใหม่ TGWITNESS_VAULT_KEY_FILE จะชี้ไปยังไฟล์กุญแจหลักแบบสุ่ม ที่ได้รับการป้องกันแยกต่างหาก ให้ติดตั้งไฟล์นี้ในโหมดอ่านอย่างเดียว (read-only) นอกโฟลเดอร์ /data ในคอนเทนเนอร์ รักษาข้อมูลเมตาดาต้า salt ของไฟล์ vault.external.json แบบสาธารณะให้คงอยู่ โดยแยกเก็บไว้กับแต่ละพื้นที่ทำงาน (workspace) และกุญแจหลักอย่างแยกกัน Vault ท้องถิ่นที่มีอยู่จำเป็นต้องมีการย้ายข้อมูลตามแผน; การตั้งค่าตัวแปรนี้จะไม่ แปลงข้อมูลเหล่านั้นโดยอัตโนมัติ การจัดเก็บและส่งออกข้อความ/สื่อไม่ได้รับการเข้ารหัสโดยแอปพลิเคชัน ใช้โวลุ่มที่เข้ารหัสและพื้นที่จัดเก็บชั่วคราวส่วนตัวที่เพียงพอเมื่อจำเป็น

ขั้นตอนรายละเอียด: [การเชื่อมต่อ/ความปลอดภัย](https://phishdestroy.github.io/TgWitness/th/docs/reference/connection/) และ [โหมดการทำงาน](https://phishdestroy.github.io/TgWitness/th/docs/reference/operations/)
