نصب و راه‌اندازی

به‌روزرسانی و نگه‌داری

به‌روزرسانی کد WZML-X با UPSTREAM_REPO و UPSTREAM_BRANCH، کار update.py هنگام شروع، دستور /restart و پاک‌سازی Docker.

WZML-X دو نوع به‌روزرسانی دارد که بهتر است از هم جدا بدانید:

  1. به‌روزرسانی کد ربات که خودکار و داخل کانتینر انجام می‌شود، به شرطی که UPSTREAM_REPO را تنظیم کرده باشید.
  2. ساختن دوبارهٔ ایمیج که برای تغییرات Dockerfile و ایمیج پایه لازم است و باید خودتان روی سرور انجامش دهید.

UPSTREAM_REPO و UPSTREAM_BRANCH

متغیرپیش‌فرضکاربرد
UPSTREAM_REPOخالیآدرس مخزن Git که کد از آن گرفته می‌شود. اگر خالی باشد، کد به‌روز نمی‌شود.
UPSTREAM_BRANCHwzv3شاخه‌ای از آن مخزن که کد با آن هم‌سان می‌شود.

مثلاً برای دنبال کردن مخزن اصلی:

UPSTREAM_REPO = "https://github.com/SilentDemonSD/WZML-X"
UPSTREAM_BRANCH = "wzv3"

این دو را می‌توانید در config.py، به‌صورت متغیر محیطی، یا از /bsetting ← Config Variables تنظیم کنید (تنظیمات ربات). update.py مقادیر ذخیره‌شده در MongoDB را هم در نظر می‌گیرد.

update.py هنگام شروع چه می‌کند؟

start.sh قبل از اجرای ربات، update.py را اجرا می‌کند. دستور /restart هم قبل از راه‌اندازی دوباره همین فایل را اجرا می‌کند. کارهای آن به ترتیب:

  1. پیکربندی را از config.py، متغیرهای محیطی و در صورت وجود MongoDB می‌خواند. بدون BOT_TOKEN با پیام BOT_TOKEN variable is missing! Exiting now متوقف می‌شود.
  2. اگر UPSTREAM_REPO خالی باشد، پیام No UPSTREAM_REPO set, skipping git update را ثبت می‌کند و از به‌روزرسانی کد می‌گذرد.
  3. در غیر این صورت، پوشهٔ .git موجود را حذف می‌کند، یک مخزن تازه می‌سازد، UPSTREAM_REPO را به‌عنوان origin اضافه می‌کند، git fetch می‌گیرد و با git reset --hard origin/<UPSTREAM_BRANCH> کد را با شاخهٔ بالادستی یکی می‌کند.
  4. نتیجه را در لاگ می‌نویسد: Successfully updated with Latest Updates! یا در صورت خطا Something went Wrong! Recheck your details or Ask Support!، و بعد خطی مثل UPSTREAM_REPO: SilentDemonSD/WZML-X | UPSTREAM_BRANCH: wzv3 | VERSION: v3.1.11-x.
  5. پوشه‌ها و فایل‌های غیرضروری برای اجرا (gen_scripts، .github، README.md، LICENSE، Dockerfile و docker-compose.yml) را از داخل کانتینر حذف می‌کند.
  6. بسته‌های پایتون را با uv pip install -U -r requirements.txt به‌روز می‌کند.

همهٔ این کارها داخل کانتینر انجام می‌شود و فایل‌های پوشهٔ پروژه روی سرور شما تغییر نمی‌کنند.

دستور /restart

دستور /restart (کوتاه‌شده: /r، و /restartall) فقط برای مالک و سودوها فعال است. ربات اول تأیید می‌خواهد و باید دکمهٔ Yes! را بزنید.

  • ری‌استارت کامل (پیش‌فرض): همهٔ کارهای در حال اجرا متوقف می‌شوند، صف‌های SABnzbd و JDownloader و تورنت‌ها پاک می‌شوند، پروسه‌هایی مثل Aria2، qBittorrent، FFmpeg و Rclone بسته می‌شوند، update.py اجرا می‌شود و ربات از نو بالا می‌آید. ربات در هر شروع پوشهٔ دانلودها را خالی می‌کند (در لاگ: Cleaning Download Directory)، پس دانلودهای نیمه‌کاره ادامه پیدا نمی‌کنند. بعد از بالا آمدن، پیام ری‌استارت به Restarted Successfully! همراه با شاخه و نسخه تغییر می‌کند.
  • ری‌استارت نرم: با /restart -s، ربات update.py را اجرا می‌کند و فقط ماژول‌های کد را دوباره بارگذاری می‌کند؛ طبق پیام خود ربات، کارهای در حال اجرا ادامه پیدا می‌کنند (Mode: Soft (code reload only, tasks keep running)).

اگر می‌خواهید بعد از ری‌استارت از کارهای ناتمام باخبر شوید، INC_TASK_NOTIFY را روشن کنید؛ با INC_TASK_RESUME، ربات دستور اصلی هر کار ناتمام را دوباره اجرا می‌کند (کار از ابتدا شروع می‌شود). هر دو به DATABASE_URL نیاز دارند.

ساختن دوبارهٔ ایمیج

به‌روزرسانی خودکار فقط کد پایتون و بسته‌های requirements.txt را به‌روز می‌کند. اگر Dockerfile یا ایمیج پایه (mysterysd/wzmlx:wzadv) تغییر کرده باشد، یا اصلاً UPSTREAM_REPO را تنظیم نکرده‌اید، کد را روی سرور به‌روز کنید و ایمیج را دوباره بسازید:

cd WZML-X
git pull
docker compose up -d --build

config.py در .gitignore پروژه است، پس git pull آن را بازنویسی نمی‌کند.

پاک‌سازی Docker

بعد از چند بار ساختن ایمیج، نسخه‌های قدیمی فضای دیسک را پر می‌کنند. README.md این ترتیب را توصیه می‌کند: اول کانتینر را متوقف کنید، بعد آن را حذف کنید، و فقط بعد از حذف کانتینر سراغ پاک‌سازی ایمیج‌ها بروید.

docker container prune
docker image prune -a

تنظیم AsyncIOThreadsCount برای qBittorrent

README.md توصیه می‌کند اگر از qBittorrent استفاده می‌کنید، AsyncIOThreadsCount را متناسب با اندازهٔ سرور تنظیم کنید. این مقدار در فایل configs/qbittorrent/qBittorrent/config/qBittorrent.conf به شکل Session\AsyncIOThreadsCount=16 آمده است؛ یعنی پیش‌فرض آن 16 است.

چند نکته:

  • این فایل هنگام ساخت ایمیج داخل آن کپی می‌شود، پس اگر آن را روی سرور ویرایش می‌کنید، این کار را قبل از اولین ساخت و اجرا انجام دهید.
  • ربات بعد از اولین اجرا تنظیمات qBittorrent را در MongoDB ذخیره می‌کند (ترتیب اولویت تنظیمات در نحوهٔ پیکربندی آمده است) و در هر شروع دوباره روی qBittorrent اعمال می‌کند. برای تغییرات بعدی از /bsetting ← Qbit Settings استفاده کنید. دکمهٔ Sync Qbittorrent در همان بخش، تنظیمات فعلی را از خود qBittorrent می‌خواند و در پایگاه داده ذخیره می‌کند.

مثلاً LEECH_SPLIT_SIZE، /mirror، -up یا «تامبنیل»