TgWitness / دستاویزات

حوالہ / سیٹ اپ

نفاذ

TgWitness کو Windows، Linux، macOS یا Docker پر ایک سروس کے طور پر HTTPS کے پیچھے، بیک اپ اور اپ ڈیٹس کے ساتھ چلائیں۔

انگریزی · روسی · یوکرینی · اسپینش · پرتگالی (برازیل) · ترکی · عربی · فارسی · اردو · ہندی · انڈونیشیائی زبان · ویتنام زبان · سادہ چینی

انسٹالیشن منتخب کریں#

پورٹیبل پیکیج کے لیے، GitHub Releases سے TgWitness-<version>-windows-amd64-portable.zip نکالیں۔ دوسرے طریقوں کے لیے، ماخذ ZIP ڈاؤن لوڈ اور نکالیں یا ریپوزیٹری کلون کریں، پھر پروجیکٹ ڈائریکٹری سے مندرجہ ذیل کمانڈ چلائیں:

تنصیب شروع کریں کیا یہ پس منظر میں چلتا ہے؟
ونڈوز پورٹیبل پیکیج TgWitness.cmd نہیں؛ ونڈو کھلی رکھیں۔
اصلی ونڈوز Start.cmd نہیں؛ پس منظر میں استعمال کے لیے اختیاری لاگ آن ٹاسک استعمال کریں۔
مقامی لینکس/میک او ایس sh start.sh نہیں؛ پسِ منظر میں استعمال کے لیے systemd/launchd استعمال کریں۔
کسی بھی سپورٹڈ ہوسٹ پر ڈوکر docker compose up -d --build --wait جی ہاں، جب Docker ڈیمن چل رہا ہو۔
ونڈوز پر ڈاکر ہیلپر scripts\Docker.cmd جی ہاں؛ مددگار ویب سرور کی صحت کا انتظار کرتا ہے۔
Linux/macOS پر ڈاکر ہیلپر sh scripts/docker-start.sh جی ہاں؛ مددگار ویب سرور کی صحت کا انتظار کرتا ہے۔

ایک کلاؤڈ سرور کے لیے جسے تیسری پارٹی چیک کر سکے — فراہم کنندہ کے API کے ذریعے تخلیق شدہ، SSH کے بغیر، صرف Cloudflare Tunnel کے ذریعے قابلِ رسائی — اعلیٰ یقین دہانی والی تعیناتی دیکھیں۔

نیٹیو اسٹارٹ اپ ایک نجی .venv بناتا ہے اور پن کی گئی ڈیپنڈنسیز انسٹال کرتا ہے۔ ڈوکر انہیں ہوسٹ پائتھن کی ضرورت کے بغیر امیج کے اندر بناتا ہے۔ پہلی بار سیٹ اپ کے لیے انٹرنیٹ کنکشن درکار ہے۔ جب کوئی Python 3.11+ نہیں ملتا، تو Start.cmd موجودہ ونڈوز صارف کے لیے Python 3.12 انسٹال کرنے سے پہلے پوچھتا ہے (winget، ورنہ python.org انسٹالر اس کے Python Software Foundation سگنیچر کی جانچ کرنے کے بعد)؛ یہ کبھی بھی ایڈمنسٹریٹر کی اجازت نہیں مانگتا۔ Docker اور OS سروسز پہلے سے ضروری رہتی ہیں۔

نیٹیو اور پورٹیبل انسٹالیشنز اپنے فولڈر کے اندر data/live استعمال کرتی ہیں۔ ڈاکر tgwitness-data نامی والیوم کو /data پر استعمال کرتا ہے۔ یہ الگ الگ انسٹالیشنز ہیں جب تک کہ آپ جان بوجھ کر مکمل ڈیٹا ڈائریکٹری کو منتقل نہ کریں۔ ایک نئے ڈاکر کنٹینر سے توقع نہ کریں کہ وہ نیٹیو اکاؤنٹس کو خودکار طور پر دریافت کر لے گا۔

تنصیب کی ضروریات#

