XENITEX مستنداتDocs
بازگشت به سایتBack to site
Xenitex / مستنداتDocumentation

نصب و راه‌اندازی Xenitex روی سرور لینوکسInstalling and running Xenitex on a Linux server

این راهنما شما را از یک سرور لینوکس خالی به اولین اسکن می‌رساند: نصب Docker، دریافت کد، پیکربندی، راه‌اندازی اولیه پنل و کار روزمره با آن. هر گام را که انجام دادید علامت بزنید؛ پیشرفت شما در همین مرورگر ذخیره می‌شود.

This guide takes you from an empty Linux server to your first scan: installing Docker, fetching the code, configuring, running the first-run wizard and day-to-day use. Tick each step as you finish it; your progress is saved in this browser.

Xenitex چیستWhat is Xenitex#

Xenitex یک پلتفرم متن‌باز و فقط‌خواندنی مدیریت آسیب‌پذیری است که روی یک سرور لینوکس در شبکه خودتان اجرا می‌شود. دارایی‌ها و سرویس‌های شبکه را کشف می‌کند، آن‌ها را با داده آسیب‌پذیری تطبیق می‌دهد، به هر مسئله امتیاز ریسک می‌دهد و چرخه رسیدگی تا رفع را پیگیری می‌کند.

Xenitex is an open-source, read-only vulnerability management platform that runs on a single Linux server inside your own network. It discovers network assets and services, matches them against vulnerability data, assigns each issue a risk score and tracks the lifecycle from triage to verified fix.

استقرار از این اجزا تشکیل شده که همه با Docker Compose کنار هم اجرا می‌شوند:

A deployment consists of the following components, all run together by Docker Compose:

جزءComponentنقشRole
webپنل وب (React + Vite)، فارسی و انگلیسیWeb panel (React + Vite), Persian and English
apiAPI با Fastify روی مسیر /v1 طبق قرارداد OpenAPI 3.1Fastify API under /v1, defined by an OpenAPI 3.1 contract
workerاجرای اسکن‌ها و همگام‌سازی داده آسیب‌پذیریRuns scans and vulnerability-data sync jobs
postgresپایگاه داده PostgreSQL 16PostgreSQL 16 database
valkeyحافظه نهان (جایگزین متن‌باز Redis)Cache (open-source Redis alternative)

Xenitex هیچ تغییری روی سیستم‌های اسکن‌شده اعمال نمی‌کند و قابلیت اجرای خودکار اصلاح در آن به‌طور دائم خاموش است. برای سخت‌سازی سرورهای لینوکس از Xeniguard استفاده کنید.

Xenitex never changes the systems it scans, and its remediation executor is permanently switched off. To harden Linux servers, use Xeniguard.

پیش‌نیازهاRequirements#

  • یک سرور لینوکس ۶۴ بیتی (مجازی یا فیزیکی) که به شبکه‌هایی که می‌خواهید اسکن کنید دسترسی داشته باشد.
  • دسترسی sudo روی سرور.
  • Docker Engine و افزونه Docker Compose نسخه ۲ (دستور docker compose، نه docker-compose).
  • git و openssl.
  • مجوز کتبی برای اسکن محدوده‌هایی که تعریف می‌کنید. ویزارد راه‌اندازی این تعهد را از شما ثبت می‌کند.
  • اختیاری: دسترسی خروجی به NVD و FIRST EPSS، اگر می‌خواهید داده آسیب‌پذیری را از اینترنت به‌روز کنید.
  • A 64-bit Linux server (virtual or physical) with network reachability to the ranges you want to scan.
  • sudo access on that server.
  • Docker Engine and the Docker Compose v2 plugin (the docker compose command, not docker-compose).
  • git and openssl.
  • Written authorisation to scan the ranges you define. The setup wizard records this attestation.
  • Optional: outbound access to NVD and FIRST EPSS if you want to update vulnerability data from the internet.

