TgWitness / ডকুমেন্টেশন

তথ্যসূত্র / সেটআপ

নিয়োগ

Windows, Linux, macOS বা Docker-এ HTTPS-এর আড়ালে ব্যাকআপ ও আপডেটের সাথে TgWitness-কে একটি সার্ভিস হিসেবে চালান।

ইংরেজি · রাশিয়ান · ইউক্রেনীয় · স্প্যানিশ · পর্তুগিজ (ব্রাজিল) · তুরস্কী · আরবি · ফার্সি · উর্দু · হিন্দি · ইন্দোনেশীয় ভাষা · ভিয়েতনামী ভাষা · সরলীকৃত চীনা

একটি ইনস্টলেশন নির্বাচন করুন#

পোর্টেবল প্যাকেজের জন্য, GitHub Releases থেকে TgWitness-<version>-windows-amd64-portable.zip ফাইলটি এক্সট্র্যাক্ট করুন। অন্যান্য পদ্ধতির জন্য, সোর্স ZIP ফাইলটি ডাউনলোড ও এক্সট্র্যাক্ট করুন অথবা রিপোজিটরিটি ক্লোন করুন, তারপর প্রজেক্ট ডিরেক্টরি থেকে নিম্নলিখিত কমান্ডটি চালান:

ইনস্টলেশন শুরু করুন পেছনে চলছে?
উইন্ডোজ পোর্টেবল প্যাকেজ TgWitness.cmd না; জানালা খোলা রাখো।
ন্যাটিভ উইন্ডোজ Start.cmd না; পটভূমিতে ব্যবহারের জন্য ঐচ্ছিক লগঅন টাস্ক ব্যবহার করুন।
স্থানীয় লিনাক্স/ম্যাকওএস sh start.sh না; পটভূমি ব্যবহারের জন্য systemd/launchd ব্যবহার করুন।
যেকোনো সমর্থিত হোস্টে ডকার docker compose up -d --build --wait হ্যাঁ, যখন ডকার ডেমন চলছে।
উইন্ডোজে ডকার হেল্পার scripts\Docker.cmd হ্যাঁ; হেল্পার ওয়েব-সার্ভারের সুস্থতার জন্য অপেক্ষা করে।
লিনাক্স/ম্যাকওএস-এ ডকার হেল্পার sh scripts/docker-start.sh হ্যাঁ; হেল্পার ওয়েব-সার্ভারের সুস্থতার জন্য অপেক্ষা করে।

একটি ক্লাউড সার্ভার যা তৃতীয় পক্ষ যাচাই করতে পারবে — প্রদানকারীর API-এর মাধ্যমে তৈরি, SSH ছাড়া, শুধুমাত্র Cloudflare টানেলের মাধ্যমে অ্যাক্সেসযোগ্য — উচ্চ-আশ্বাসিত মোতায়েন দেখুন।

ন্যেটিভ স্টার্টআপ একটি ব্যক্তিগত .venv তৈরি করে এবং পিন করা নির্ভরতাগুলো ইনস্টল করে। ডকার হোস্ট পাইথনের প্রয়োজন ছাড়াই ইমেজের ভিতরে সেগুলো বিল্ড করে। প্রথমবারের সেটআপের জন্য ইন্টারনেট সংযোগ প্রয়োজন। যখন কোনো Python 3.11+ পাওয়া যায় না, তখন Start.cmd বর্তমান Windows ব্যবহারকারীর জন্য Python 3.12 ইনস্টল করার আগে জিজ্ঞাসা করে (winget ব্যবহার করে, অন্যথায় এর Python Software Foundation স্বাক্ষর যাচাই করার পর python.org ইনস্টলার); এটি কখনই প্রশাসকের বিশেষাধিকার চায় না। Docker এবং OS পরিষেবাগুলি পূর্বশর্ত হিসেবে রয়ে যায়।