مقامی تنصیب کے لیے Python 3.11 یا اس کے بعد کا ورژن، venv اور ensurepip درکار ہیں، پہلی ڈیپنڈنسی کی تنصیب کے لیے انٹرنیٹ کنکشن، اور .venv کے لیے لکھنے کے قابل پروجیکٹ ڈائریکٹری۔ بنڈل شدہ پینل کے لیے Node.js یا فرنٹ اینڈ بلڈ کی ضرورت نہیں ہے۔ لانچر کو اپنے معمول کے OS اکاؤنٹ سے چلائیں؛ TgWitness کو ایڈمنسٹریٹر/روٹ حقوق کی ضرورت نہیں ہے۔

  • ونڈوز: Start.cmd پہلے py -3 چیک کرتا ہے، پھر python، اور بعد ازاں ڈیفالٹ پر-یوزر اور پروگرام فائلز انسٹال فولڈرز، اور اسے ورژن 3.11 یا اس کے بعد کی ضرورت ہے۔ اگر ان میں سے کوئی کام نہ کرے تو یہ اوپر بیان کردہ خودکار پر-یوزر انسٹالیشن پیش کرتا ہے۔ py -3 start.py بھی کام کرتا ہے۔ پورٹیبل پیکج کو بالکل بھی پائتھن کی ضرورت نہیں۔
  • Linux: start.sh python3.13, python3.12, python3.11, python3 اور python کو آزمائیں، اور جب کوئی موزوں نہ ہو تو apt، dnf، pacman، zypper، apk یا Homebrew کے لیے انسٹال کمانڈ پرنٹ کریں۔ Debian/Ubuntu تنصیبات کے لیے منتخب کردہ انٹرپریٹر سے مطابقت رکھنے والا python3-venv پیکیج درکار ہو سکتا ہے۔ ڈسٹری بیوشن کے پرانے ڈیفالٹ پائتھن کو پائتھن 3.11+ سے تبدیل یا اس کے ساتھ ضمیمہ کرنا ضروری ہے۔
  • macOS: موجودہ Python 3.11+ کی تقسیم انسٹال کریں؛ یہ فرض نہ کریں کہ OS فراہم کردہ انٹرپریٹر اس شرط کو پورا کرتا ہے۔ پروجیکٹ ڈائریکٹری سے python3 start.py استعمال کریں۔
  • Docker: Compose v2.20 یا اس سے نئے کے ساتھ Docker Engine/Desktop استعمال کریں۔ Docker Desktop کو Windows پر Linux کنٹینرز استعمال کرنا ضروری ہے۔ کنٹینر اپنی Python ڈیپنڈنسیز انسٹال کرتا ہے؛ ہوسٹ کو الگ Python انسٹالیشن کی ضرورت نہیں۔

ڈیٹا ڈائریکٹری کے لیے مستقل مقامی اسٹوریج استعمال کریں۔ پیغامات، میڈیا، WAL کی ترقی، ایکسپورٹس اور بیک اپ کی بنیاد پر گنجائش کا منصوبہ بنائیں؛ ہر ورک لوڈ کے لیے ثبوت پر مبنی کوئی یونیورسل کم از کم ڈسک/RAM کی وضاحت موجود نہیں ہے۔ CPU آرکیٹیکچرز اور Python ورژنز جن کے پاس مطابقت پذیر ڈیپینڈنسی وہیلز نہیں ہیں، انہیں اضافی بلڈ ٹولز اور اپنی مخصوص اہلیت کی ضرورت پڑ سکتی ہے۔ "پورٹیبل" کا مطلب یہ دعویٰ نہیں ہے کہ یہ ہر قسم کے آپریٹنگ سسٹم یا ہارڈویئر پر چلتا ہے۔

Windows 11/Python 3.12 مقامی طور پر تصدیق شدہ ہیں۔ Linux/macOS/کنٹینر کی تعریفیں اور CI فراہم کیے گئے ہیں لیکن اس ڈیولپمنٹ ہوسٹ پر چلائے نہیں گئے ہیں۔ درست دائرہ کار کے لیے VERIFICATION.md دیکھیں۔

مقامی کمپیوٹر#

Start.cmd استعمال کریں ونڈوز پر یا sh start.sh لینکس/macOS پر۔ scripts\Setup.cmd یا sh start.sh --setup-only ماحول تیار کرتا ہے۔ لانچر پہلی بار استعمال پر انحصارات انسٹال کرتا ہے؛ بعد کے لانچ ماحول کو دوبارہ استعمال کرتے ہیں۔ سیٹ اپ اور ٹیلیگرام کلیکشن کے لیے انٹرنیٹ کنکشن ضروری ہے، لیکن موجودہ ریکارڈز براؤز کرنا اور ایکسپورٹس بنانا آف لائن کام کرتا ہے۔

سیٹ اپ کے بعد python start.py --check چلائیں تاکہ مقامی انحصار، Ed25519، اسٹوریج، کلید کی تشکیلات اور سننے کے پتے کا معائنہ کیا جا سکے، بغیر کسی کلیکٹر کو شروع کیے۔ ساختہ آؤٹ پٹ کے لیے --json استعمال کریں۔ مطلوبہ --data-dir، --host اور --port پاس کریں۔ یہ چیک پیکیجز انسٹال نہیں کرتا، جرنل نہیں بناتا یا ٹیلیگرام سے کنیکٹ نہیں کرتا؛ یہ سالمیت یا کوریج کی اہلیت نہیں ہے۔ اسٹارٹ اپ علیحدہ طور پر موجودہ جرنلز کی تصدیق کرتا ہے۔ python start.py --help بھی انسٹالیشن سے گریز کرتا ہے۔