اسکن شبکه‌ای که مجوزش را ندارید ممکن است غیرقانونی باشد. همیشه پیش از تعریف دامنه، تأیید مالک شبکه را بگیرید.

Scanning networks you are not authorised to test may be illegal. Always obtain the network owner's approval before defining a scope.

پیشرفت نصبInstallation progress0 / 7

01نصب DockerInstall Docker#

اگر Docker از قبل روی سرور نصب است، فقط نسخه‌ها را با دستور آخر همین بخش بررسی کنید. روی اوبونتو و دبیان ساده‌ترین راه، اسکریپت رسمی Docker است:

If Docker is already installed, just check the versions with the last command in this section. On Ubuntu and Debian the simplest route is Docker's official convenience script:

bash
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# run docker without sudo (log out and back in afterwards)
sudo usermod -aG docker $USER
newgrp docker

# both commands must succeed
docker --version
docker compose version

اگر دسترسی به get.docker.com ندارید، روی اوبونتو می‌توانید از بسته‌های خود توزیع استفاده کنید. برای توزیع‌های دیگر راهنمای رسمی Docker را دنبال کنید.

If get.docker.com is not reachable, on Ubuntu you can use the distribution's own packages. For other distributions, follow Docker's official installation guide.

bash · ubuntu
sudo apt update
sudo apt install -y docker.io docker-compose-v2 git openssl
sudo systemctl enable --now docker

اگر دریافت ایمیج‌ها از Docker Hub روی شبکه شما با خطا یا تأخیر همراه است، یک Registry Mirror در دسترس را در فایل /etc/docker/daemon.json تعریف کنید و سپس Docker را ری‌استارت کنید:

If pulling images from Docker Hub fails or times out on your network, configure a reachable registry mirror in /etc/docker/daemon.json and restart Docker:

/etc/docker/daemon.json
{
  "registry-mirrors": ["https://<your-mirror-address>"]
}
bash
sudo systemctl restart docker

02دریافت کدGet the code#

مخزن را کلون کنید و وارد پوشه استقرار مرجع شوید. همه دستورهای بعدی از همین پوشه اجرا می‌شوند.

Clone the repository and change into the reference deployment folder. Every following command runs from there.

bash
git clone https://github.com/xenitech/xenitex-scanner.git xenitex
cd xenitex/deploy/compose

به‌جای <REPOSITORY_URL> نشانی مخزن رسمی Xenitex را قرار دهید.

Replace <REPOSITORY_URL> with the address of the official Xenitex repository.

03پیکربندی .envConfigure .env#

از فایل نمونه یک کپی بسازید و دسترسی آن را فقط به خودتان محدود کنید. سپس فایل را باز کنید و هر مقدار را مرور کنید؛ توضیح هر متغیر در خود فایل نمونه آمده است.

Create a copy of the example file and restrict it to your own user. Then open it and review each value; every variable is described in the example file itself.

bash
cp .env.example .env
chmod 600 .env
nano .env

فایل .env را هرگز در Git کامیت نکنید و آن را از طریق پیام‌رسان یا ایمیل جابه‌جا نکنید.

Never commit .env to Git, and never send it over chat or email.

04ساخت SecretهاCreate secrets#

نام کاربری و رمز پایگاه داده به‌صورت Docker Secret و از فایل خوانده می‌شوند. برخلاف .env، این فایل‌ها باید پیش از اجرای Compose وجود داشته باشند. رمز را به‌صورت تصادفی بسازید:

The database user and password are provided as file-based Docker secrets. Unlike .env, these files must exist before you run Compose. Generate the password randomly:

bash
mkdir -p secrets
printf '%s' 'xenitex' > secrets/postgres_user.txt
openssl rand -base64 24 > secrets/postgres_password.txt
chmod 644 secrets/postgres_user.txt secrets/postgres_password.txt

مجوز باید 644 باشد، نه 600. کانتینر PostgreSQL این فایل را با کاربر غیر root خودش (uid 70) می‌خواند که با کاربر شما روی سرور یکی نیست؛ با 600 فایل برای کانتینر غیرقابل خواندن می‌شود و پایگاه داده بالا نمی‌آید.

