رفتن به محتوا

سفارشی‌سازی وب

Xray Checker امکان سفارشی‌سازی کامل رابط وب را فراهم می‌کند. می‌توانید قالب پیش‌فرض را جایگزین کنید، استایل‌های سفارشی اضافه کنید، لوگو و favicon را تغییر دهید و هر فایل استاتیک دیگری اضافه کنید.

فعال‌سازی فایل‌های سفارشی

مسیر پوشه فایل‌های سفارشی را مشخص کنید:

Terminal window
# متغیر محیطی
WEB_CUSTOM_ASSETS_PATH=/path/to/custom
# فلگ CLI
xray-checker --web-custom-assets-path=/path/to/custom

اگر مسیر تنظیم شده و پوشه وجود داشته باشد، فایل‌های سفارشی در زمان راه‌اندازی بارگذاری می‌شوند.

ساختار پوشه

فایل‌های خود را در یک پوشه مسطح قرار دهید (بدون زیرپوشه):

custom/
├── index.html # جایگزینی کامل قالب (اختیاری)
├── logo.svg # لوگوی واحد برای هر دو تم (اختیاری)
├── logo.png # لوگوی واحد PNG (اختیاری)
├── logo-dark.svg # لوگو برای تم تاریک (اختیاری)
├── logo-dark.png # لوگو برای تم تاریک PNG (اختیاری)
├── logo-light.svg # لوگو برای تم روشن (اختیاری)
├── logo-light.png # لوگو برای تم روشن PNG (اختیاری)
├── favicon.ico # جایگزینی favicon (اختیاری)
├── custom.css # استایل‌های اضافی، به‌صورت خودکار تزریق می‌شوند (اختیاری)
└── any-file.ext # در /static/any-file.ext قابل دسترسی است

فایل‌های لوگو

شما می‌توانید لوگو را به دو روش سفارشی کنید:

  1. لوگوی واحد — فایل logo.svg یا logo.png را برای استفاده از یک لوگو در هر دو تم ارائه دهید
  2. لوگوهای خاص تم — فایل‌های logo-dark.svg/logo-dark.png و logo-light.svg/logo-light.png را برای لوگوهای متفاوت ارائه دهید

ترتیب اولویت (اولین یافت شده استفاده می‌شود):

  1. logo-dark.svg / logo-light.svg (SVG خاص تم)
  2. logo-dark.png / logo-light.png (PNG خاص تم)
  3. logo.svg (SVG جهانی)
  4. logo.png (PNG جهانی)

استایل‌های سفارشی (custom.css)

ساده‌ترین راه برای تغییر ظاهر. اگر custom.css وجود داشته باشد، به‌صورت خودکار بعد از استایل‌های پیش‌فرض بارگذاری می‌شود.

متغیرهای CSS

رنگ‌های تم را با استفاده از متغیرهای CSS بازنویسی کنید:

:root {
/* رنگ‌های پس‌زمینه */
--bg-primary: #0a0a0f;
--bg-secondary: #12121a;
--bg-tertiary: #1a1a24;
/* رنگ‌های متن */
--text-primary: #f4f4f5;
--text-secondary: #a1a1aa;
--text-muted: #71717a;
/* رنگ‌های تأکیدی */
--color-green: #22c55e;
--color-red: #ef4444;
--color-orange: #f97316;
/* حاشیه */
--border: #27272a;
}

مثال: تم روشن

:root {
--bg-primary: #ffffff;
--bg-secondary: #f8f9fa;
--bg-tertiary: #e9ecef;
--text-primary: #212529;
--text-secondary: #495057;
--text-muted: #6c757d;
--border: #dee2e6;
}

مثال: اندازه لوگو

.header-logo img {
width: 48px;
height: 48px;
}

جایگزینی کامل قالب (index.html)

برای کنترل کامل، فایل index.html خودتان را ارائه دهید. این یک قالب Go با دسترسی به تمام داده‌های صفحه است.

سینتکس قالب Go

{{ .Variable }} <!-- خروجی متغیر -->
{{ if .Condition }}...{{ end }}
{{ range .Array }}...{{ end }}
{{ formatLatency .Latency }} <!-- فرمت به "123ms" یا "n/a" -->

متغیرهای موجود

PageData (شیء ریشه)