নেটিভ এবং পোর্টেবল ইনস্টলেশনগুলো তাদের ফোল্ডারের ভিতরে data/live ব্যবহার করে। Docker tgwitness-data নামের ভলিউমটি /data এ ব্যবহার করে। এগুলো আলাদা ইনস্টলেশন হিসেবে কাজ করে যতক্ষণ না আপনি ইচ্ছাকৃতভাবে সম্পূর্ণ ডেটা ডিরেক্টরি স্থানান্তর করেন। একটি নতুন Docker কন্টেইনার স্বয়ংক্রিয়ভাবে নেটিভ অ্যাকাউন্টগুলো খুঁজে পাবে বলে আশা করবেন না।

ইনস্টলেশনের প্রয়োজনীয়তা#

নেটিভ ইনস্টলেশনের জন্য Python 3.11 বা পরবর্তী সংস্করণ, venv এবং ensurepip-এর জন্য ইন্টারনেট সংযোগ, এবং .venv-এর জন্য একটি লেখার যোগ্য প্রকল্প ডিরেক্টরি প্রয়োজন। বান্ডিলকৃত প্যানেলের জন্য কোনো Node.js বা ফ্রন্টএন্ড বিল্ডের প্রয়োজন নেই। আপনার সাধারণ OS অ্যাকাউন্ট থেকে লঞ্চারটি চালান; TgWitness-এর জন্য প্রশাসক/রুট অধিকার প্রয়োজন নেই।

  • 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 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 সংস্করণগুলি, যদি সামঞ্জস্যপূর্ণ ডিপেন্ডেন্সি হুইল না থাকে, অতিরিক্ত বিল্ড টুল এবং নিজস্ব যোগ্যতা প্রয়োজন হতে পারে। "পোর্টেবল" মানে সর্বজনীন OS বা হার্ডওয়্যার সমর্থন নিশ্চিত করা নয়।

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 পরিবেশ প্রস্তুত করে। লঞ্চার প্রথমবার ব্যবহার করার সময় নির্ভরতা ইনস্টল করে; পরবর্তীতে চালু করার সময় পরিবেশ পুনর্ব্যবহার করে। সেটআপ এবং টেলিগ্রাম সংগ্রহের জন্য ইন্টারনেট সংযোগ প্রয়োজন, তবে বিদ্যমান রেকর্ড ব্রাউজ করা এবং এক্সপোর্ট তৈরি করা অফলাইনে কাজ করে।

সেটআপের পর collector চালু না করেই local dependencies, Ed25519, storage, key configuration এবং listening address পরিদর্শন করতে python start.py --check চালান। গঠিত আউটপুটের জন্য --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, যদি সরবরাহ করা হয়, তবে এতে কমপক্ষে ২৪টি অক্ষর থাকতে হবে; ক্রিপ্টোগ্রাফিকভাবে র‍্যান্ডম মান ব্যবহার করুন। এটি ছাড়া, অ্যাপটি panel-token.txt-এ একটি ২৫৬-বিট র‍্যান্ডম টোকেন তৈরি করে। পরিবেশ ওভাররাইড সেই ফাইলটি পুনরায় লেখায় না। ক্রেডেনশিয়াল রোটেশন করতে রিস্টার্ট করুন।

একই সময়ে ঠিক একটি প্রক্রিয়া একটি ডেটা ডিরেক্টরি মালিক হতে পারে। একটি ক্রস-প্ল্যাটফর্ম OS ফাইল লক দুর্ঘটনাজনিত সমান্তরাল লেখকদের প্রতিরোধ করে। একটি 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 থেকে চালাবেন না। রানটাইম একটি বিচ্ছিন্ন মডিউল পথ ব্যবহার করে, তাই অন্যান্য পাইথন ইনস্টলেশন এবং 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 হিসেবে চলে, যেখানে capability সীমিত, root ফাইলসিস্টেম শুধুমাত্র পড়ার জন্য এবং /data ও /tmp লেখার যোগ্য। --wait ফেরত দেওয়ার আগে ওয়েব-সার্ভারের স্বাস্থ্যের পরীক্ষা করে; এটি টেলিগ্রাম অনুমোদন বা ডেলিভারি স্থাপন করে না। প্রদত্ত হেল্পারগুলো বিল্ড করার পর ১৮০ সেকেন্ডের রেডিয়েন্স টাইমআউট ব্যবহার করে। প্রাথমিক নির্ভরতা ডাউনলোডগুলো এর চেয়ে বেশি সময় নিতে পারে।