The mode must be 644, not 600. The PostgreSQL container reads these files as its own non-root user (uid 70), which never matches your host user; with 600 the file is unreadable inside the container and the database will not start.

پوشه secrets/ در Git نادیده گرفته می‌شود؛ روی هر سرور یا هر کلون جدید باید دوباره ساخته شود.

The secrets/ folder is git-ignored; it has to be recreated on every server and every fresh clone.

05اجرا و بررسیStart and verify#

ایمیج‌ها را بسازید و سرویس‌ها را در پس‌زمینه اجرا کنید. اولین ساخت چند دقیقه طول می‌کشد.

Build the images and start the services in the background. The first build takes a few minutes.

bash
docker compose up -d --build

# every service should be running (or healthy)
docker compose ps

# follow the logs; Ctrl+C only stops following, not the services
docker compose logs -f

در خروجی docker compose ps ستون PORTS نشان می‌دهد پنل روی کدام پورت منتشر شده است. پنل را در مرورگر با نشانی سرور و همان پورت باز کنید. اگر پنل بالا نیامد، به بخش رفع اشکال بروید.

In the docker compose ps output, the PORTS column shows which port the panel is published on. Open the panel in a browser using the server address and that port. If it does not come up, see Troubleshooting.

برای اجرای پیش‌زمینه و دیدن مستقیم لاگ‌ها هنگام اولین آزمایش، می‌توانید -d را حذف کنید: docker compose up --build

To run in the foreground and watch logs directly during a first trial, drop -d: docker compose up --build

06دسترسی شبکه و فایروالNetwork and firewall#

پنل فقط باید از شبکه مدیریتی شما در دسترس باشد، نه از اینترنت. با ufw دسترسی را محدود کنید و به‌جای <PANEL_PORT> و <ADMIN_NET> پورت پنل و محدوده شبکه مدیریتی را بگذارید:

The panel should be reachable only from your management network, never from the internet. Restrict access with ufw, replacing <PANEL_PORT> and <ADMIN_NET> with the panel port and your management range:

bash
sudo ufw default deny incoming
sudo ufw allow OpenSSH
sudo ufw allow from <ADMIN_NET> to any port <PANEL_PORT> proto tcp
sudo ufw enable
sudo ufw status verbose

پورت‌هایی که Docker منتشر می‌کند مستقیماً در iptables باز می‌شوند و ممکن است قوانین ufw را دور بزنند. برای اطمینان، پورت پنل را در Compose فقط روی نشانی IP شبکه مدیریتی منتشر کنید، یا قوانین محدودکننده را در زنجیره DOCKER-USER اضافه کنید. سپس از یک ماشین بیرون از شبکه مدیریتی بررسی کنید که پنل در دسترس نیست.

Ports published by Docker are opened directly in iptables and can bypass ufw rules. To be sure, publish the panel port in Compose on the management interface's IP only, or add restricting rules to the DOCKER-USER chain. Then confirm from a machine outside the management network that the panel is not reachable.

پایگاه داده و Valkey نباید هیچ پورتی را بیرون از سرور منتشر کنند.

The database and Valkey should not publish any port outside the server.

07ویزارد راه‌اندازی اولیهFirst-run setup wizard#

بار اول که پنل را باز می‌کنید، ویزارد راه‌اندازی شما را گام‌به‌گام جلو می‌برد:

The first time you open the panel, the setup wizard walks you through:

  1. حساب مدیر: ساخت اولین کاربر با نقش مدیر.
  2. سازمان و منطقه زمانی: نام سازمان و منطقه زمانی برای زمان‌بندی‌ها و گزارش‌ها.
  3. TLS: انتخاب نحوه ارائه HTTPS برای پنل.
  4. دامنه اولیه: تعریف اولین محدوده مجاز و ثبت تعهد اینکه اجازه اسکن آن را دارید.
  5. پیش‌فرض‌های ایمنی: مرور و تأیید محدودیت‌های پیش‌فرض اسکن.
  6. پایان: ورود به پنل.
  1. Administrator: create the first user with the administrator role.
  2. Organisation and timezone: used for schedules and reports.
  3. TLS: choose how HTTPS is served for the panel.
  4. Initial scope: define the first authorised range and attest that you are allowed to scan it.
  5. Safety defaults: review and acknowledge the default scan limits.
  6. Complete: continue into the panel.

اگر وسط ویزارد صفحه را ببندید یا رفرش کنید، چیزی از دست نمی‌رود؛ ویزارد از اولین گام ناتمام ادامه پیدا می‌کند.

If you close or refresh the page mid-wizard, nothing is lost; it resumes at the first incomplete step.

ورود، MFA و نقش‌هاSign-in, MFA and roles#

ورود شامل رمز عبور و سپس کد یک‌بار مصرف TOTP یا کد بازیابی است. کاربری که مدیر برایش حساب ساخته، پیش از هر کاری باید رمز خودش را تعیین کند. برای نقش‌های اپراتور و مدیر، فعال‌سازی TOTP الزامی است و تا انجام نشود وارد پنل نمی‌شوند.

Sign-in takes a password followed by a TOTP code or a recovery code. A user whose account was created by an administrator must set their own password before anything else. Operators and administrators must enrol TOTP; they cannot reach the panel until they do.

نقشRoleمناسب برایIntended forMFA
بینندهViewerمدیران و ذی‌نفعانی که فقط داشبورد و گزارش می‌بینندManagers and stakeholders who only read dashboards and reportsاختیاریOptional
تحلیلگرAnalystرسیدگی به مسائل و درخواست استثناTriaging issues and requesting exceptionsاختیاریOptional
اپراتورOperatorاجرا و زمان‌بندی اسکنRunning and scheduling scansالزامیRequired
مدیرAdministratorکاربران، دامنه، نگهداری داده، پشتیبان‌گیری و تنظیماتUsers, scope, retention, backups and settingsالزامیRequired

کدهای بازیابی را هنگام فعال‌سازی MFA در جای امنی بیرون از سرور نگه دارید.

Store your recovery codes somewhere safe, off the server, when you enrol MFA.

اولین اسکنYour first scan#

پیش از اسکن، در صفحه دامنه و استثناها مطمئن شوید محدوده درست تعریف شده است. آن‌جا می‌توانید استثنا (همراه با دلیل)، پروفایل اسکن و پنجره‌های ممنوع مثل ساعت‌های پشتیبان‌گیری را هم تعریف کنید. سپس از صفحه اسکن‌ها گزینه اسکن جدید را بزنید:

Before scanning, check on the Scope & exclusions screen that the range is defined correctly. There you can also add exclusions (with a reason), scan profiles and blackout windows such as backup hours. Then start a new scan from the Scans screen:

  1. دامنه: یکی از محدوده‌های مجاز را انتخاب کنید.
  2. پروفایل: پروفایل اسکن را انتخاب کنید. پروفایل standard تماس بیشتری با دارایی‌ها دارد و فقط با تایپ CONFIRM انتخاب می‌شود.
  3. زمان: اجرای فوری یا زمان‌بندی.
  4. بازبینی: تعداد هدف، حجم بسته‌ها، مدت تخمینی، استثناها با دلیلشان، دستگاه‌های شکننده‌ای که ملایم‌تر اسکن می‌شوند و نرخ ارسال نسبت به سقف مجاز. دکمه شروع تا وقتی همه این اعداد واقعی محاسبه نشده‌اند فعال نمی‌شود.
  1. Scope: pick one of your authorised ranges.
  2. Profile: choose a scan profile. The standard profile is more intrusive and can only be selected by typing CONFIRM.
  3. When: run now or schedule.
  4. Review: target count, packet volume, estimated duration, exclusions with their reasons, fragile devices that will be scanned more gently, and pacing versus the allowed ceiling. Start scan stays disabled until every one of these is a real, computed number.