متغیرنوعتوضیحات
.Versionstringنسخه Xray Checker
.Hoststringهاست سرور
.Portstringپورت سرور
.CheckIntervalintفاصله بررسی پروکسی به ثانیه
.Timeoutintمهلت بررسی پروکسی به ثانیه
.CheckMethodstringروش بررسی: ip، status یا download
.IPCheckUrlstringURL برای بررسی IP
.StatusCheckUrlstringURL برای بررسی وضعیت
.DownloadUrlstringURL برای بررسی دانلود
.SimulateLatencyboolآیا شبیه‌سازی تأخیر فعال است
.SubscriptionUpdateboolآیا به‌روزرسانی خودکار اشتراک فعال است
.SubscriptionUpdateIntervalintفاصله به‌روزرسانی اشتراک به ثانیه
.StartPortintشماره اولین پورت پروکسی
.Instancestringبرچسب instance برای متریک‌ها
.PushUrlstringURL پوش‌گیت‌وی Prometheus
.ShowServerDetailsboolآیا IP و پورت سرورها نمایش داده شود
.IsPublicboolآیا حالت عمومی فعال است
.SubscriptionNamestringنام اشتراک برای نمایش
.Endpoints[]EndpointInfoآرایه پروکسی‌ها

EndpointInfo (هر آیتم در .Endpoints)

متغیرنوعدسترسیتوضیحات
.Namestringهمیشهنام پروکسی
.StableIDstringهمیشهشناسه یکتای پروکسی
.Indexintهمیشهایندکس پروکسی (از 0)
.Statusboolهمیشهtrue اگر آنلاین
.Latencytime.Durationهمیشهتأخیر پاسخ
.ServerInfostringوقتی ShowServerDetails && !IsPublicآدرس و پورت سرور
.ProxyPortintوقتی ShowServerDetails && !IsPublicپورت محلی پروکسی
.URLstringوقتی !IsPublicURL اندپوینت وضعیت

توابع قالب

تابعتوضیحاتمثال
formatLatencyفرمت مدت به میلی‌ثانیه{{ formatLatency .Latency }}"123ms" یا "n/a"

رندر شرطی

<!-- فقط در حالت غیرعمومی نمایش بده -->
{{ if not .IsPublic }}
<a href="{{ .URL }}">Config</a>
{{ end }}
<!-- نمایش جزئیات سرور در صورت فعال بودن -->
{{ if .ShowServerDetails }}
<span>{{ .ServerInfo }}</span>
{{ end }}
<!-- حلقه روی پروکسی‌ها -->
{{ range .Endpoints }}
<div class="{{ if .Status }}online{{ else }}offline{{ end }}">
{{ .Name }} - {{ formatLatency .Latency }}
</div>
{{ end }}

مثال قالب حداقلی

<!DOCTYPE html>
<html>
<head>
<title>{{ if .SubscriptionName }}{{ .SubscriptionName }}{{ else }}وضعیت{{ end }}</title>
</head>
<body>
<h1>وضعیت پروکسی</h1>
{{ range .Endpoints }}
<div>
{{ if .Status }}✓{{ else }}✗{{ end }}
{{ .Name }}
({{ formatLatency .Latency }})
</div>
{{ end }}
</body>
</html>

مثال Docker

services:
xray-checker:
image: kutovoys/xray-checker:latest
volumes:
- ./custom:/app/custom:ro
environment:
- WEB_CUSTOM_ASSETS_PATH=/app/custom
- SUBSCRIPTION_URL=https://...

ساختار پوشه‌ها:

my-project/
├── docker-compose.yml
└── custom/
├── logo.svg # یا logo-dark.svg + logo-light.svg
├── favicon.ico
└── custom.css

لاگ‌های راه‌اندازی

هنگام بارگذاری فایل‌های سفارشی، خواهید دید:

INFO Custom assets enabled: /app/custom
INFO Custom assets loaded:
INFO ✓ logo.svg
INFO ✓ custom.css
INFO Using default template

یا با قالب سفارشی:

INFO Custom assets loaded:
INFO ✓ index.html
INFO ✓ custom.css
INFO Using custom template: index.html

خطاها

خطادلیل
custom assets directory does not existمسیر تنظیم شده اما پوشه پیدا نشد
failed to parse custom templateسینتکس نامعتبر قالب Go در index.html

برنامه راه‌اندازی نمی‌شود اگر مسیر فایل‌های سفارشی تنظیم شده اما نامعتبر باشد.