[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-96214":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":8,"htmlUrl":8,"language":9,"languages":8,"totalLinesOfCode":8,"stars":10,"forks":11,"watchers":12,"openIssues":13,"contributorsCount":13,"subscribersCount":13,"size":13,"stars1d":13,"stars7d":13,"stars30d":13,"stars90d":13,"forks30d":13,"starsTrendScore":13,"compositeScore":14,"rankGlobal":8,"rankLanguage":8,"license":8,"archived":15,"fork":15,"defaultBranch":16,"hasWiki":15,"hasPages":15,"topics":17,"createdAt":8,"pushedAt":8,"updatedAt":18,"readmeContent":19,"aiSummary":20,"trendingCount":13,"starSnapshotCount":13,"syncStatus":21,"lastSyncTime":22,"discoverSource":23},96214,"3x-ui_runonflux","x4gpanell\u002F3x-ui_runonflux","x4gpanell",null,"Go",151,310,113,0,7.48,false,"main",[],"2026-09-21 02:04:30","# دیپلوی چندمسیره‌ی 3X-UI روی Orbit \u002F Flux\n\nاین پروژه پنل رسمی [3X-UI](https:\u002F\u002Fgithub.com\u002FMHSanaei\u002F3x-ui) (پنل مدیریت Xray-core)\nرو داخل یک کانتینر روی [Orbit](https:\u002F\u002Forbit.runonflux.com)، پلتفرم دیپلوی Flux، اجرا می‌کنه.\n\nFlux\u002FOrbit به‌صورت پیش‌فرض فقط **یک پورت عمومی با TLS** رو از یک کانتینر به بیرون\nباز می‌کنه (همون \"App Port\"). چون پنل مدیریت، اینباند(های) پروکسی Xray، و سرور\nSubscription پنل هر سه باید از بیرون در دسترس باشن، این پروژه یه ری‌ورس‌پروکسی\nکوچیک به زبان Go جلوی همه‌شون اجرا می‌کنه که همه‌چی رو روی همون یک پورت عمومی،\nبا **روتینگ بر اساس مسیر (Path) درخواست HTTP**، مالتی‌پلکس (تفکیک) می‌کنه.\n\n## نحوه‌ی کار\n\n1. موقع اولین اجرا، `main.go` باینری رسمی و از‌پیش‌بیلدشده‌ی 3X-UI\n   (`x-ui-linux-amd64.tar.gz`) رو دانلود می‌کنه، به‌جای این‌که خودِ 3X-UI رو از\n   سورس کامپایل کنه (چون این محیط نمی‌تونه فرانت‌اند Vue پروژه رو بیلد کنه که\n   یه مرحله‌ی `npm run build` قبل از `go build` لازم داره).\n2. باینری واقعی `x-ui` رو روی یک پورت **فقط-داخلی** (از طریق env var\n   `XUI_PORT`) بالا میاره — پورتی که مستقیماً از اینترنت در دسترس نیست.\n3. سرور HTTP سبک خودش رو روی **پورت عمومی** بالا میاره. این سرور مسیر (Path)\n   درخواست ورودی رو چک می‌کنه و اونو (reverse proxy) به سرویس داخلی درست\n   هدایت می‌کنه:\n\n   | پیشوند مسیر (Path) | به کجا فوروارد می‌شه (پورت داخلی) | کاربرد |\n   |---|---|---|\n   | `\u002Fxvpnws\u002F` | اینباند VLESS+WebSocket ایکس‌ری | ترافیک پروکسی |\n   | `\u002Fsub\u002F` | سرور Subscription پنل | لینک‌های Subscription |\n   | *(هر چیز دیگه)* | پنل مدیریت 3X-UI | پنل وب ادمین |\n\nچون `net\u002Fhttp\u002Fhttputil.ReverseProxy` توی Go به‌صورت بومی از هدر\n`Upgrade: websocket` پشتیبانی می‌کنه (بعد از تکمیل هندشیک ۱۰۱، خودِ کانکشن رو\nHijack و بایت‌ها رو دوطرفه رد و بدل می‌کنه)، این روش به‌صورت شفاف از ترابرهای\nمبتنی بر WebSocket ایکس‌ری هم پشتیبانی می‌کنه، بدون نیاز به کد اضافه.\n\n## پیش‌نیازها سمت Orbit\u002FFlux\n\n- مقدار **App Port** باید دقیقاً با `publicPort` توی `main.go` یکی باشه\n  (الان: `2053`).\n- کانتینر باید به `github.com` دسترسی خروجی داشته باشه تا موقع اولین اجرا\n  بتونه ریلیز 3X-UI رو دانلود کنه.\n\n## پیش‌نیازها داخل پنل 3X-UI\n\nبرای هر اینباندی که می‌سازی، فیلد **Port** باید دقیقاً با یکی از پورت‌های\nداخلی تعریف‌شده توی `main.go` یکی باشه، و **Path** (زیر تنظیمات Stream) باید\nدقیقاً همون پیشوند رو داشته باشه (با اسلش اول و آخر). Security روی هر\nاینباند باید `none` باشه، چون TLS از قبل توسط edge خودِ Flux باز شده و به این\nکانتینر نمی‌رسه.\n\nبرای سرویس Subscription، فیلد **Settings → Subscription → Reverse Proxy\nURI** رو روی `https:\u002F\u002F\u003Cدامنه‌ی-تو>.app.runonflux.io\u002Fsub\u002F` بذار تا لینک‌های\nSubscription که پنل می‌سازه، به مسیر عمومی اشاره کنن، نه به پورت فقط-داخلی.\n\n## اضافه کردن یک مسیر جدید\n\nبرای باز کردن یک اینباند دیگه‌ی ایکس‌ری روی همون پورت عمومی:\n\n1. یه پورت داخلی خالی و یه پیشوند مسیر یکتا انتخاب کن.\n2. هر دو رو به slice به اسم `routes` توی `main.go` اضافه کن.\n3. Commit و Push کن، بعد توی Orbit دکمه‌ی **Pull & Build** رو بزن (نه فقط\n   Redeploy — چون باینری Go باید دوباره کامپایل بشه).\n4. توی پنل، یک اینباند جدید با دقیقاً همون پورت و همون مسیر بساز.\n\n## محدودیت‌ها\n\n- فقط ترابرهای مبتنی بر HTTP (WebSocket، و تئوریاً XHTTP) رو می‌شه با این\n  روش مالتی‌پلکس کرد، چون روتینگ بر اساس بررسی مسیر (Path) درخواست HTTP\n  انجام می‌شه.\n- اینباندهای TCP خام و REALITY با این معماری روی پورت عمومی اصلی **سازگار\n  نیستن**، چون TLS از قبل توسط edge خودِ Flux قبل از رسیدن درخواست ساده‌ی\n  HTTP به این پروکسی باز شده — REALITY به ClientHello اصلی و دست‌نخورده‌ی\n  TLS نیاز داره، و TCP خام هم اصلاً مسیر HTTP‌ای برای روتینگ نداره. اگه\n  دیپلویت یک پورت خام دوم هم باز کرده باشه (توی تب **Specifications** داخل\n  FluxCloud، بخش `Container Ports` رو چک کن)، می‌شه یک اینباند TCP خام یا\n  REALITY رو مستقیماً به همون پورت وصل کرد و کاملاً از این پروکسی رد نشد.\n\n## نکته‌ی امنیتی\n\nاین یک دیپلوی شخصی برای استفاده‌ی خودمیزبانیه. اطلاعات ورود پنل، UUID\nکلاینت‌ها، و لینک‌های Subscription رو خصوصی نگه دار.\n","这是一个为 Flux\u002FOrbit 平台定制的轻量级反向代理工具，用于在单端口 TLS 环境下复用 3X-UI（Xray-core 管理面板）的多个服务。它通过 HTTP 路径路由（Path-based routing）将同一公网端口的请求分发至内部不同服务：`\u002Fxvpnws\u002F` 转发 WebSocket 代理流量、`\u002Fsub\u002F` 转发订阅服务、其余路径转发至管理面板。项目使用 Go 编写，内置 `net\u002Fhttp\u002Fhttputil.ReverseProxy`，原生支持 WebSocket 协议透传，无需额外编译前端，自动下载预构建的 3X-UI 二进制。适用于在受限端口暴露能力的去中心化容器平台（如 RunOnFlux）上部署 Xray 多功能代理面板。",2,"2026-09-12 02:30:08","CREATED_QUERY"]