উভয় বেস Compose ফাইলে project name tgwitness ব্যবহার করা হয়েছে, তাই অন্য ডিরেক্টরিতে নতুন রিলিজ এক্সট্র্যাক্ট করলে নীরবে নতুন ডেটা ভলিউম নির্বাচন হবে না। ঐ project-এর জন্য শুধুমাত্র একটি deployment সক্রিয় রাখুন। স্বাধীন ইনস্টলেশনের জন্য, একটি অনন্য 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-এর 'স্টার্ট-অ্যাট-সাইন-ইন' সেটিং সক্ষম করুন। ডেস্কটপ সাইন-আউট, স্লিপ, বা একটি থামানো 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 বা মিররে প্রতিস্থাপিত কোনো ফাইল গ্রহণ করা হয় না। Python বেস ইমেজ এবং অপারেটিং-সিস্টেম প্যাকেজগুলির জন্য এখনও স্বতন্ত্র রিলিজ যোগ্যতার প্রয়োজন।

যদি না আপনি জার্নাল এবং কীগুলো ধ্বংস করতে চান, তাহলে docker compose down -v ব্যবহার করবেন না। কন্টেইনারের হেলথ রিপোর্ট ওয়েব-সার্ভারের উপলব্ধতা নির্দেশ করে, সফল টেলিগ্রাম ক্যাপচার নয়। প্যানেলের কালেক্টরের অবস্থা, হার্টবিট, ত্রুটি এবং কভারেজ ইভেন্টগুলো পরিদর্শন করুন।

স্বতন্ত্র সাক্ষীর প্রোফাইল#

বৈকল্পিক 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 নেটওয়ার্কের ভিতরে collector-এ পৌঁছায় http://tgwitness:8787 -এ (TGWITNESS_WITNESS_COLLECTOR এটিকে ওভাররাইড করে, উদাহরণস্বরূপ অন্য একটি ওয়ার্কস্পেসের জন্য /profiles/<workspace ID> )। অন্য কারো দ্বারা পরিচালিত পৃথক সার্ভারে একটি সাক্ষীর জন্য, সেখানে deploy/compose/compose.witness.yaml ব্যবহার করুন এবং TGWITNESS_WITNESS_COLLECTOR 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 কন্টেইনারগুলোকে টার্গেট করে, যার মধ্যে Docker Desktop-এর লিনাক্স VM-ও অন্তর্ভুক্ত। ওয়ার্কফ্লো সারসংক্ষেপ থেকে একটি সংস্করণ ট্যাগ বা ghcr.io/owner/repository@sha256:... ব্যবহার করুন। latest ট্যাগ সরানো বা তত্ত্বাবধায়নবিহীন অ্যাপ্লিকেশন আপগ্রেড কনফিগার করা হয়নি। ইমেজ এবং সোর্স ভ্যারিয়েন্টগুলি যখন তাদের প্রকল্প নাম মেলে তখন একই ডেটা ভলিউম ব্যবহার করে।

সার্ভারে স্বয়ংক্রিয় HTTPS#

ডকারসহ একটি সার্ভার, আপনার নিয়ন্ত্রণাধীন একটি ডোমেইন, এবং স্থায়ী স্থানীয় স্টোরেজ ব্যবহার করুন। ডোমেইনের A/AAAA রেকর্ডগুলো সার্ভারের দিকে নির্দেশ করুন; IPv6 পৌঁছালেই AAAA রেকর্ড প্রকাশ করুন। সার্টিফিকেট ইস্যুর জন্য ইনবাউন্ড 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 ট্যাগ অনুসরণ করে। পুল করলে সেই ইমেজটি রিফ্রেশ হয়; যদি আপনাকে স্থির অবকাঠামো সংস্করণ প্রয়োজন হয়, তাহলে আপনার ডিপ্লয়মেন্টে একটি পরীক্ষিত ডাইজেস্ট পিন করুন।

আপডেট এবং ব্যাকআপ#

আপডেটের সময় 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