در نمای اسکن در حال اجرا می‌توانید اسکن را مکث، ادامه یا لغو کنید و خروجی خام را دانلود کنید.

From the live run view you can pause, resume or abort the scan and download the raw artifacts.

اگر اسکنی روی شبکه اثر ناخواسته گذاشت، دکمه توقف سراسری در نوار بالای پنل همه اسکن‌ها را فوراً متوقف می‌کند. این دکمه در همه صفحه‌ها در دسترس است و هر بار استفاده از آن ثبت می‌شود.

If a scan is affecting the network, the Global stop control in the panel's top bar halts all scans immediately. It is available on every screen and each use is recorded.

رسیدگی به مسائلWorking with issues#

صفحه مسائل اصلی‌ترین صفحه کار روزانه است: فهرست در یک سمت و جزئیات در سمت دیگر. با فیلترهای وضعیت و اطمینان، فهرست را محدود کنید. همه فیلترها در نشانی صفحه ذخیره می‌شوند، پس می‌توانید یک نمای فیلترشده را با همکارتان به اشتراک بگذارید.

The Issues screen is the core of day-to-day work: a list on one side and details on the other. Narrow the list with the state and confidence filters. Every filter lives in the page URL, so you can share a filtered view with a colleague.

میان‌برShortcutکارAction
j / kحرکت در فهرست بدون بارگذاری جزئیاتMove through the list without loading details
Enterباز کردن جزئیات مسئله انتخاب‌شدهOpen the selected issue's details

در جزئیات هر مسئله، توضیح امتیاز ریسک نشان می‌دهد امتیاز چطور ساخته شده: از شدت پایه، ضرب در وضعیت بهره‌برداری، میزان در معرض بودن، اهمیت دارایی و اطمینان تطبیق. شواهد هر مشاهده هم با پیوند به خروجی خام در دسترس است.

In each issue's details, the risk explainer shows how the score was built: base severity, multiplied by exploit status, exposure, asset criticality and match confidence. Evidence for every observation is shown with a link to the raw artifact.

پذیرش ریسک و راستی‌آزماییAccepting risk and verifying fixes

  • پذیرش ریسک یک درخواست استثنا می‌سازد که باید توسط کسی غیر از درخواست‌دهنده تأیید شود. استثناها تاریخ انقضا دارند و در صفحه استثناها با شمارش معکوس دیده می‌شوند.
  • راستی‌آزمایی رفع یک اسکن تأیید درخواست می‌دهد. وضعیت «رفع‌شده و تأییدشده» را فقط خود سیستم پس از این اسکن تعیین می‌کند.
  • Risk accept creates an exception request that must be approved by someone other than the requester. Exceptions expire and appear on the Exceptions screen with a countdown.
  • Verify fix requests a verification scan. Only the system itself can mark an issue as verified resolved, after that scan.

به‌روزرسانی داده آسیب‌پذیریUpdating vulnerability data#

Xenitex داده آسیب‌پذیری را از NVD و احتمال بهره‌برداری را از FIRST EPSS دریافت می‌کند. از مسیر مدیریت ← اطلاعات تهدید دکمه به‌روزرسانی را بزنید. فقط آسیب‌پذیری‌هایی نگه داشته می‌شوند که بهره‌برداری‌شده باشند، شدتشان از آستانه بالاتر باشد یا احتمال بهره‌برداریشان بالا باشد؛ بقیه کنار گذاشته می‌شوند تا پایگاه داده کوچک بماند. داده‌ها مرحله‌ای بارگذاری و یکجا اعمال می‌شوند.