اختیارات:

start.py استعمال کرنے کے بعد، Windows پر .venv\Scripts\python.exe یا Linux/macOS پر .venv/bin/python کے ساتھ ضمنی کمانڈز چلائیں، یا پہلے اس ماحول کو فعال کریں۔ نیچے دیے گئے 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 حروف ہونے چاہئیں؛ ایک کرپٹوگرافک طور پر بے ترتیب (random) قدر استعمال کریں۔ اس کے بغیر، ایپ panel-token.txt میں ایک 256-بٹ بے ترتیب ٹوکن بناتی ہے۔ ماحول کی اووررائیڈ اس فائل کو دوبارہ نہیں لکھتی۔ کریڈنشلز کو تبدیل کرنے کے لیے دوبارہ شروع کریں۔

بالکل ایک ہی عمل ڈیٹا ڈائریکٹری کا مالک ہو سکتا ہے۔ ایک کراس پلیٹ فارم آپریٹنگ سسٹم فائل لاک غیر ارادی متوازی لکھنے والوں کو روکتا ہے۔ ایک Uvicorn ورکر استعمال کریں۔ پینل کسی بھی تعداد میں ورک اسپیسز کا انتظام کر سکتا ہے، اضافی ورک اسپیس ڈائریکٹریز profiles/<id>/ کے تحت۔ الگ سروس انسٹنسز کے لیے، الگ ڈائریکٹریاں اور پورٹس استعمال کریں۔ SQLite WAL فائلیں مقامی مستقل اسٹوریج پر ہونی چاہئیں، نیٹ ورک فائل سسٹم پر نہیں۔ ایک والیوم کو ریپلیکا کے درمیان شیئر نہ کریں۔

ونڈوز پورٹیبل پیکیج#