পূর্ববর্তী stop/copy কমান্ডগুলির জন্যও আপনার ইনস্টলেশনের Compose ফাইল(গুলি) ব্যবহার করুন। .env, কাস্টম কনফিগারেশন এবং একই প্রকল্প নাম রাখুন। down নামকৃত ভলিউম সংরক্ষণ করে; down -v সেগুলো মুছে ফেলে। .venv অপারেটিং সিস্টেম বা পাইথন সংস্করণের মধ্যে কপি করবেন না। নেটিভ আপডেটের জন্য, TgWitness বন্ধ করুন, এর সম্পূর্ণ ডেটা ডিরেক্টরির ব্যাকআপ নিন, সোর্স ফাইলগুলো প্রতিস্থাপন করুন, এবং লঞ্চের আগে python start.py --setup-only চালান।

আপডেটের পর চেক প্যানেল অ্যাক্সেস, অ্যাকাউন্ট আইডেন্টিটি, পর্যবেক্ষণ অবস্থা এবং কভারেজ পরীক্ষা করুন। রিস্টার্ট করলে মিস করা টেলিগ্রাম আপডেটগুলো পুনর্গঠন হয় না। ভবিষ্যতের কোনো সংস্করণ যদি স্টোরেজ ফরম্যাট পরিবর্তন করে, তাহলে রোলব্যাকের জন্য পূর্ব-আপডেট ব্যাকআপ প্রয়োজন হতে পারে।

স্বয়ংক্রিয় গিটহাব রিলিজ#

এই প্রকল্পটি Actions-সক্ষম একটি GitHub রিপোজিটরিতে পুশ করার পর রিলিজ ওয়ার্কফ্লো ব্যবহারের জন্য প্রস্তুত। এটি একটি 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 ওয়িল সংযুক্ত করে। একটি পৃথক Windows জব পোর্টেবল ZIP এবং এর চেকসাম তৈরি করে এবং সংযুক্ত করে।
  4. প্রথম প্রকাশের পর, GHCR প্যাকেজ সেটিংস খুলে দৃশ্যমানতা Public এ সেট করুন যদি অজ্ঞাতনামা ইমেজ পুল করার উদ্দেশ্য থাকে। শুধুমাত্র একটি পাবলিক সোর্স রিপোজিটরি একটি পাবলিক কন্টেইনার প্যাকেজের নিশ্চয়তা দেয় না। সংস্থার নীতিমালা অবশ্যই প্যাকেজ প্রকাশের অনুমতি দিতে হবে। ওয়ার্কফ্লোটি GITHUB_TOKEN ব্যবহার করে; কোনো রেজিস্ট্রি পাসওয়ার্ড বা VPS ক্রেডেনশিয়াল রিপোজিটরিতে রাখা যাবে না।

এই স্থানীয় প্রস্তুতির মাধ্যমে রিমোট ওয়ার্কফ্লোর সফলতা নিশ্চিত হয়নি। ARM64 এমুলেশন একটি স্মোক চেক, নেটিভ হার্ডওয়্যার বা লাইভ টেলিগ্রাম যোগ্যতা নয়। এটি রিলিজ প্যাকেজিং স্বয়ংক্রিয় করে; একটি সার্ভার শুরু করতে এখনও Compose কমান্ড এবং এর ডোমেইন/হোস্ট পূর্বশর্ত প্রয়োজন। বিদ্যমান সার্ভারগুলো কোনো রিলিজ প্রকাশিত হলে নীরবে আপগ্রেড বা রিস্টার্ট হয় না।

দূরবর্তী সার্ভার#

সার্ভিসটিকে লুপব্যাকের সাথে বাধাই রাখুন এবং একটি SSH টানেল ব্যবহার করুন, অথবা HTTPS রিভার্স প্রক্সিতে টার্মিনেট করুন। বেস কম্পোজ ফাইলটি শুধুমাত্র লোকাল; ঐচ্ছিক deploy/compose/compose.https.yaml ওভারলে একটি কনফিগার করা ডোমেনের জন্য Caddy সরবরাহ করে। URL এবং প্রক্সি লগ থেকে বিয়ারার টোকেন দূরে রাখুন। একটি রিভার্স প্রক্সিকে অনুরোধের আকার এবং সংযোগের হার সীমিত করা উচিত। সাধারণ HTTP ইন্টারনেটে উন্মুক্ত করবেন না।

