อ้างอิง / การตั้งค่า
การติดตั้ง
เรียกใช้ TgWitness ในรูปแบบบริการบน Windows, Linux, macOS หรือ Docker ผ่าน HTTPS พร้อมด้วยระบบสำรองข้อมูลและการอัปเดต
ภาษาอังกฤษ · Русский · ภาษายูเครน · Español · Português (Brasil) · ภาษาตุรกี · العربية · فارسی · اردو · हिन्दी · ภาษาอินโดนีเซีย · Tiếng Việt · ภาษาจีนตัวย่อ
เลือกวิธีการติดตั้ง#
สำหรับแพ็กเกจแบบพกพา ให้สกัดไฟล์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 — ดู การปรับใช้ระดับความมั่นใจสูง
เมื่อเริ่มต้นระบบจะสร้าง.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 เพื่อทราบขอบเขตที่แน่นอน
คอมพิวเตอร์ท้องถิ่น#
ใช้ 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 (แบบเลือกใช้) ทำงานเป็นพยานอิสระใน
คอนเทนเนอร์ของตัวเอง พร้อมด้วยกุญแจและบันทึกของตัวเองในโวลุ่ม 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 เท่านั้น
ติดตั้งภาพระบบที่เผยแพร่แล้ว#
ข้อมูลนี้จะพร้อมใช้งานหลังจากกระบวนการปล่อย เวอร์ชันสำเร็จและการกำหนดค่าแพ็กเกจ 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#
กระบวนการปล่อยเวอร์ชันจะพร้อมใช้งานทันทีหลังจาก โครงการนี้ถูกส่งไปยัง repositori GitHub ที่เปิดใช้งาน Actions แล้ว ระบบจะทำงานเมื่อ GitHub Release ถูกเผยแพร่ รวมถึงเวอร์ชันก่อนปล่อย (prerelease) การส่งร่าง (drafts) และการส่งแท็ก (tag pushes) เพียงอย่างเดียวจะไม่เผยแพร่แพ็กเกจ
- กำหนดเวอร์ชันแพ็กเกจและบันทึกการเปลี่ยนแปลง (changelog) แล้วเผยแพร่เวอร์ชันที่ติดแท็กด้วย
vพร้อมทั้งเวอร์ชันpyproject.tomlที่ถูกต้อง เช่นv0.7.0. - กระบวนการทำงานนี้จะตรวจสอบความถูกต้องของแท็กและดำเนินการตรวจสอบ Python ที่ใช้ร่วมกันบน Windows/Linux/macOS, general/account-import/QR browser, source-package และ Docker การติดตั้งแบบเนทีฟใหม่ยัง ได้รับการทดสอบบนระบบปฏิบัติการทั้งสามโดยใช้ Python 3.12
- เมื่อการตรวจสอบดังกล่าวผ่านแล้ว ระบบจะทำการทดสอบเบื้องต้น (smoke test) ภาพระบบ ARM64 บน QEMU, เผยแพร่
ภาพระบบ AMD64/ARM64 ไปยัง
ghcr.io/<lowercase-owner>/<lowercase-repository>:<version>, และแนบไฟล์ ZIP แหล่งที่มา, ค่า checksum และไฟล์ Python wheel ไปยังการปล่อยเวอร์ชัน ส่วนงานแยกต่างหาก บน Windows จะทำการสร้างและแนบไฟล์ ZIP แบบพกพาพร้อมค่า checksum ของมัน - หลังการเผยแพร่ครั้งแรก ให้เปิดการตั้งค่าแพ็กเกจ 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/. โปรดตรวจสอบ/ปรับเปลี่ยนเส้นทางของพวกมันก่อนการติดตั้ง พวกมันเป็นแม่แบบที่จัดเตรียมไว้ ไม่ใช่คุณสมบัติของแพลตฟอร์มที่ทำงานในเครื่องท้องถิ่น ไม่มี บริการพื้นหลังหรืองานใดที่ถูกลงทะเบียนโดยตัวเปิดใช้งานปกติ
บน 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 ที่สมบูรณ์ พื้นที่ทำงานใช้กระบวนการร่วมกัน; บัญชีที่มีกิจกรรมรบกวนอาจ ยังคงส่งผลกระทบต่อบัญชีอื่นได้ กระบวนการทำงานแยกกัน การเก็บรักษา/หมุนเวียนข้อมูล การกู้คืนการอัปเดต ที่ทนทาน และการรับรองการปรับใช้อย่างเต็มรูปแบบยังคงมีอยู่ การเข้าถึงแผงควบคุมที่จำกัดขอบเขตถูกบันทึก ไว้ในส่วนการเข้าถึงและสิทธิ์; จุดตรวจสอบอิสระถูกครอบคลุมในคู่มือ ผู้เป็นพยาน
ตัวเลือกการเชื่อมต่อและการป้องกัน#
เส้นทางเชื่อมต่อถูกกำหนดตามพื้นที่ทำงาน (workspace) และควรตั้งค่าก่อนการอนุญาต SOCKS5/HTTP CONNECT ใช้ไลบรารี python-socks ที่ถูกกำหนดไว้ MTProxy ใช้ การขนส่งขั้นกลางแบบสุ่มทดลองของ Telethon; ไม่สนับสนุน Fake TLS ee secrets การเปลี่ยนไปใช้เส้นทางสำรองโดยตรงขึ้นอยู่กับโหมด IP ที่เลือก: โหมด Hide IP ไม่อนุญาต; โหมด fallback แบบชัดเจนอนุญาตหลังจากรอระยะเวลาหนึ่ง โหมด Tunnel/VPN อนุญาตเส้นทางโดยตรงแต่ไม่สร้าง VPN นี่ไม่ใช่กฎนโยบายเครือข่ายระดับระบบ
สำหรับการติดตั้งใหม่ TGWITNESS_VAULT_KEY_FILE จะชี้ไปยังไฟล์กุญแจหลักแบบสุ่ม ที่ได้รับการป้องกันแยกต่างหาก ให้ติดตั้งไฟล์นี้ในโหมดอ่านอย่างเดียว (read-only) นอกโฟลเดอร์ /data ในคอนเทนเนอร์ รักษาข้อมูลเมตาดาต้า salt ของไฟล์ vault.external.json แบบสาธารณะให้คงอยู่ โดยแยกเก็บไว้กับแต่ละพื้นที่ทำงาน (workspace) และกุญแจหลักอย่างแยกกัน Vault ท้องถิ่นที่มีอยู่จำเป็นต้องมีการย้ายข้อมูลตามแผน; การตั้งค่าตัวแปรนี้จะไม่ แปลงข้อมูลเหล่านั้นโดยอัตโนมัติ การจัดเก็บและส่งออกข้อความ/สื่อไม่ได้รับการเข้ารหัสโดยแอปพลิเคชัน ใช้โวลุ่มที่เข้ารหัสและพื้นที่จัดเก็บชั่วคราวส่วนตัวที่เพียงพอเมื่อจำเป็น
ขั้นตอนรายละเอียด: การเชื่อมต่อ/ความปลอดภัย และ โหมดการทำงาน