Xenitex pulls vulnerability records from NVD and exploit-probability scores from FIRST EPSS. Go to Administration → Intelligence and click Update now. Only vulnerabilities that are known-exploited, above the severity floor or above the exploit-probability threshold are kept; the rest are discarded to keep the database small. Data is staged and applied atomically.

  • هر ارتباط بیرونی برای همگام‌سازی در لاگ ممیزی ثبت می‌شود.
  • در شبکه‌های کاملاً بدون اینترنت، می‌توانید همگام‌سازی را برای همیشه غیرفعال کنید.
  • در نسخه فعلی همگام‌سازی دستی است و زمان‌بندی خودکار ندارد.
  • Every outbound connection made for a sync is recorded in the audit log.
  • On fully air-gapped networks you can disable syncing permanently.
  • In the current version syncing is manual; there is no automatic schedule yet.

گزارش‌ها و داشبوردReports and dashboard#

داشبورد شش کاشی دارد: وضعیت ریسک با روند، مسائل پرریسک، رعایت مهلت رفع (با تمرکز بر موارد عقب‌افتاده)، پوشش اسکن، اسکن‌های فعال و استثناهای نزدیک به انقضا. هر کاشی به نمای فیلترشده همان موضوع پیوند دارد.

The dashboard has six tiles: risk posture with a trend line, top issues by risk, SLA compliance (leading with overdue items), scan coverage, active scans and exceptions approaching expiry. Every tile links to a pre-filtered view.

در صفحه گزارش‌ها یکی از قالب‌ها را انتخاب کنید و گزارش را بسازید؛ پس از آماده شدن، پیوند دانلود ظاهر می‌شود.

On the Reports screen, pick a template and generate; a download link appears when it is ready.

قالبTemplateمخاطبAudience
خلاصه مدیریتیExecutive summaryمدیران؛ وضعیت کلی و روندLeadership; overall posture and trend
جزئیات فنیTechnical detailتیم فنی؛ مسائل، دارایی‌ها و شواهدEngineers; issues, assets and evidence
تغییراتDeltaمقایسه با دوره قبل: چه اضافه و چه رفع شدComparison with the previous period: what appeared and what was fixed

پشتیبان‌گیری و به‌روزرسانیBackup and upgrade#

در مسیر مدیریت ← پشتیبان‌گیری سوابق پشتیبان‌ها را می‌بینید و می‌توانید پشتیبان فوری بگیرید. مستقل از آن، پیش از هر به‌روزرسانی یک خروجی کامل از پایگاه داده روی سرور بگیرید:

Under Administration → Backups you can see backup records and trigger an on-demand backup. Independently of that, take a full database dump on the server before every upgrade:

bash · backup
cd xenitex/deploy/compose
docker compose exec -T postgres pg_dumpall -U xenitex > xenitex-$(date +%F).sql

اگر در فایل postgres_user.txt نام دیگری گذاشته‌اید، به‌جای xenitex همان را بنویسید. فایل پشتیبان را بیرون از سرور نگه دارید و بازیابی آن را گاهی روی یک سرور آزمایشی امتحان کنید.

If you used a different name in postgres_user.txt, use it instead of xenitex. Keep the dump off the server and test restoring it on a staging machine from time to time.

به‌روزرسانی به نسخه جدیدUpgrading to a new version

bash · upgrade
cd xenitex
git pull
cd deploy/compose
docker compose up -d --build
docker compose ps

پیش از به‌روزرسانی، یادداشت‌های انتشار را بخوانید. اگر نسخه جدید گام مهاجرت پایگاه داده یا تغییر در .env.example دارد، آن‌جا ذکر شده است.

Read the release notes before upgrading. Any database migration step or change to .env.example is listed there.

سیاست نگهداری داده را از مدیریت ← نگهداری تنظیم کنید. برای هر نوع داده یک حداقل مجاز وجود دارد و پنل مقدار کمتر از آن را نمی‌پذیرد.

Configure data retention under Administration → Retention. Each data class has a minimum floor and the panel will not accept a lower value.

امن‌سازی سرور میزبانSecuring the host#