systemd, একটি Windows logon task, একটি macOS user agent এবং Caddy-এর উদাহরণ deploy/-এ প্রদান করা হয়েছে। ইনস্টলেশনের আগে তাদের পথ পর্যালোচনা/পরিমার্জন করুন। এগুলো টেমপ্লেট হিসেবে সরবরাহ করা হয়েছে, স্থানীয়ভাবে চালিত প্ল্যাটফর্ম যোগ্যতা নয়। সাধারণ লঞ্চার দ্বারা কোনো ব্যাকগ্রাউন্ড সার্ভিস বা টাস্ক নিবন্ধিত হয় না।

উইন্ডোজে, উইন্ডোবিহীন pythonw.exe লঞ্চ স্টার্টআপ/সার্ভার ডায়াগনস্টিক্স logs/server.log-এর ডেটা ডিরেক্টরিতে সংরক্ষণ করে (প্রতি ফাইলে ৫ MiB, দুটি রোটেশনেড ব্যাকআপ)। কনসোল লঞ্চগুলো কনসোল লগিং বজায় রাখে। উভয় মোডে HTTP অ্যাক্সেস লগিং অক্ষম করা আছে। ডেটা ডিরেক্টরিতে থাকা লগগুলো সুরক্ষিত করুন এবং শেয়ার করার আগে সেগুলো পর্যালোচনা করুন।

পুনরায় শুরু এবং ফাঁক#

শেষ অনুরোধকৃত পর্যবেক্ষণ অবস্থা সংরক্ষিত হয়। যদি পর্যবেক্ষণ সক্রিয় থাকে, স্টার্টআপ পুনরায় সংযোগ স্থাপনের এবং নির্বাচিত উৎসগুলি পুনরায় শুরু করার চেষ্টা করে। ম্যানুয়াল বিরতি সেই উদ্দেশ্য বাতিল করে। একটি ব্যর্থ পুনঃশুরু রেকর্ড করা হয় এবং প্যানেলে দেখানো হয়।

StringSession অনুমোদন ধরে রাখে, কিন্তু Telethon-এর টেকসই আপডেট/এনটিটি অবস্থা ধরে রাখে না। স্টার্টআপে ডায়ালগগুলো পুনরায় লোড হয়। Telegram/Telethon চলার সময় কিছু পরিবহন বিঘ্ন পুনরুদ্ধার করতে পারে, কিন্তু TgWitness প্রক্রিয়া পুনরায় শুরু করার পর টেকসই পুনঃপ্রচারের নিশ্চয়তা দেয় না। প্রতি বার চালু হওয়ার সময় পূর্ববর্তী জার্নাল হেড এবং অফলাইন সীমা রেকর্ড করে। মনিটর প্রতি ১০ সেকেন্ডে সংযোগ পরীক্ষা করে এবং প্রতি মিনিটে একটি হার্টবিট যোগ করে (প্যারামিটার → লাইভনেস রেকর্ড প্রতি)। সংক্ষিপ্ত বিঘ্নগুলি মিস হতে পারে; একটি সংযুক্ত পরিবহন সম্পূর্ণ আপডেট ডেলিভারি নিশ্চিত করে না। স্ন্যাপশটগুলি স্পষ্ট বর্তমান-ইতিহাসের পর্যবেক্ষণ, কখনই ফাঁক মেরামত নয়।