ہر GitHub ریلیز میں TgWitness-<version>-windows-amd64-portable.zip اور اس کا .sha256 شامل ہوتا ہے۔ اس میں python.org کا سرکاری ایمبیڈ ایبل Python 3.12 رن ٹائم (چیک سم 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 کو منتقل کر دیں۔

Python 3.12 کے ساتھ 64-بٹ ونڈوز پر خود بنائیں:

python tools/build_portable.py

بلڈر رن ٹائم چیک سم کی تصدیق کرتا ہے، محدود انحصاروں کو پیکیج میں انسٹال کرتا ہے، ضم شدہ انٹرپریٹر کے ساتھ تیاری کی جانچ چلاتا ہے اور ZIP اور چیک سم کو dist/ پر لکھتا ہے۔

کنٹینر#

docker compose up -d --build --wait

یہ /data کے لیے ایک نامزد مستقل والیوم بناتا ہے۔ ویب پورٹ کو 127.0.0.1:8787 پر میپ کیا گیا ہے۔ یہ عمل UID 10001 کے طور پر چلتا ہے، جس کی صلاحیتیں محدود ہیں، ایک صرف-پڑھنے والا روٹ فائل سسٹم، اور لکھنے کے قابل /data اور /tmp کے ساتھ۔ --wait واپس کرنے سے پہلے ویب سرور کی صحت چیک کرتا ہے؛ یہ ٹیلیگرام کی اجازت یا ترسیل قائم نہیں کرتا۔ فراہم کردہ ہیلپرز بلڈنگ کے بعد 180 سیکنڈ کا تیاری کا ٹائم آؤٹ استعمال کرتے ہیں۔ ابتدائی انحصار کی ڈاؤن لوڈنگ اس سے زیادہ وقت لے سکتی ہے۔

دونوں بیس کمپوز فائلیں پروجیکٹ کا نام 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 ڈیمون کے دوبارہ شروع ہونے کے بعد کلیکٹر کو دوبارہ شروع کرتا ہے۔ لینکس سرور پر، اپنے ڈسٹری بیوشن کے سروس مینیجر (عام طور پر sudo systemctl enable --now docker) کا استعمال کرتے ہوئے بوٹ پر Docker کو فعال کریں۔ Windows/macOS پر، Docker Desktop کی 'start-at-sign-in' سیٹنگ کو فعال کریں۔ ڈیسک ٹاپ کے سائن آؤٹ، سلیپ، یا ایک روکے ہوئے Docker daemon کلیکشن کو روک سکتا ہے۔ ایک واضح طور پر روکا گیا کنٹینر اسی حالت میں رہتا ہے جب تک آپ اسے دوبارہ شروع نہ کریں۔

مثال کے کنفیگریشن میں /tmp والیوم کو 512 MiB تک محدود کیا گیا ہے۔ ایکسپورٹ کنسٹرکشن اس کے بجائے ہر ورک اسپیس کے مستقل /data پر موجود temporary-exports/ کا استعمال کرتی ہے۔ ایک ساتھ ایکسپورٹس، جرنل/WAL کی ترقی، میڈیا اور بیک اپ کے لیے وہاں جگہ محفوظ کریں۔ لانچر اہل رن ٹائم ڈیپنڈنسی ورژنز کو پن کرنے کے لیے deploy/constraints.txt استعمال کرتا ہے۔ Docker اور ہائی-ایشورنس سرورز deploy/requirements.lock اور deploy/build.lock سے pip --require-hashes کے ساتھ انسٹال ہوتے ہیں: ہر پیکج فائل کو کمٹ میں ریکارڈ شدہ SHA-256 سے میل کھانا چاہیے، اس لیے PyPI یا کسی آئینے (mirror) پر تبدیل کی گئی فائل کو مسترد کر دیا جاتا ہے۔ پائتھن بیس امیج اور آپریٹنگ سسٹم پیکجز کو اب بھی آزادانہ ریلیز کی اہلیت کی ضرورت ہوتی ہے۔

جب تک آپ جرنل اور کیز کو تباہ کرنے کا ارادہ نہ رکھتے ہوں، docker compose down -v استعمال نہ کریں۔ کنٹینر ہیلتھ رپورٹس ویب سرور کی دستیابی، نہ کہ کامیاب ٹیلیگرام کیپچر۔ پینل کے کلیکٹر کی حالت، ہارٹ بیٹ، غلطیاں، اور کورِیج ایونٹس کا معائنہ کریں۔

آزاد شاہد کا پروفائل#

اختیاری witness سروس ایک آزاد گواہ کو اپنے کنٹینر میں چلاتی ہے، جس کے پاس اپنا الگ کلید اور جرنل ہوتا ہے witness-data والیوم میں، اور کلیکٹر کے لیے صرف ریڈ-اوْنلی گواہ ٹوکن ہوتا ہے۔ ٹوکن کو پینل کے Witness صفحے پر بنائیں، اسے ایک bot ٹوکن اور چینل کے ساتھ .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 ایڈریس پر سیٹ کریں؛ اس فائل میں صرف ویٹنس شامل ہوتی ہے۔

شائع شدہ تصویر انسٹال کریں#

یہ ایک کامیاب ریلیز ورک فلو اور عوامی 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

ہوسٹ پر کسی سورس بلڈ، پائتھن، یا کمپائلر کی ضرورت نہیں ہے۔ ریلیز ورک فلو لینکس AMD64 اور ARM64 کنٹینرز کو ہدف بناتا ہے، بشمول ڈاکر ڈیسک ٹاپ کے لینکس VM۔ ورک فلو کے خلاصے سے ورژن ٹیگ یا ghcr.io/owner/repository@sha256:... استعمال کریں۔ کوئی latest ٹیگ کی منتقلی یا بغیر نگرانی کے ایپلیکیشن اپ گریڈ ترتیب نہیں دیا گیا ہے۔ جب ان کے پروجیکٹ کے نام مماثل ہوں تو امیج اور ماخذ کے ورژن ایک ہی ڈیٹا والیوم استعمال کرتے ہیں۔

سرور پر خودکار HTTPS#

ایک سرور استعمال کریں جس میں ڈوکر، ایک ایسا ڈومین جو آپ کے کنٹرول میں ہو، اور مستقل مقامی اسٹوریج ہو۔ ڈومین کے 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 آرگومنٹس کو بعد میں اسٹیٹس، لاگز، اپ ڈیٹ، اور اسٹاپ کمانڈز کے لیے برقرار رکھیں۔

کیڈی سرٹیفیکیٹ حاصل کرتا اور اسے تجدید کرتا ہے، HTTP کو HTTPS پر ری ڈائریکٹ کرتا ہے، اور نجی Compose نیٹ ورک پر کلیکٹر کو درخواستیں فارورڈ کرتا ہے۔ سرٹیفیکیٹ کی حالت کا اپنا مستقل والیوم ہوتا ہے۔ کلیکٹر کا براہ راست ہوسٹ پورٹ صرف لوپ بیک کے لیے ہی رہتا ہے۔ فراہم کردہ کیڈی کنفیگریشن میں ایکسس لاگنگ فعال نہیں ہوتی۔

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' ٹیگ کی پیروی کرتی ہے۔ پُل کرنے سے وہ امیج ریفریش ہو جاتی ہے؛ اگر آپ کو فکسڈ انفراسٹرکچر ورژنز کی ضرورت ہو تو اپنی ڈیپلائمنٹ میں ایک ٹیسٹ شدہ ڈائجسٹ پن کریں۔

اپ ڈیٹس اور بیک اپس#

اپ ڈیٹس کے دوران Compose پروجیکٹ کا نام اور ڈیٹا والیوم محفوظ رکھیں۔ سب سے پہلے کلیکٹر کو روکیں اور مکمل بیک اپ بنائیں۔ ڈیفالٹ سورس پر مبنی تعیناتی کے لیے:

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

ہر بار ایک نئی بیک اپ منزل استعمال کریں، جو ریپوزیٹری کے باہر ہو، اور اسے اکاؤنٹ تک رسائی کے قابل مواد کے طور پر محفوظ رکھیں۔ مثال کے راستے کا ذکر صرف وضاحت کے لیے ہے؛ اپنی نجی بیک اپ جگہ استعمال کریں۔ پوری ڈائریکٹری کاپی کریں، بشمول پوشیدہ فائلیں، تمام ورک اسپیسز، کیز، جرنلز، اور میڈیا۔ اگر ترتیب دیا گیا ہو تو بیرونی والٹ ماسٹر کی (vault master key) کا الگ سے بیک اپ لیں۔ ایک ثبوت 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

پچھلی stop/copy کمانڈز کے لیے اپنی تنصیب کی Compose فائل(یں) بھی استعمال کریں۔ .env، کسٹم کنفیگریشن، اور اسی پروجیکٹ کے نام کو برقرار رکھیں۔ down نامزد والیومز کو برقرار رکھتا ہے؛ down -v انہیں حذف کر دیتا ہے۔ .venv کو آپریٹنگ سسٹمز یا پائتھن ورژنز کے درمیان کاپی نہ کریں۔ نیٹیو اپ ڈیٹس کے لیے، TgWitness کو روک دیں، اس کی مکمل ڈیٹا ڈائریکٹری کا بیک اپ بنائیں، ماخذ فائلوں کو تبدیل کریں، اور لانچ کرنے سے پہلے python start.py --setup-only چلائیں۔

اپ ڈیٹ کے بعد پینل تک رسائی، اکاؤنٹ کی شناخت، مشاہداتی حالت اور کوریج چیک کریں۔ دوبارہ شروع کرنے سے رہ جانے والی ٹیلیگرام اپ ڈیٹس بحال نہیں ہوتیں۔ اگر مستقبل کا کوئی ورژن اسٹوریج فارمیٹس تبدیل کر دے تو رول بیک کے لیے اپ ڈیٹ سے پہلے کا بیک اپ درکار ہو سکتا ہے۔

خودکار گٹ ہب ریلیزز#

ریلیز کا ورک فلو اس پروجیکٹ کو ایک GitHub ریپوزیٹری میں Actions فعال کر کے پش کرنے کے بعد استعمال کے لیے تیار ہوتا ہے۔ یہ اس وقت چلتا ہے جب ایک GitHub ریلیز شائع ہوتی ہے، بشمول پری ریلیز۔ صرف ڈرافٹس اور ٹیگ پشز پیکجز شائع نہیں کرتے۔

  1. پیکج کا ورژن اور تبدیلیوں کا لاگ سیٹ کریں، پھر v کے ٹیگ کے ساتھ ایک ریلیز شائع کریں اس کے علاوہ بالکل درست pyproject.toml ورژن، جیسے v0.7.0۔
  2. ورک فلو ٹیگ کی توثیق کرتا ہے اور مشترکہ Windows/Linux/macOS Python، general/account-import/QR browser، source-package، اور Docker چیکس چلاتا ہے۔ تازہ نیٹیو انسٹالیشن بھی Python 3.12 استعمال کرتے ہوئے تینوں آپریٹنگ سسٹمز پر آزمائی جاتی ہے۔
  3. ان چیکس کے پاس ہونے کے بعد، یہ QEMU کے تحت ARM64 امیج کا اسموک ٹیسٹ کرتا ہے، AMD64/ARM64 امیجز کو ghcr.io/<lowercase-owner>/<lowercase-repository>:<version> پر شائع کرتا ہے، اور ریلیز کے ساتھ سورس ZIP، چیک سم، اور Python wheel منسلک کرتا ہے۔ ایک الگ Windows جاب پورٹیبل ZIP اور اس کا چیک سم تیار کر کے منسلک کرتا ہے۔
  4. پہلی اشاعت کے بعد، GHCR پیکیج کی ترتیبات کھولیں اور اگر گمنام تصویر کی بازیابی مقصود ہو تو ویزبلٹی کو Public پر سیٹ کریں۔ صرف ایک عوامی ماخذ ریپوزیٹری سے عوامی کنٹینر پیکیج کی ضمانت نہیں ملتی۔ تنظیم کی پالیسیاں پیکیج کی اشاعت کی اجازت ہونی چاہئیں۔ ورک فلو میں GITHUB_TOKEN استعمال ہوتا ہے؛ ریپوزیٹری میں کوئی رجسٹری پاس ورڈ یا VPS کی اسناد شامل نہیں کی جانی چاہئیں۔

اس مقامی تیاری سے دور دراز ورک فلو کی کامیابی ثابت نہیں ہوئی۔ ARM64 ایمولیشن صرف ایک ابتدائی جانچ ہے، نہ کہ اصل ہارڈویئر یا لائیو ٹیلیگرام کے لیے اہلیت۔ یہ ریلیز پیکجنگ کو خودکار کرتا ہے؛ سرور شروع کرنے کے لیے ابھی بھی Compose کمانڈ اور اس کے ڈومین/ہوسٹ کی ضروریات درکار ہیں۔ جب کوئی ریلیز شائع ہوتی ہے تو موجودہ سرورز خاموشی سے اپ گریڈ یا ری اسٹارٹ نہیں کیے جاتے۔

دور دراز سرور#

سروس کو لوپ بیک پر محدود رکھیں اور SSH ٹنل استعمال کریں، یا HTTPS کو ریورس پراکسی پر ختم کریں۔ بنیادی Compose فائل صرف مقامی ہے؛ اختیاری deploy/compose/compose.https.yaml اوورلے ایک ترتیب شدہ ڈومین کے لیے Caddy فراہم کرتا ہے۔ بیئرر ٹوکن کو URLs اور پروکسی لاگز سے دور رکھیں۔ ایک ریورس پروکسی کو درخواست کے سائز اور کنکشن کی شرحوں کو محدود کرنا چاہیے۔ سادہ HTTP کو انٹرنیٹ پر ظاہر نہ کریں۔

systemd، ایک Windows logon ٹاسک، ایک macOS یوزر ایجنٹ اور Caddy کے لیے مثالیں deploy/ میں فراہم کی گئی ہیں۔ انسٹالیشن سے پہلے ان کے راستوں کا جائزہ لیں/انہیں ڈھالیں۔ یہ فراہم کردہ ٹیمپلیٹس ہیں، نہ کہ مقامی طور پر چلائی جانے والی پلیٹ فارم کی اہلیت۔ عام لانچر کے ذریعے کوئی بیک گراؤنڈ سروس یا ٹاسک رجسٹر نہیں ہوتا۔

ونڈوز پر، ایک بغیر ونڈو کے pythonw.exe لانچ، اسٹارٹ اپ/سرور کی تشخیص کو logs/server.log میں ڈیٹا ڈائریکٹری کے تحت محفوظ کرتا ہے (فی فائل 5 MiB، دو روٹیٹڈ بیک اپ)۔ کنسول لانچز کنسول لاگنگ کو برقرار رکھتی ہیں۔ HTTP ایکسس لاگنگ دونوں موڈز میں غیر فعال ہے۔ لاگز کو ڈیٹا ڈائریکٹری کے ساتھ محفوظ کریں اور شیئر کرنے سے پہلے ان کا جائزہ لیں۔

دوبارہ شروع اور وقفے#

آخری درخواست کردہ مشاہداتی حالت برقرار رکھی جاتی ہے۔ اگر مشاہدہ فعال تھا، تو آغاز میں منتخب ذرائع سے دوبارہ کنکشن قائم کرنے اور انہیں دوبارہ شروع کرنے کی کوشش کی جاتی ہے۔ دستی طور پر وقفہ دینے سے یہ ارادہ ختم ہو جاتا ہے۔ ناکام دوبارہ آغاز ریکارڈ کیا جاتا ہے اور پینل میں دکھایا جاتا ہے۔

StringSession اجازت برقرار رکھتا ہے لیکن Telethon کی پائیدار اپ ڈیٹ/انٹٹی کی حالت نہیں۔ ڈائیلاگز شروع ہونے پر دوبارہ لوڈ کیے جاتے ہیں۔ Telegram/Telethon چلتے ہوئے کچھ ٹرانسپورٹ رکاوٹوں سے بحال ہو سکتے ہیں، لیکن TgWitness پراسیس ری اسٹارٹس کے دوران پائیدار ری پلے کا دعویٰ نہیں کرتا۔ ہر آغاز پر پچھلا جرنل ہیڈ اور آف لائن حد ریکارڈ کی جاتی ہے۔ مانیٹر ہر 10 سیکنڈ بعد کنیکٹیویٹی چیک کرتا ہے اور ہر منٹ میں ایک ہارٹ بیٹ شامل کرتا ہے (پیرامیٹرز → لِو نیس ریکارڈ ہر)۔ مختصر وقفے رہ سکتے ہیں؛ ایک منسلک ٹرانسپورٹ مکمل اپ ڈیٹ کی ترسیل کی ضمانت نہیں دیتا۔ سنیپ شاٹس واضح موجودہ-تاریخ کے مشاہدات ہیں، کبھی بھی خلا کی مرمت نہیں۔

میڈیا قطار ہر ورک اسپیس کے SQLite ڈیٹا بیس میں محفوظ ہوتی ہے۔ ایک پیغام اور اس کا کام ایٹمی طور پر محفوظ کیے جاتے ہیں۔ منقطع شدہ چلنے والے کام دوبارہ شروع کرنے پر دوبارہ کوشش کے لیے بحال کیے جاتے ہیں۔ ہر ڈاؤن لوڈ میں 120 سیکنڈ کا بنیادی ٹائم آؤٹ ہوتا ہے، اس کے علاوہ اس کے سائز کے لیے 256 KiB/s کی رفتار سے وقت بھی شامل ہوتا ہے، اور ہر اٹیچمنٹ کی قسم کے لیے 1–2,000 MiB کی حد ہوتی ہے۔ ٹائم آؤٹ، رفتار اور دوبارہ کوششیں پیرامیٹرز کے تحت آتی ہیں۔ کلیکٹر ان فائلوں کو چھوڑ دیتا ہے جن کا سائز معلوم نہ ہو۔ وقفہ کرنے سے قطار میں موجود کام برقرار رہتا ہے۔ دوبارہ کوشش اصل مشاہدہ شدہ فائل ڈسکرپٹر استعمال کرتی ہے، نہ کہ بعد میں ترمیم شدہ پیغام کے تازہ ترین ورژن کو۔ عارضی ناکامیوں کے لیے محدود دوبارہ کوششیں ہوتی ہیں؛ میڈیا فلڈ ویٹ پاؤزز ری اسٹارٹ سے محفوظ رہتی ہیں۔ میڈیا کی بحالی ٹیلیگرام اپ ڈیٹ کی بحالی سے الگ ہے اور غائب شدہ فائلوں کو دوبارہ پیدا نہیں کر سکتی۔

بیک اپ، بحالی، اور گنجائش#

پورے ڈیٹا ڈائریکٹری کی کاپی کرنے سے پہلے عمل کو روک دیں، جس میں vault.key، signing.enc، credentials.enc، SQLite ڈیٹا بیس/WAL فائلیں، میڈیا، ٹوکن، چیک پوائنٹس، اور تمام پروفائلز/سب ڈائریکٹریاں شامل ہیں۔ جب منزل کی سروس بند ہو تو مکمل کاپی کو بحال کریں۔ گمشدہ والٹ کیز یا سائننگ-کی کے عدم مطابقت کی وجہ سے آغاز ناکام ہو جاتا ہے؛ زبردستی رسائی کے لیے کیز دوبارہ پیدا نہ کریں۔

خفیہ بیک اپ کو انکرپٹڈ اور رسائی کے کنٹرول کے ساتھ محفوظ رکھیں۔ ثبوت کے زپ قابلِ حمل ہوتے ہیں، یہ ایپلیکیشن بیک اپ یا ٹیلیگرام سیشن بیک اپ نہیں ہیں۔ خودکار طور پر برقرار رکھنے یا حذف کرنے کی کوئی سہولت نہیں ہے۔ تمام پیغامات، خام میٹا ڈیٹا، میڈیا، عارضی ایکسپورٹس، اور بیک اپ کے لیے ڈسک اسپیس کی منصوبہ بندی کریں۔

پورے جرنل کو لوڈ کرنے کے بجائے اسٹارٹ اپ تصدیق اور ایکسپورٹ سٹریم ریکارڈز۔ ایک ایکسپورٹ ریڈ سنپ شاٹ کو پن کرتا ہے جبکہ نئے WAL رائٹس جاری رہ سکتے ہیں؛ طویل چلنے والے ایکسپورٹس WAL صفحات کو برقرار رکھ سکتے ہیں، لہٰذا ڈسک کی گنجائش اب بھی اہم ہے۔ ZIPs 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

کسی دوسرے ورک اسپیس کے لیے Exports → Workspace ID سے --profile ID استعمال کریں، ریموٹ سرور کے لیے --format zip|jsonl|csv|html، --url https://your-server، یا 5 GiB ٹرانسفر کی حد تبدیل کرنے کے لیے --max-mib استعمال کریں۔ سادہ HTTP صرف لوپ بیک کے لیے اجازت ہے۔ ٹوکن ہیڈرز میں سفر کرتے ہیں، ری ڈائریکٹس مسترد کر دیے جاتے ہیں، موجودہ فائلیں اوور رائٹ نہیں ہوتیں، اور نامکمل ڈاؤن لوڈز کو مکمل فائلوں کے طور پر شائع نہیں کیا جاتا۔ اگر TGWITNESS_TOKEN بنائے گئے ٹوکن کو اووررائڈ کرتا ہے، تو ایک علیحدہ محفوظ فائل استعمال کریں جس میں وہ فعال ویلیو موجود ہو: panel-token.txt اووررائیڈ کے ذریعے دوبارہ نہیں لکھا جاتا۔ کمانڈ کا SHA-256 صرف ایک ٹرانسفر چیک سم ہے؛ دستخط شدہ ZIP کی خود سے تصدیق کریں۔

سرور ایکسپورٹ فائلیں ہر ورک اسپیس کے نجی temporary-exports/ میں رہتی ہیں۔ کامیاب جوابات اپنی فائلوں کو صاف کر دیتے ہیں۔ منقطع شدہ ایکسپورٹس کو اگلی ورک اسپیس کی شروعات پر ہٹا دیا جاتا ہے، جب اس کا خصوصی انسٹنس لاک برقرار ہوتا ہے۔ یہ ڈائریکٹری اسٹوریج تھریٹ/کیپیسٹی ماڈل کا حصہ ہے؛ ایک خفیہ شدہ ڈیٹا والیوم استعمال کریں۔ پروڈکشن کے پیمانے پر کثیر گیگا بائٹ ٹرانسفرز کے لیے اب بھی آپ کے ہدف سسٹم پر اہلیت کی ضرورت ہوتی ہے۔

پینل قطار میں لگی/ناکام میڈیا، سب سے پرانی زیرِ التواء میڈیا، خالی ڈسک، ٹیلیگرام کے زیرِ التواء درخواستوں، اور ان ذرائع کو دکھاتا ہے جن کی رسائی کی تصدیق نہیں ہوئی۔ یہ تشخیصی ٹولز ایک مکمل اینڈ ٹو اینڈ ڈیلیوری مانیٹر نہیں ہیں۔ ورک اسپیسز ایک ہی عمل کو شیئر کرتے ہیں؛ ایک شور کرنے والا اکاؤنٹ پھر بھی دوسروں کو متاثر کر سکتا ہے۔ الگ ورکر پراسیسز، ریٹینشن/روٹیشن، پائیدار اپ ڈیٹ ریکوری اور مکمل تعیناتی کی اہلیت برقرار رہتی ہے۔ اسکوپڈ پینل تک رسائی کا دستاویزی بیان رسائی اور اجازتوں میں موجود ہے؛ آزاد چیک پوائنٹس گواہ گائیڈ میں شامل ہیں۔

کنیکشن اور تحفظ کے اختیارات#

کنکشن کے راستے ہر ورک اسپیس کے لیے ہوتے ہیں اور انہیں اجازت سے پہلے ترتیب دیا جانا چاہیے۔ SOCKS5/HTTP CONNECT پن کیے گئے python-socks انحصار کا استعمال کرتے ہیں۔ MTProxy Telethon کے تجرباتی رینڈمائزڈ انٹرمیڈیٹ ٹرانسپورٹ کا استعمال کرتا ہے؛ Fake TLS ee سیکریٹس کی حمایت نہیں کی جاتی۔ براہِ راست فال بیک منتخب کردہ آئی پی موڈ پر منحصر ہوتا ہے: Hide IP اسے مسترد کر دیتا ہے؛ جبکہ ایکسپلیسٹ فال بیک موڈ تاخیر کے بعد اسے اجازت دیتا ہے۔ Tunnel/VPN موڈ براہِ راست راستوں کی اجازت دیتا ہے لیکن VPN نہیں بناتا۔ یہ سسٹم بھر کی نیٹ ورک پالیسی نہیں ہے۔

نئی تنصیبات کے لیے، TGWITNESS_VAULT_KEY_FILE ایک علیحدہ محفوظ شدہ بے ترتیب ماسٹر کی فائل کی طرف اشارہ کرتا ہے۔ اسے ایک کنٹینر میں /data کے باہر صرف-پڑھنے کے لیے ماؤنٹ کریں۔ ہر ورک اسپیس کے ساتھ عوامی vault.external.json سالٹ میٹا ڈیٹا کو ماسٹر کی کے ساتھ علیحدہ طور پر محفوظ رکھیں۔ موجودہ مقامی والٹس کے لیے ایک منصوبہ بند منتقلی درکار ہے؛ اس متغیر کو سیٹ کرنے سے یہ خاموشی سے تبدیل نہیں ہوتے۔ پیغام/میڈیا اسٹوریج اور ایکسپورٹس ایپلیکیشن سے محفوظ نہیں ہیں۔ جہاں ضرورت ہو، انکرپٹڈ والیومز اور کافی نجی عارضی اسٹوریج استعمال کریں۔

تفصیلی طریقہ کار: کنکشن/سیکیورٹی اور آپریٹنگ موڈز۔