سروری که Xenitex روی آن اجراست نقشه آسیب‌پذیری‌های کل شبکه شما را نگه می‌دارد. آن را مثل یک دارایی حساس محافظت کنید:

The server running Xenitex holds a map of every weakness in your network. Protect it like the sensitive asset it is:

  • ورود SSH فقط با کلید و بدون ورود مستقیم root.
  • نصب منظم به‌روزرسانی‌های امنیتی سیستم‌عامل و Docker.
  • دسترسی به پنل فقط از شبکه مدیریتی (بخش فایروال).
  • مجوز 600 برای .env و محدود کردن کاربرانی که روی سرور حساب دارند.
  • نگهداری پشتیبان‌ها و کدهای بازیابی MFA بیرون از سرور.
  • Key-only SSH login with direct root login disabled.
  • Regular security updates for the operating system and Docker.
  • Panel reachable from the management network only (see firewall).
  • Mode 600 on .env, and as few user accounts on the server as possible.
  • Backups and MFA recovery codes kept off the server.

Xeniguard، هم‌خانواده Xenitex، این موارد را روی سرورهای لینوکس بررسی و اصلاح می‌کند.

Xeniguard, Xenitex's sibling project, audits and applies these settings on Linux servers.

رفع اشکالTroubleshooting#

نقطه شروع همیشه وضعیت و لاگ سرویس‌هاست:

Always start with service status and logs:

bash
docker compose ps
docker compose logs --tail=200 <service>   # web | api | worker | postgres | valkey
کانتینر postgres بالا نمی‌آید و خطای permission denied می‌دهدThe postgres container fails with "permission denied"

مجوز فایل‌های Secret احتمالاً 600 است. آن را به 644 تغییر دهید و دوباره اجرا کنید:

The secret files are probably mode 600. Change them to 644 and start again:

bash
chmod 644 secrets/postgres_user.txt secrets/postgres_password.txt
docker compose up -d
خطای «no such file» برای secrets هنگام اجرا"No such file" error for secrets on start

فایل‌های Secret باید پیش از docker compose up ساخته شوند. گام ساخت Secretها را از داخل پوشه deploy/compose دوباره انجام دهید.

Secret files must exist before docker compose up. Redo the Create secrets step from inside deploy/compose.

خطای «port is already allocated»"Port is already allocated"

سرویس دیگری روی سرور همان پورت را گرفته است. با دستور زیر پیدایش کنید و آن سرویس را متوقف کنید یا پورت انتشار پنل را در پیکربندی تغییر دهید:

Another service on the host is using that port. Find it with the command below, then stop it or change the panel's published port in the configuration:

bash
sudo ss -tulpn | grep <PORT>
دریافت ایمیج‌ها با timeout یا خطای 403 متوقف می‌شودImage pulls time out or return 403

دسترسی سرور به Docker Hub محدود است. یک Registry Mirror در دسترس را مطابق بخش نصب Docker تنظیم کنید.

The server cannot reach Docker Hub reliably. Configure a reachable registry mirror as described in Install Docker.

یک سرویس مدام ری‌استارت می‌شودA service keeps restarting

لاگ همان سرویس را ببینید. رایج‌ترین دلیل‌ها مقدار اشتباه در .env، در دسترس نبودن پایگاه داده یا کمبود فضای دیسک است. فضای دیسک را با df -h بررسی کنید.

Read that service's logs. The usual causes are a wrong value in .env, the database not being reachable, or low disk space. Check disk space with df -h.

اسکن هیچ یافته‌ای برنمی‌گرداندA scan returns no findings

بررسی کنید سرور Xenitex به محدوده هدف مسیر شبکه دارد، هدف در استثناها نیست و پنجره ممنوع فعالی وجود ندارد. سپس مطمئن شوید داده آسیب‌پذیری حداقل یک بار به‌روزرسانی شده است.

Confirm the Xenitex server has a network route to the target range, the targets are not excluded and no blackout window is active. Then make sure vulnerability data has been updated at least once.

اجرای محلی برای توسعهLocal development with mocks#

