Getting started

Installation

One command provisions the whole master stack: Nginx, TLS, Xray, SSH-WS, stunnel, the API agent, the web console, the Telegram bot and the autoscript CLI.
ItemRequirement
OSUbuntu 22.04 / 24.04 or Debian 12, fresh install preferred
Accessroot (or a shell that can sudo to root)
Panel VPS1 vCPU / 1 GB RAM minimum
Node VPSCan be smaller; sized for the traffic it serves
DNSA domain pointed at the panel VPS — DNS-only (grey cloud) for the panel host
OutboundAccess to GitHub, the distro mirrors and Let’s Encrypt

Do not proxy the panel host

The panel host must be DNS-only. Proxying it breaks certificate issuance and the mTLS node RPC path. VPN entry hostnames can be proxied — that is what the CDN port sets are for.
  1. 1
    Create an A record for the panel, e.g. panel.example.com → <panel VPS IPv4>, set to DNS-only.
  2. 2
    If you plan to use a wildcard TLS certificate (recommended when you will run many VPN hostnames), make sure your DNS provider supports API tokens for DNS-01 validation.
  3. 3
    Verify propagation before installing: dig +short panel.example.com must return your VPS IP.
on the panel VPS, as root
bash <(curl -fsSL https://raw.githubusercontent.com/Ghostrelicc/Vortexa/main/backend/install.sh)

The installer prompts for:

Panel domain
e.g. panel.example.com. Re-prompts until the syntax is valid.
TLS mode
1) Single domain (HTTP-01) or 2) Wildcard (DNS-01 via acme.sh with your provider’s API credentials).
Admin username
Panel login. Leave blank to accept the generated value.
Admin password
Typed hidden. If left empty a strong password is auto-generated and printed at the end.
Database path
Default /etc/autoscript/db.sqlite.
  • Packages: nginx, python3, Node.js (for building the console), build tooling, fail2ban, ufw, unzip and the proxy stack.
  • TLS: issues certificates with acme.sh; the same fullchain is symlinked into Xray so the panel and VMess/VLESS/Trojan share one cert.
  • Proxy stack: Xray-core, SSH-WS, stunnel, ZIVPN support and the Nginx templates for the panel vhost plus the / WebSocket upgrade.
  • Randomised ports: a panel port and a local-node API port are picked so they never collide with the Cloudflare-friendly VPN port sets, and the console is served under a secret path slug.
  • Firewall: ufw is reset to deny-inbound / allow-outbound, then 22/tcp, the TLS and plain port sets, the panel port and the local-node API port are allowed.
  • Local node: the master registers itself as local-01 with its own agent port, so you can sell from the panel box immediately.
  • Defaults in the DB: panel port/path, TLS port set, plain port set and brand values are seeded as settings rows.
  • Cloudflare WARP / Zero Trust are not installed and are actively purged if found from an older install.
  • CLI: installs autoscript and writes /etc/autoscript/panel-credentials.txt with mode 600.

When it finishes, the installer prints a block like this:

installer output
Installation complete.

  Panel URL   : https://panel.example.com:41377/8fbc2a91/
  Username    : admin
  Password    : ••••••••••••   (auto-generated)

  Credentials : /etc/autoscript/panel-credentials.txt   ·   Admin CLI: autoscript
  1. 1
    Open the panel URL exactly as printed — the port and path slug are both required.
  2. 2
    Log in with the printed credentials.
  3. 3
    Store the credentials in your password manager, then confirm cat /etc/autoscript/panel-credentials.txt is still mode 600.
  4. 4
    Rotate the login if you want your own values: autoscript reset-user and autoscript reset-pass.

Lost the URL?

Run autoscript status — it prints services, the installed release, the panel URL and the authenticity check result.
post-install checks
autoscript status                 # services + release + authenticity
systemctl is-active autoscript-agent autoscript-web nginx
ufw status verbose                # expect 22, panel port, VPN port sets
curl -kI https://127.0.0.1:$PANEL_PORT/  # panel answers locally
journalctl -u autoscript-agent -n 100 --no-pager
  • Dashboard loads and shows local-01 as online.
  • Nodes page lists local-01 with a heartbeat timestamp under a minute old.
  • Creating a throwaway SSH account succeeds and its config renders.

Changing the domain, port or path

bash
autoscript set-domain   # re-issues TLS for the new panel hostname
autoscript set-port     # moves the panel to a new port and updates ufw
autoscript set-path     # rotates the secret console path slug

Re-running the installer

Re-running is supported, but the agent keeps serving the previously configured panel port until it is restarted — finish with autoscript restart and re-check autoscript status.

Uninstall

bash
autoscript uninstall     # removes services, vhosts and the CLI

Uninstall is destructive

Back up first (autoscript backup) and copy the archive off the box. Removing the panel does not clean up remote nodes — uninstall those with the node’s own uninstall.sh.