মিডিয়া কুই প্রতিটি ওয়ার্কস্পেসের SQLite ডাটাবেসে সংরক্ষিত থাকে। একটি বার্তা এবং তার কাজ অ্যাটমিক্যালি কমিট করা হয়। বিঘ্নিত চলমান কাজগুলো শুরু করার সময় পুনরায় চেষ্টা করার জন্য পুনরুদ্ধার করা হয়। প্রতি ডাউনলোডে 120 সেকেন্ডের বেস টাইমআউট এবং এর আকার অনুযায়ী 256 KiB/s গতিতে সময় যুক্ত হয়, এবং প্রতিটি অ্যাটাচমেন্ট টাইপের জন্য 1–2,000 MiB সীমা রয়েছে; টাইমআউট, গতি এবং পুনঃচেষ্টা প্যারামিটারে সেট করা থাকে। কালেক্টর অজানা আকারের ফাইল স্কিপ করে। বিরতি দিলে সারিতে থাকা কাজগুলো সংরক্ষিত থাকে। পুনরায় চেষ্টা মূল পর্যবেক্ষিত ফাইল ডিসক্রিপ্টর ব্যবহার করে, পরবর্তী সময়ে সম্পাদিত বার্তার সর্বশেষ সংস্করণ কখনই নয়। অস্থায়ী ব্যর্থতার জন্য সীমিত পুনরায় চেষ্টার সুযোগ রয়েছে; মিডিয়া ফ্লাডওয়েট বিরতি রিস্টার্টের পরেও বজায় থাকে। মিডিয়া পুনরুদ্ধার টেলিগ্রাম আপডেট পুনরুদ্ধার থেকে আলাদা এবং অদৃশ্য হওয়া ফাইল পুনরায় তৈরি করতে পারে না।

ব্যাকআপ, পুনরুদ্ধার এবং সক্ষমতা#

পুরো ডেটা ডিরেক্টরি কপি করার আগে প্রক্রিয়াটি বন্ধ করুন, যার মধ্যে রয়েছে vault.key, signing.enc, credentials.enc, SQLite ডাটাবেস/WAL ফাইল, মিডিয়া, টোকেন, চেকপয়েন্ট এবং সমস্ত প্রোফাইল/উপ-ডিরেক্টরি। গন্তব্য সার্ভিস বন্ধ থাকা অবস্থায় সম্পূর্ণ কপিটি পুনরুদ্ধার করুন। অনুপস্থিত ভল্ট কী বা সাইন-কি অমিল স্টার্টআপ ব্যর্থ করে; জোরপূর্বক অ্যাক্সেসের জন্য কী পুনর্জন্ম করবেন না।

গোপন ব্যাকআপগুলো এনক্রিপ্টেড এবং অ্যাক্সেস-নিয়ন্ত্রিত রাখুন। প্রমাণ 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

অন্য একটি ওয়ার্কস্পেসের জন্য 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 secrets সমর্থিত নয়। সরাসরি ফলব্যাক নির্বাচিত আইপি মোডের উপর নির্ভর করে: Hide IP এটি প্রত্যাখ্যান করে; স্পষ্ট ফলব্যাক মোড একটি বিলম্বের পর এটি অনুমোদন করে। Tunnel/VPN মোড সরাসরি রুট অনুমোদন করে কিন্তু VPN তৈরি করে না। এটি কোনো সিস্টেম-ব্যাপী নেটওয়ার্ক নীতি নয়।

নতুন ইনস্টলেশনের জন্য, TGWITNESS_VAULT_KEY_FILE একটি পৃথকভাবে সুরক্ষিত র‍্যান্ডম মাস্টার-কি ফাইলের দিকে নির্দেশ করে। এটিকে একটি কন্টেইনারে /data-এর বাইরে শুধুমাত্র-পঠন (read-only) মোডে মাউন্ট করুন। প্রতিটি ওয়ার্কস্পেসের সাথে পাবলিক vault.external.json সল্ট মেটাডেটা এবং মাস্টার কী পৃথকভাবে সংরক্ষণ করুন। বিদ্যমান লোকাল ভল্টগুলির জন্য পরিকল্পিত মাইগ্রেশন প্রয়োজন; এই ভেরিয়েবল সেট করলে সেগুলো নীরবে রূপান্তরিত হবে না। মেসেজ/মিডিয়া স্টোরেজ এবং এক্সপোর্টগুলি অ্যাপ্লিকেশন-এনক্রিপ্টেড নয়। প্রয়োজনে এনক্রিপ্টেড ভলিউম এবং পর্যাপ্ত ব্যক্তিগত অস্থায়ী স্টোরেজ ব্যবহার করুন।

বিস্তারিত পদ্ধতি: সংযোগ/নিরাপত্তা এবং পরিচালন মোড।