نصب و راهاندازی
بهروزرسانی و نگهداری
بهروزرسانی کد WZML-X با UPSTREAM_REPO و UPSTREAM_BRANCH، کار update.py هنگام شروع، دستور /restart و پاکسازی Docker.
WZML-X دو نوع بهروزرسانی دارد که بهتر است از هم جدا بدانید:
- بهروزرسانی کد ربات که خودکار و داخل کانتینر انجام میشود، به شرطی که
UPSTREAM_REPOرا تنظیم کرده باشید. - ساختن دوبارهٔ ایمیج که برای تغییرات
Dockerfileو ایمیج پایه لازم است و باید خودتان روی سرور انجامش دهید.
UPSTREAM_REPO و UPSTREAM_BRANCH
| متغیر | پیشفرض | کاربرد |
|---|---|---|
UPSTREAM_REPO | خالی | آدرس مخزن Git که کد از آن گرفته میشود. اگر خالی باشد، کد بهروز نمیشود. |
UPSTREAM_BRANCH | wzv3 | شاخهای از آن مخزن که کد با آن همسان میشود. |
مثلاً برای دنبال کردن مخزن اصلی:
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 هم قبل از راهاندازی دوباره همین فایل را اجرا میکند. کارهای آن به ترتیب:
- پیکربندی را از
config.py، متغیرهای محیطی و در صورت وجود MongoDB میخواند. بدونBOT_TOKENبا پیامBOT_TOKEN variable is missing! Exiting nowمتوقف میشود. - اگر
UPSTREAM_REPOخالی باشد، پیامNo UPSTREAM_REPO set, skipping git updateرا ثبت میکند و از بهروزرسانی کد میگذرد. - در غیر این صورت، پوشهٔ
.gitموجود را حذف میکند، یک مخزن تازه میسازد،UPSTREAM_REPOرا بهعنوانoriginاضافه میکند،git fetchمیگیرد و باgit reset --hard origin/<UPSTREAM_BRANCH>کد را با شاخهٔ بالادستی یکی میکند. - نتیجه را در لاگ مینویسد:
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. - پوشهها و فایلهای غیرضروری برای اجرا (
gen_scripts،.github،README.md،LICENSE،Dockerfileوdocker-compose.yml) را از داخل کانتینر حذف میکند. - بستههای پایتون را با
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 میخواند و در پایگاه داده ذخیره میکند.