3x-ui
این ریپازیتوری، 3x-ui رو به همراه یک nginx reverse proxy اجرا میکند که هم پنل وب و هم اینباند VLESS/WebSocket شما را از طریق یک پورت واحد (همان پورتی که Railway اختصاص میدهد) در دسترس میگذارد — دقیقاً مثل معماری RVG.
چرا این کار لازم بود؟
بهصورت پیشفرض، 3x-ui پنل وب را روی یک پورت و هر Inbound را روی پورت دیگری اجرا میکند. Railway Public Domain فقط به یک پورت داخلی وصل میشود، پس یا پنل در دسترس بود یا Inbound، نه هر دو. این نسخه با اضافه کردن nginx، هر دو را زیر یک پورت مدیریت میکند.
مراحل دیپلوی
۱. ریپازیتوری بسازید
یک ریپازیتوری جدید در گیتهاب بسازید (خصوصی یا عمومی، فرقی ندارد) و این سه فایل را در ریشهی آن قرار دهید:
Dockerfilenginx.conf.templatestart.sh
۲. در Railway
- New Project → Deploy from GitHub repo و همین ریپازیتوری را انتخاب کنید
- Railway بهطور خودکار
Dockerfileرا تشخیص و بیلد میکند - بعد از اتمام دیپلوی، به Settings → Networking بروید و Generate Domain بزنید (فقط همین یک دامنه لازم است، نیازی به Target Port خاص نیست چون nginx مستقیماً روی
$PORTگوش میدهد)
۳. اولین ورود به پنل
آدرس پنل شما این خواهد بود:
https://دامنهشما.up.railway.app/managepanel/
یوزرنیم/پسورد پیشفرض 3x-ui را وارد کنید (admin/admin) و حتماً بلافاصله از بخش تنظیمات تغییرش دهید.
۴. ساخت Inbound
در پنل، یک Inbound جدید بسازید با این تنظیمات دقیق:
| فیلد | مقدار |
|---|---|
| Protocol | VLESS |
| Listen Port | 8080 (این عدد نباید تغییر کند، چون nginx دقیقاً به همین پورت وصل است) |
| Listen IP | خالی یا 0.0.0.0 |
| Network | ws |
| Security | none |
| Path | هر مسیر دلخواه، مثلاً /cdn |
⚠️ اگر بخواهید پورت Inbound را عددی غیر از 8080 بگذارید، باید داخل فایل nginx.conf.template هم مقدار 127.0.0.1:8080 را با همان عدد جدید هماهنگ کنید و دوباره Push/Deploy کنید.
۵. ساخت لینک کلاینت
vless://UUID@دامنهشما.up.railway.app:443?encryption=none&security=tls&sni=دامنهشما.up.railway.app&fp=chrome&type=ws&host=دامنهشما.up.railway.app&path=%2Fcdn#MyConfig
جای UUID و دامنهشما و path را با مقادیر واقعی خودتان جایگزین کنید.
تست سریع (قبل از تست با v2rayNG)
در مرورگر باز کنید:
https://دامنهشما.up.railway.app/cdn
باید پیام "Bad Request" ببینید (یعنی درخواست به Xray رسیده). اگر پنل هم به همین شکل جواب داد یعنی مسیر nginx سالم است:
https://دامنهشما.up.railway.app/managepanel/
نکات مهم
- اگر چند Inbound دیگر هم بسازید، همه باید روی همین پورت داخلی 8080 باشند (چون فقط یک location در nginx به آن اشاره دارد). برای چند Inbound جدا با path های متفاوت روی همون پورت مشکلی نیست، چون از نگاه TCP یکی هستند و فقط Path داخل WebSocket آنها را از هم جدا میکند.
- دیتابیس/تنظیمات پنل (
/etc/x-ui) روی فایلسیستم موقت کانتینر است. اگر میخواهید بعد از هر Redeploy تنظیمات (کاربران، Inbound ها) پاک نشود، از بخش Volumes در Railway یک Volume به مسیر/etc/x-uiوصل کنید.
