پنل مدیریتی VLESS-over-WebSocket | تکسرویس، بدون دیتابیس
Single-service VLESS-over-WebSocket panel — database‑free
StanNG یک پنل مدیریتی سبک و تکسرویسه برای پروتکل VLESS-over-WebSocket است که بدون نیاز به دیتابیس خارجی، تمام اطلاعات را در یک فایل JSON محلی ذخیره میکند. این پروژه با هدف سادگی، امنیت و کارایی برای کاربران فارسیزبان و انگلیسیزبان طراحی شده است.
- بدون دیتابیس خارجی – همه چیز در
data/db.jsonذخیره میشود - راهاندازی یکباره – اولین بازدید = ساخت ادمین، بدون رمز پیشفرض
- مدیریت کاربران پیشرفته – حجم (GB)، اعتبار (روز)، سقف درخواست، محدودیت اتصال همزمان، قفل IP
- لینک اشتراک سازگار با v2rayNG – خروجی متن ساده (Plain Text) با لینکهای VLESS قابل شناسایی
- تنظیمات پیشرفته کانفیگ – Fingerprint، ALPN، SNI اختصاصی (Domain Fronting)، پارامترهای Fragment
- ضد فروش – یککلیک برای ابطال لینکهای قدیمی (تولید مجدد UUID)
- آپدیت خودکار درونپنلی – بهروزرسانی از داخل پنل بدون از دست دادن کاربران و تنظیمات
- صفحه وضعیت عمومی – هر کاربر بدون ورود به پنل، مصرف خود را مشاهده میکند
- دو زبانه (فارسی/انگلیسی) – با قابلیت تغییر لحظهای
- واکنشگرا – سازگار با موبایل، تبلت و دسکتاپ
- امنیت بالا – هش رمز با PBKDF2-SHA256، محدودیت تلاش ورود، کوکی امضاشده
- جلوههای صوتی و انیمیشن – بدون وابستگی خارجی
- دکمه پشتیبانی تلگرام – دسترسی مستقیم از هر صفحه
- بیدارباش خودکار – جلوگیری از خواب سرویس در پلنهای رایگان
- رفع مشکل v2rayNG با اصلاح encode پارامترهای
pathوalpn - خروجی لینک اشتراک بهصورت متن ساده (Plain Text) بهجای Base64
- بازگشت کانفیگهای نمایشی (وضعیت مصرف و پیام رایگان) به لینک اشتراک
- حذف کامل قابلیت Clean IP
- اصلاح پروتکل لینکها به
https://
- مخزن را Fork کنید یا به گیتهاب خودتان Push کنید.
- در Railway → New Project → Deploy from GitHub repo.
- بعد از دیپلوی، به
<your-domain>/setupبروید و نامکاربری/رمز عبور بسازید.
💡 Railway از IP اختصاصی خودش استفاده میکند. در صورت فیلترشدن، حالت Fragment را از پنل (تنظیمات → تنظیمات پیشرفته) و در کلاینت فعال کنید.
- مخزن را Fork کنید.
- در Render → New → Web Service.
- بعد از دیپلوی به
/setupبروید.
💡 روی Render پشت شبکهٔ Cloudflare هستید.
git clone https://github.com/<your-username>/StanNG.git
cd StanNG
pip install -r requirements.txt
python main.py
# → http://localhost:8000/setupپنل هیچ رمز پیشفرضی ندارد. اولین بازدیدکننده به صفحهی /setup هدایت میشود و:
- یک نام کاربری (۳ تا ۳۲ کاراکتر، فقط حروف/عدد/زیرخط) وارد میکند.
- یک رمز عبور (حداقل ۶ کاراکتر) انتخاب میکند.
- از آن به بعد فقط با همان اطلاعات وارد میشود.
اطلاعات بهصورت هششده (PBKDF2-SHA256, 260k iterations) در data/db.json ذخیره میشود.
| متغیر | توضیح | پیشفرض |
|---|---|---|
PORT |
پورت اجرای سرویس | 8000 |
STANNG_DATA_DIR |
مسیر ذخیرهسازی دیتابیس JSON | ./data |
همه تنظیمات دیگر از داخل پنل قابل تغییر هستند.
پنل قابلیت آپدیت خودکار از داخل داشبورد را دارد:
- در تنظیمات → مخزن گیتهاب برای آپدیت، آدرس مخزن خود را وارد کنید (مثلاً
username/StanNG). - در داشبورد → بهروزرسانی پنل، روی بررسی نسخه جدید کلیک کنید.
- اگر نسخه جدید موجود بود، دکمه بهروزرسانی همین الان ظاهر میشود.
- پنل بهصورت خودکار آخرین نسخه را دانلود، اعتبارسنجی و جایگزین میکند.
- پوشهی
data/(شاملdb.json) هرگز لمس نمیشود — کاربران، رمز عبور و تنظیمات حفظ میشوند. - سرویس ریاستارت میشود و پنل با نسخه جدید بالا میآید.
⚠️ اگر پنل را بهصورت دستی (باpython main.py) اجرا میکنید، بعد از آپدیت باید خودتان دوباره آن را اجرا کنید.
StanNG/
├── main.py # هسته اصلی برنامه (FastAPI)
├── vless_engine.py # موتور VLESS
├── storage.py # مدیریت دیتابیس JSON
├── colo_map.py # تشخیص موقعیت سرور
├── requirements.txt # وابستگیها
├── Procfile # دستور اجرا در Railway/Render
├── railway.json # تنظیمات Railway
├── render.yaml # تنظیمات Render
├── templates/ # قالبهای HTML
│ ├── setup.html # صفحه ساخت ادمین
│ ├── login.html # صفحه ورود
│ ├── dashboard.html # داشبورد مدیریت
│ ├── status.html # صفحه وضعیت عمومی
│ └── _icons.html # آیکونهای SVG
├── static/ # فایلهای استاتیک
│ ├── css/ # استایلها (theme.css, dashboard.css)
│ ├── js/ # جاوااسکریپت (common.js, i18n.js, dashboard.js)
│ ├── fonts/ # فونتها (Vazirmatn, Cinzel, MedievalSharp)
│ ├── sfx/ # افکتهای صوتی
│ └── img/ # تصاویر (لوگو، پسزمینه، فاوآیکون)
├── docs/screenshots/ # تصاویر README
└── data/ # دیتابیس (db.json - ایجاد خودکار، git-ignored)
| متد | مسیر | توضیح |
|---|---|---|
| GET | /api/setup-status |
بررسی نیاز به راهاندازی |
| POST | /api/setup |
ساخت حساب ادمین |
| POST | /api/login |
ورود |
| POST | /api/logout |
خروج |
| GET | /api/me |
وضعیت نشست |
| POST | /api/change-password |
تغییر نامکاربری/رمز |
| متد | مسیر | توضیح |
|---|---|---|
| GET | /api/inbounds |
لیست کاربران |
| POST | /api/inbounds |
ساخت کاربر جدید |
| PATCH | /api/inbounds/{uid} |
ویرایش کاربر |
| DELETE | /api/inbounds/{uid} |
حذف کاربر |
| POST | /api/inbounds/{uid}/reset-usage |
ریست مصرف |
| POST | /api/inbounds/{uid}/regenerate |
تولید UUID جدید |
| GET | /api/inbounds/{uid}/links |
دریافت لینکها |
| GET | /api/inbounds/{uid}/qr |
تصویر QR |
| متد | مسیر | توضیح |
|---|---|---|
| GET | /sub/{uid} |
لینک اشتراک (متن ساده) |
| GET | /sub/{uid}/json |
لینک اشتراک JSON |
| GET | /status/{uid} |
صفحه وضعیت عمومی |
| GET | /api/status/{uid} |
وضعیت بهصورت JSON |
| متد | مسیر | توضیح |
|---|---|---|
| POST | /api/settings |
ذخیره تنظیمات |
| GET | /health |
Health check |
| GET | /stats |
آمار سیستم |
| GET | /api/ota/check |
بررسی نسخه جدید |
| POST | /api/ota/update |
بهروزرسانی خودکار |
| WS | /ws/{uid} |
WebSocket VLESS |
- رمزها با PBKDF2-HMAC-SHA256 (۲۶۰,۰۰۰ تکرار) هش میشوند.
- نشستها با کوکی امضاشده (
itsdangerous) و انقضای ۷ روزه. - محدودیت تلاش ورود: ۶ بار ناموفق = قفل ۵ دقیقهای IP.
data/db.jsonحاوی اطلاعات حساس است و در.gitignoreقرار دارد.
این پروژه تحت مجوز MIT منتشر شده است.
منابع شخصثالث بستهبندیشده:
- فونت Vazirmatn (SIL OFL 1.1)
- فونتهای Cinzel / MedievalSharp (SIL OFL 1.1)
- افکتهای صوتی از Kenney.nl (CC0 1.0)
- تصاویر تولیدشده اختصاصی با هوش مصنوعی