مخزن یک monorepo با pnpm است. برای کار روی پنل بدون نیاز به backend واقعی، یک سرور Mock وجود دارد که مستقیماً از روی قرارداد OpenAPI داده واقعی‌نما تولید می‌کند.

The repository is a pnpm monorepo. To work on the panel without a real backend, a mock server generates realistic data directly from the OpenAPI contract.

bash · monorepo
pnpm install
pnpm build
pnpm lint
pnpm typecheck
pnpm test
bash · panel against mocks
pnpm --filter @xenitex/contracts build     # generate types from openapi.yaml
pnpm --filter @xenitex/mock-server dev     # terminal 1: http://127.0.0.1:8081
pnpm --filter @xenitex/web dev             # terminal 2: http://localhost:5173

اگر Corepack در دسترس نیست، npx pnpm@9 را جایگزین pnpm کنید. متغیر MOCK_SERVER_FIXTURE_SCALE=small داده کوچک‌تری برای اجرای سریع می‌سازد و MOCK_SERVER_SETUP_INCOMPLETE=true پنل را با ویزارد راه‌اندازی ناتمام بالا می‌آورد.

If Corepack is unavailable, use npx pnpm@9 in place of pnpm. MOCK_SERVER_FIXTURE_SCALE=small generates a smaller fixture for fast iteration, and MOCK_SERVER_SETUP_INCOMPLETE=true boots with an unfinished setup wizard.

کاربران آزمایشی MockSeeded mock users

رمز همه password123 و کد MFA همه 000000 است.

All use password password123 and MFA code 000000.

ایمیلEmailنقشRole
admin@pilot-customer.exampleمدیرAdministrator
operator@pilot-customer.exampleاپراتورOperator
analyst1@pilot-customer.exampleتحلیلگرAnalyst
analyst2@pilot-customer.exampleتحلیلگر، با الزام تغییر رمزAnalyst, must change password
viewer@pilot-customer.exampleبینندهViewer

این حساب‌ها فقط برای سرور Mock هستند و هرگز در استقرار واقعی وجود ندارند.

These accounts exist only in the mock server and never in a real deployment.

هدرهای کمکی MockMock testing headers

هدرHeaderکاربردPurpose
X-Mock-Roleشبیه‌سازی نقش بدون ورودAct as a role without signing in
X-Mock-Latency: 0حذف تأخیر شبیه‌سازی‌شدهDisable simulated latency
X-Mock-Force-Statusبرگرداندن یک کد وضعیت ثابت، مثلاً 503Force a status code, e.g. 503
X-Mock-Fail-Rateخطای تصادفی با نرخ مشخص، مثلاً 0.2Random failures at a given rate, e.g. 0.2

وضعیت فعلی و محدودیت‌هاCurrent status and limitations#

Xenitex در حال توسعه فعال است. پیش از استفاده در محیط عملیاتی این موارد را بدانید:

Xenitex is under active development. Know the following before using it in production:

  • استقرار با Docker Compose، شکل مرجع استقرار است. بسته نصب امضاشده برای شبکه‌های بدون اینترنت هنوز منتشر نشده است.
  • کشف با اتصال TCP و خواندن بنر انجام می‌شود. Nmap به دلیل ملاحظات مجوز همراه Xenitex عرضه نمی‌شود.
  • همگام‌سازی داده آسیب‌پذیری دستی است و زمان‌بندی خودکار ندارد.
  • تطبیق محصول و نسخه هنوز در حال گسترش است؛ اطمینان هر تطبیق در امتیاز ریسک لحاظ می‌شود.
  • The Docker Compose setup is the reference deployment. A signed installer for air-gapped networks is not released yet.
  • Discovery uses TCP connect and banner grabbing. Nmap is not bundled with Xenitex for licensing reasons.
  • Vulnerability-data sync is manual; there is no automatic schedule yet.
  • Product and version matching is still being extended; each match's confidence is factored into the risk score.