نصب پنل
پنل — xray-panel/backend · نود — xray-panel/node · صفحه اشتراک — xray-panel/subscription-page
پنل XLADA مؤلفه اصلی است: کاربران، نودها، اشتراکها، قالبها،
آمار و API. این پنل روی یک سرور با docker compose نصب میشود: پنل،
پایگاه داده و کش با سه کانتینر بالا میآیند و نیازی به build ندارند.
چه چیزهایی لازم است:
- هاستی با Docker و Docker Compose — حداقل 2 هسته، 4 گیگابایت RAM و 20 گیگابایت دیسک؛ جزئیات در بخش نیازمندیها؛
- دامنهای که رکورد A آن از قبل به این هاست اشاره میکند — در مثالها
panel.example.com؛ - پروکسی معکوس با TLS: بدون آن پنل کار نمیکند.
Compose شبکه xpanel-network و والیوم remnawave-db-data را میسازد:
| کانتینر | ایمیج | چه میکند |
|---|---|---|
xpanel | ghcr.io/xray-panel/backend:latest | رابط کاربری و API روی 127.0.0.1:3000 |
xpanel-db | postgres:18.4 | پایگاه داده |
xpanel-redis | valkey/valkey:9-alpine | کش و صفها |
نصب Docker
sudo curl -fsSL https://get.docker.com | sh
گام 1 — فایلهای لازم را دانلود کنید
یک دایرکتوری بسازید و فایل compose و نمونه محیط را از مخزن پنل دانلود کنید:
mkdir /opt/xlada && cd /opt/xlada
curl -o docker-compose.yml https://raw.githubusercontent.com/xray-panel/backend/main/docker-compose-prod.yml
curl -o .env https://raw.githubusercontent.com/xray-panel/backend/main/.env.sample
نیازی به ویرایش docker-compose.yml نیست: پورتها، والیومها، شبکه و محدودیتها
از قبل در آن توصیف شدهاند. همه تنظیمات در .env قرار دارند.
گام 2 — فایل .env را تنظیم کنید
اسرار و دامنهها را با دستورهای آماده جایگذاری کنید:
cd /opt/xlada
# راز برنامه: هش رمزهای عبور، JWT، رمزنگاری TOTP.
sed -i "s/^APP_SECRET=.*/APP_SECRET=$(openssl rand -hex 64)/" .env
# رمز عبور PostgreSQL و همان رمز درون DATABASE_URL.
pw=$(openssl rand -hex 24) \
&& sed -i "s/^POSTGRES_PASSWORD=.*/POSTGRES_PASSWORD=$pw/" .env \
&& sed -i "s|^\(DATABASE_URL=\"postgresql://postgres:\)[^@]*\(@.*\)|\1$pw\2|" .env
# دامنههای پنل و اشتراک.
sed -i "s|^PANEL_DOMAIN=.*|PANEL_DOMAIN=https://panel.example.com|" .env
sed -i "s|^FRONT_END_DOMAIN=.*|FRONT_END_DOMAIN=https://panel.example.com|" .env
sed -i "s|^SUB_PUBLIC_DOMAIN=.*|SUB_PUBLIC_DOMAIN=panel.example.com/api/sub|" .env
# دسترسی به متریکهای Prometheus.
sed -i "s/^METRICS_USER=.*/METRICS_USER=xpanel/" .env
sed -i "s/^METRICS_PASS=.*/METRICS_PASS=$(openssl rand -hex 24)/" .env
chmod 600 .env
| متغیر | چه چیزی وارد کنید |
|---|---|
APP_SECRET | نتیجه openssl rand -hex 64 |
POSTGRES_PASSWORD | رمز عبور تصادفی؛ همان رمز در DATABASE_URL جایگذاری شده است |
DATABASE_URL | هاست remnawave-db — نام سرویس در compose، نیازی به تغییر آن نیست |
PANEL_DOMAIN | https://panel.example.com |
FRONT_END_DOMAIN | https://panel.example.com — مبدأیی که درخواستهای CORS برای آن مجاز است |
SUB_PUBLIC_DOMAIN | panel.example.com/api/sub — بدون https:// و بدون اسلش در انتها |
METRICS_USER, METRICS_PASS | نام کاربری و رمز عبور basic auth برای http://127.0.0.1:3001/metrics |
هش رمزهای عبور، JWT و رمزنگاری راز TOTP به APP_SECRET وابستهاند. پس از
نخستین راهاندازی نمیتوان آن را تغییر داد: ورود از کار میافتد و رازهای TOTP
ناخوانا میشوند. آن را یکبار تولید و ذخیره کنید.
بدون METRICS_USER و METRICS_PASS کانتینر پنل بالا نمیآید. بررسی کامل
متغیرها — در بخش متغیرهای محیطی.
گام 3 — کانتینرها را راهاندازی کنید
docker compose up -d && docker compose logs -f -t
در نخستین راهاندازی پنل خودش مهاجرتها را اعمال و پایگاه داده را پر میکند. راهاندازی موفق چنین به نظر میرسد:
xpanel | XLADA Backend v1.1.7
xpanel | Nest application successfully started
با Ctrl+C از لاگها خارج شوید — کانتینرها به کار خود ادامه میدهند. وضعیت را
بررسی کنید:
docker compose ps
هر سه کانتینر — xpanel، xpanel-db، xpanel-redis — باید در
وضعیت running (healthy) باشند. اگر xpanel دوباره راهاندازی میشود، علت را
در لاگهای آن ببینید:
docker compose logs --tail=100 xpanel
پروکسی معکوس و HTTPS
پنل فقط به localhost گوش میدهد: 127.0.0.1:3000 — رابط کاربری و API،
127.0.0.1:3001 — متریکهای Prometheus. nginx یا وبسرور دیگری آن را به بیرون
ارائه میدهد و نیازی به باز کردن پورتهای 3000 و 3001 نیست. تا این مرحله رکورد A
دامنه باید از قبل به هاست اشاره کند و پورت 80 آزاد باشد: وبسرور روی آن به
بررسی Let's Encrypt پاسخ میدهد.
در کد پنل میانافزاری وجود دارد که اگر درخواست بدون هدرهای
X-Forwarded-For و X-Forwarded-Proto: https برسد، اتصال را قطع میکند. بدون
پروکسی معکوس با TLS پنل کار نمیکند.
پیکربندیهای کامل با همه هدرها و WebSocket — در بخش پروکسی معکوس: شامل nginx، Caddy، Angie، Traefik و Cloudflare Tunnel. کوتاهترین راه — nginx: پیکربندی آماده، گواهی Let's Encrypt و بررسی. پس از تنظیم مطمئن شوید که پروکسی پنل را ارائه میدهد:
curl -sI https://panel.example.com | head -3
نخستین ورود
https://panel.example.com را باز کنید — پنل پیشنهاد ساخت مدیر را میدهد.
نام کاربری و رمز عبور را وارد کنید.
الزامات رمز عبور: حداقل 24 کاراکتر، و حتماً حروف کوچک، حروف بزرگ
و رقم. مثال: XladaProd2026SecurePass!.
بلافاصله پس از ورود یک API-توکن بسازید: Settings → API Tokens → Create token. مقدار آن فقط یکبار نشان داده میشود. توکن برای صفحه اشتراک و یکپارچگیهای خارجی لازم است.
گامهای بعدی
- نصب نود — اتصال سرور پروکسی به پنل.
- پروکسی معکوس — پیکربندی آماده برای وبسرور شما.
- صفحه اشتراک — ارائه آراسته اشتراکها.
- امنیت پنل — چه چیزی از قبل محافظتشده است و چه نکاتی را باید به خاطر داشت.