یک پنل برای دیپلوی، مدیریت و مانیتورینگ ریلی VLESS+XHTTP روی ۶ پلتفرم ابری
bash <(curl -fsSL https://raw.githubusercontent.com/avacocloud/XHTTP-Panel/main/install.sh)همین. بقیهش خودکاره.
پیشنیازها: سرور Ubuntu 20.04+ · دامنه · دسترسی root
بعد از نصب، دستور xhttp-info روی سرور این امکانات رو میده:
xhttp-info [1] Reset admin password ← فراموشی رمز عبور
[2] Change web path ← تغییر مسیر پنل
[3] Update panel ← آپدیت به آخرین نسخه
[q] Quit
xhttp-info updateتوکنها، کانفیگها و دیپلویها بعد از آپدیت دستنخورده باقی میمونن.
xhttp-info reset-passwordxhttp-info set-pathXHTTP Panel یه داشبورد وب self-hosted هست که جایگزین کار دستی با CLI برای دیپلوی و مدیریت سرورهای ریلی VLESS+XHTTP میشه. به جای SSH زدن و اجرای دستورات، یه UI تمیز داری با دیپلوی یککلیکی، پراگرس زنده، و مدیریت کامل.
مرکز فرماندهی پنل. وقتی وارد میشی اول اینجا رو میبینی.
- ۳ کارت آماری بالای صفحه:
- تعداد کل دیپلویها
- تعداد دیپلویهای فعال (active)
- تعداد Health Check های ناموفق
- جدول دیپلویهای اخیر — با ستونهای پلتفرم، نام پروژه، URL، وضعیت و تاریخ ایجاد
- Badge رنگی برای هر وضعیت: سبز (active)، خاکستری (deploying)، قرمز (failed)
- آیکون اختصاصی هر پلتفرم با tooltip
صفحهای با طراحی کارتی زیبا برای ذخیره و مدیریت اطلاعات دسترسی به هر پلتفرم.
- کارتهای گرادیان اختصاصی — هر پلتفرم رنگ و آیکون مخصوص خودش رو داره (Vercel، Netlify، Azure، Deno، Railway، Fastly)
- رمزنگاری AES-256-GCM — توکنها هیچوقت به صورت plain ذخیره نمیشن. کلید رمزنگاری خودکار ساخته میشه و مختص همون نصب هست
- نمایش masked — توکنها به صورت
****xxxxنشون داده میشن، نه کامل - تست اعتبار با یک کلیک — قبل از دیپلوی مطمئن شو توکنت هنوز valid هست. نتیجه تست (Valid/Invalid) روی همون کارت نمایش داده میشه
- فرم داینامیک — وقتی پلتفرم رو انتخاب میکنی، فیلدهای مخصوص همون پلتفرم نمایش داده میشه:
- Vercel / Netlify: یه فیلد (API Token)
- Azure: ۴ فیلد (App ID, Password, Tenant ID, Subscription ID)
- Deno: ۲ فیلد (API Token, Org Name)
- Railway / Fastly: یه فیلد (API Token)
- چند توکن برای هر پلتفرم — مثلاً ۳ اکانت مختلف Fastly
- حذف با تایید — Dialog تاییدیه قبل از حذف
قلب پنل. یه ویزارد ۳ مرحلهای شیک که ریلی VLESS+XHTTP رو روی ۶ پلتفرم ابری دیپلوی میکنه.
- ۶ کارت با آیکون، رنگ و افکت glow اختصاصی
- کارت انتخابشده با حاشیه نورانی مشخص میشه
- Token — انتخاب از توکنهای ذخیرهشده (dropdown فیلتر شده بر اساس پلتفرم)
- Project Name — نام پروژه (فقط حروف کوچک، اعداد و خطتیره)
- Target Domain — دامنه سرور (مثل
your-domain.com) یا IP - Relay Path / Public Path — مسیر relay (پیشفرض
/api) - تنظیمات اختصاصی هر پلتفرم:
- Fastly: انتخاب دامنه سفارشی (
xxx.edgecompute.app) یا رندوم - Azure: Resource Group، SKU (F1/B1/B2/S1)، Region، Port، Max Inflight، Upload/Download limit
- Railway: Region (۶ ریجن با پرچم کشور)، Max Inflight، Upstream Timeout
- Fastly: انتخاب دامنه سفارشی (
- خلاصه همه تنظیمات قبل از اجرا
- دکمه Deploy با اسپینر
- Dialog مودال با مراحل شمارهدار
- هر مرحله سه حالت داره: ⏳ در انتظار (دایره خالی)، 🔄 در حال اجرا (اسپینر)، ✅ تمام (تیک سبز)، ❌ خطا (ضربدر قرمز)
- استریم Server-Sent Events — مراحل بیلد و دیپلوی لحظهای آپدیت میشن
- وقتی دیپلوی تموم میشه: URL سرویس + لینک کانفیگ VLESS + دکمه Copy
- پراگرس سمت سرور اجرا میشه — حتی اگه مرورگر بسته بشه، دیپلوی ادامه داره
| پلتفرم | Runtime | روش دیپلوی | ویژگی خاص |
|---|---|---|---|
| Vercel | Node.js (Serverless) | Vercel API | Fluid Compute، حالت Fast Pipe |
| Netlify | Node.js (Functions) | Netlify CLI | Domain fronting |
| Azure | Node.js (App Service) | Azure REST API | انتخاب SKU و Region، مدیریت Resource Group |
| Fastly | WebAssembly (Compute@Edge) | Fastly CLI | ۱۰۰+ Edge POP جهانی، دامنه سفارشی |
| Deno | TypeScript (Deno Deploy) | deployctl | Edge runtime سریع |
| Railway | Node.js (Container) | Railway CLI | انتخاب ریجن، Docker container |
- Redeploy — ریدیپلوی با یک کلیک (کد جدید push میشه)
- Delete — حذف کامل (سرویس ریموت + رکورد دیتابیس + Resource Group در Azure)
- Health Check — تست سلامت با نمایش status code و response time به میلیثانیه
صفحه مرکزی برای دیدن و مدیریت تمام لینکهای اتصال. سه تب داره:
- لینک مستقیم سرور — کانفیگ VLESS مستقیم از VPS بدون ریلی
- لینک هر دیپلوی — کانفیگ VLESS از طریق هر ریلی (Vercel, Fastly, ...)
- هر لینک شامل:
- کپی با یک کلیک — دکمه Copy + نوتیفیکیشن "Copied!"
- QR Code — باز/بسته شدن با انیمیشن، آماده اسکن با موبایل
- Check Relay — تست زنده ریلی با نمایش status code و latency (مثلاً
✓ 200 (142ms)) - حذف سریع — دکمه Delete با Dialog تایید مستقیم از همین صفحه
- Badge پلتفرم — نمایش نام پلتفرم کنار هر لینک
- نمایش تعداد کل لینکها به صورت Badge روی تب
- دکمه Refresh برای بارگذاری مجدد
- Xray Service — آیا سرویس فعاله؟ (Badge سبز/قرمز)
- Uptime — چند وقته سرویس روشنه
- Domain — دامنه فعلی سرور
- SSL Expiry — تاریخ انقضای گواهی SSL
- ریاستارت Xray — دکمه ریاستارت با Dialog تایید
- نمایش کامل فایل
config.jsonسرور Xray - فرمت JSON با syntax highlight
- اسکرولبار برای فایلهای بزرگ
یه صفحه بررسی و نصب خودکار که مطمئن میشه سرور آماده کار هست. هر فاز یه کارت جداگانه با نشانگر وضعیت (Complete/Pending).
- بررسی نوع OS (Ubuntu, Debian, ...)
- دسترسی Root
- نصب بودن Node.js + نسخه
- نصب بودن npm
- نصب بودن git
- نصب بودن curl
- بررسی + دکمه نصب خودکار برای هر ابزار:
- Xray-core (+ نمایش نسخه)
- acme.sh (صدور SSL)
- Vercel CLI
- Netlify CLI
- Azure CLI
- Deno / deployctl
- Railway CLI
- Fastly CLI
- دکمه حذف (Uninstall) — با Dialog تایید
- هر ابزار نصبشده تیک سبز + نسخه، نصبنشده ضربدر قرمز + دکمه Install
- دامنه فعلی
- مسیر فایل Certificate
- وجود فایل Certificate
- تاریخ انقضای SSL
- اعتبار گواهی (Valid/Invalid)
- صدور گواهی جدید — فیلد دامنه + دکمه Issue Certificate
- سرویس Xray در حال اجراست؟
- آپتایم سرویس
- فایل کانفیگ وجود داره؟
پراگرس بار بالای صفحه: 2/4 Phases Complete با نمایش تعداد فازهای تکمیلشده
مانیتورینگ لحظهای منابع سرور با نمودارهای زنده.
- CPU — درصد مصرف + نمودار Sparkline زنده (۶۰ نقطه)
- RAM — مصرف / کل (مثل
1.2 GB / 3.8 GB) + درصد + نوار پراگرس رنگی - شبکه — سرعت دانلود (↓) و آپلود (↑) لحظهای به صورت bytes/sec
- دیسک — مصرف / کل + درصد + نوار پراگرس
- آپتایم — مدت زمان روشن بودن سرور
- نوار پراگرس رنگی: آبی (عادی)، نارنجی (هشدار > ۷۰٪)، قرمز (بحرانی > ۸۵٪)
- آپدیت خودکار هر چند ثانیه
- تغییر زبان — سوییچ بین English و فارسی (با ToggleGroup)
- تغییر رمز ادمین — فرم ۳ فیلدی:
- رمز فعلی
- رمز جدید (حداقل ۶ کاراکتر)
- تکرار رمز جدید (باید مطابقت داشته باشه)
- تم روشن / تاریک (دکمه در Header)
ابزار خط فرمان برای وقتی که SSH زدی به سرور و نمیخوای مرورگر باز کنی.
╔══════════════════════════════════════════════╗
║ XHTTP Panel — Management ║
╠══════════════════════════════════════════════╣
║ URL: http://your-domain.com/a3f9c1d2e4 ║
║ Path: /a3f9c1d2e4 ║
║ Local: http://localhost:3000/a3f9c1d2e4 ║
╚══════════════════════════════════════════════╝
[1] Reset admin password
[2] Change web path
[q] Quit
xhttp-info— منوی اینتراکتیو با رنگهای ANSIxhttp-info info— فقط نمایش آدرس و مسیر پنلxhttp-info reset-password— ریست رمز ادمین (حداقل ۶ کاراکتر)xhttp-info set-path— تغییر مسیر مخفی وب (۴ تا ۳۲ کاراکتر، فقطa-z 0-9 _ -)- ارتباط با پنل از طریق API لوکال (
127.0.0.1:3000) — فقط از خود سرور کار میکنه - بعد از تغییر path نیاز به
pm2 restart xhttp-panelهست
| لایه | چطور کار میکنه |
|---|---|
| دسترسی پنل | مسیر URL تصادفی ۱۰ کاراکتری (مثل /a3f9c1d2e4). وقتی این مسیر رو باز کنی، یه کوکی httpOnly با عمر ۷ روز ست میشه. بدون کوکی هر درخواست HTML جواب 404 میگیره — یعنی کسی که URL رو نداره اصلاً نمیفهمه پنلی وجود داره |
| احراز هویت | JWT access token (عمر ۱۵ دقیقه) + refresh token (عمر ۷ روز). رمز عبور با bcrypt (۱۰ round) هش میشه |
| رمزنگاری توکن | هر توکن API با AES-256-GCM رمز میشه. کلید ۳۲ بایتی رندوم خودکار ساخته میشه و توی فایل .encryption-key با permission 600 ذخیره میشه. هر نصب کلید مختص خودش رو داره |
| محافظت CLI | اندپوینتهای /api/v1/local/* فقط از 127.0.0.1 و ::1 جواب میدن. از بیرون سرور اصلاً قابل دسترسی نیستن |
| فایلهای استاتیک | JS، CSS، فونتها و favicon بدون محدودیت serve میشن. ولی هیچ فایل HTML بدون کوکی معتبر تحویل داده نمیشه |
| محافظت فرم | Zod validation هم سمت کلاینت و هم سمت سرور. ورودیها sanitize میشن |
+------------------+
| Browser (UI) |
+--------+---------+
|
Nginx (80 / 2053 SSL)
|
+-------------+-------------+
| |
Secret Path Gate Xray (443)
/{random_path} VLESS+XHTTP+TLS
|
+--------+--------+
| Express API | Port 3000 (localhost)
| (Node.js) |
+--------+--------+
|
+-----------+-----------+
| | |
SQLite Services SSE Streams
(panel.db) (deploy) (progress)
|
+------+--------+--------+------+------+
| | | | | |
Vercel Netlify Azure Fastly Deno Railway
| لایه | مکانیزم |
|---|---|
| دسترسی پنل | مسیر تصادفی (/{web_path}) یه کوکی httpOnly ست میکنه — بدون کوکی = 404 |
| احراز هویت API | JWT access + refresh token با هش bcrypt |
| ذخیره توکنها | رمزنگاری AES-256-GCM با کلید اختصاصی هر نصب |
| دسترسی CLI | میدلور localOnly — فقط از 127.0.0.1 جواب میده |
| فایلهای استاتیک | JS/CSS عمومی، تمام HTML نیاز به کوکی داره |
| بخش | تکنولوژی |
|---|---|
| Runtime | Node.js 20+ |
| Framework | Express 4 |
| زبان | TypeScript 5.7 |
| دیتابیس | SQLite (better-sqlite3) |
| احراز هویت | JWT + bcrypt |
| رمزنگاری | AES-256-GCM (node:crypto) |
| QR Code | qrcode |
| بخش | تکنولوژی |
|---|---|
| Framework | Next.js 15 (Static Export) |
| استایل | Tailwind CSS 3.4 |
| کامپوننتها | shadcn/ui (۵۰+ کامپوننت) |
| فرمها | React Hook Form + Zod |
| چندزبانه | EN / FA |
| آیکونها | Lucide React |
| نوتیفیکیشن | Sonner |
اگه نصب خودکار بالا کار نکرد:
# گرفتن آدرس پنل
xhttp-info info
# خروجی:
# URL: http://your-domain.com/a3f9c1d2e4
# Path: /a3f9c1d2e4
# Local: http://localhost:3000/a3f9c1d2e4- آدرس پنل رو توی مرورگر باز کن
- با اطلاعات پیشفرض وارد شو:
admin/admin - فوری رمز رو عوض کن از بخش تنظیمات
# HTTP — پنل
server {
listen 80 default_server;
server_name _;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
# HTTPS — پنل (اختیاری، توصیهشده)
server {
listen 2053 ssl default_server;
server_name _;
ssl_certificate /path/to/fullchain.cer;
ssl_certificate_key /path/to/private.key;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}پورت 443 مستقیماً توسط Xray برای VLESS+XHTTP+TLS استفاده میشه.
| متغیر | پیشفرض | توضیح |
|---|---|---|
PORT |
3000 |
پورت سرور |
JWT_SECRET |
خودکار | کلید امضای access token |
JWT_REFRESH_SECRET |
خودکار | کلید امضای refresh token |
ENCRYPTION_KEY_PATH |
./data/.encryption-key |
مسیر کلید AES-256 |
DB_PATH |
./data/panel.db |
مسیر دیتابیس SQLite |
INSTALLER_ENV_PATH |
/etc/xhttp-installer/info.env |
فایل وضعیت نصب |
XRAY_CONFIG_PATH |
/usr/local/etc/xray/config.json |
مسیر کانفیگ Xray |
| متد | مسیر | توضیح |
|---|---|---|
POST |
/api/v1/auth/login |
ورود (JWT برمیگردونه) |
POST |
/api/v1/auth/refresh |
تمدید access token |
| متد | مسیر | توضیح |
|---|---|---|
GET |
/api/v1/dashboard/stats |
آمار دیپلویها |
GET |
/api/v1/dashboard/recent-deploys |
دیپلویهای اخیر |
| متد | مسیر | توضیح |
|---|---|---|
GET |
/api/v1/tokens |
لیست توکنها |
POST |
/api/v1/tokens |
افزودن توکن رمزنگاریشده |
DELETE |
/api/v1/tokens/:id |
حذف توکن |
POST |
/api/v1/tokens/:id/test |
تست اعتبار توکن |
| متد | مسیر | توضیح |
|---|---|---|
GET |
/api/v1/deploy |
لیست دیپلویها |
POST |
/api/v1/deploy/:platform |
ایجاد دیپلوی |
POST |
/api/v1/deploy/:id/redeploy |
ریدیپلوی |
DELETE |
/api/v1/deploy/:id |
حذف دیپلوی |
GET |
/api/v1/deploy/:id/health |
بررسی سلامت |
GET |
/api/v1/deploy/:id/stream |
استریم پراگرس (SSE) |
| متد | مسیر | توضیح |
|---|---|---|
GET |
/api/v1/configs/links |
تمام لینکهای کانفیگ |
GET |
/api/v1/configs/server-status |
وضعیت Xray + SSL |
| متد | مسیر | توضیح |
|---|---|---|
GET |
/api/v1/local/info |
آدرس و مسیر پنل |
POST |
/api/v1/local/reset-password |
ریست رمز ادمین |
POST |
/api/v1/local/set-web-path |
تغییر مسیر مخفی |
GPL-3.0