گیتوی فوقسبک VLESS برای دیپلوی روی Railway — فقط یک پورت، فقط یک لینک.
هیچ وابستگی خارجی ندارد — فقط کتابخانه استاندارد پایتون. مثل فایلهای raw گیتهاب: یک متن ساده که لینک را میدهد، بدون لاگین.
- VLESS روی WebSocket روی پورت 443 با TLS (از طریق دامنه Railway)
GET /وGET /subفقط یک لینک ساده برمیگرداند — بدون هیچ توکنی:
https://<domain>/sub
GET /admin— پنل ساده مثل X3-ui با رمز (پیشفرضadmin):- Settings: فقط دو تا فیلد Host و Port (مثل X3-ui) — خالی باشد یعنی auto
- دکمه Save / Reset to auto
- دکمه Run test — یک تونل WebSocket+VLESS واقعی تا
ipinfo.ioمیزند و IP خروجی را نشان میدهد - اگر
domain:portیا لینک کاملvless://در فیلد Host بچسبانید، خودش parse میکند
| فایل | وظیفه |
|---|---|
main.py |
نقطه شروع: شنود پورت و تشخیص پروتکل (HTTP یا VLESS خام) |
vless.py |
هندلر پروتکل VLESS (TCP و UDP) |
httpd.py |
سرور HTTP مینیمال و مسیریابی |
ws.py |
وبسوکت مینیمال بدون هیچ کتابخانهای |
links.py |
ساخت لینک و انتخاب host/port عمومی |
admin.py |
پنل /admin + ذخیره تنظیمات + تست تونل |
| متغیر | پیشفرض | توضیح |
|---|---|---|
UUID |
ساخته میشود | حتماً ست کنید، وگرنه بعد از هر دیپلوی UUID عوض میشود |
PORT |
8080 |
پورت اصلی — Railway خودش ست میکند |
DOMAIN |
— | دامنه عمومی؛ خالی باشد از Host خود ریکوئست پر میشود |
ADMIN_PASSWORD |
admin |
رمز ورود پنل /admin |
TAG |
ALIREZArely |
اسم کانفیگ داخل لینک |
WS_PATH |
/ws |
مسیر WebSocket داخل لینک |
DATA_DIR |
/data |
مسیر ذخیره UUID و تنظیمات پنل |
اولویت host/port لینک: تنظیمات ذخیرهشده در /admin ← DOMAIN ← Host خود ریکوئست.
پورت 443 با TLS ساخته میشود؛ پورت دیگر بدون TLS.
نکته: روی Railway اگر هر متغیر RAILWAY_* وجود داشته باشد، برنامه روی PORT + 8080 + 443
همزمان listen میکند تا دامنه عمومی همیشه به برنامه برسد — فرقی نمیکند Railway پورت را
چه مقداری inject کند. نیازی به TCP Proxy در Railway نیست.
- این ریپو را Fork کنید و روی Railway از روی آن دیپلوی کنید.
- متغیر
UUIDرا ست کنید (یا یک Volume به مسیر/dataوصل کنید). - لینک:
https://<domain>/sub - (اختیاری) رمز پنل: متغیر
ADMIN_PASSWORDرا ست کنید؛ پنل درhttps://<domain>/admin. - (اختیاری) برای ماندگاری تنظیمات بعد از هر دیپلوی، یک Volume به
/dataوصل کنید.
railway.toml: build با Dockerfile وwatchPatterns— تغییرtests/،README.mdوtask.txtباعث دیپلوی مجدد نمیشود..dockerignore: در build فقط خود فایلهای py آپلود میشوند.- بدون
requirements.txt— چون هیچ پکیج خارجی وجود ندارد، مرحله pip حذف شده است.
UUID=11111111-2222-3333-4444-555555555555 python main.py
curl http://127.0.0.1:8080/subpython tests/test_gateway.py