Requirements
Source code
Panel — xray-panel/backend · node — xray-panel/node · subscription page — xray-panel/subscription-page
Panel server
| Resource | Minimum | Comment |
|---|---|---|
| CPU | 2 cores | |
| RAM | 4 GB | runs on 3.8 GB on a test bench |
| Disk | 20 GB | the database grows together with traffic history |
| OS | Linux with Docker and Docker Compose |
PostgreSQL and Valkey run as containers — you do not need to install them separately. You will also need a domain and a TLS certificate: without a reverse proxy with HTTPS the panel will not start (see Reverse Proxy).
Node server
| Resource | Minimum |
|---|---|
| CPU | 1 core |
| RAM | 1 GB |
| Disk | 1 GB |
| Docker | required |
Ports:
- 2222 (
NODE_PORT) — node management. Must be reachable from the panel server. You do not need to open it to the whole internet: a firewall rule for the panel IP is enough. - proxy ports — defined by the Xray configuration (inbound). Open to clients.
--network hostis required in the node container: Xray must listen on ports itself, and port forwarding breaks detection of the real client IP.
Domains
| Domain | Required | Purpose |
|---|---|---|
panel.example.com | yes | panel and API |
sub.example.com | no | subscription page |
The values go into .env:
PANEL_DOMAIN=https://panel.example.com
FRONT_END_DOMAIN=https://panel.example.com
SUB_PUBLIC_DOMAIN=panel.example.com/api/sub
note
SUB_PUBLIC_DOMAIN is specified without https:// and without a trailing slash:
this value is substituted into the profile-web-page-url header and into the links the
client receives.
Compatibility
- Database migrations are applied automatically when the container starts.
- When migrating from Remnawave the database is compatible: see Migrating from Remnawave.