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.| Item | Requirement |
|---|---|
| OS | Ubuntu 22.04 / 24.04 or Debian 12, fresh install preferred |
| Access | root (or a shell that can sudo to root) |
| Panel VPS | 1 vCPU / 1 GB RAM minimum |
| Node VPS | Can be smaller; sized for the traffic it serves |
| DNS | A domain pointed at the panel VPS — DNS-only (grey cloud) for the panel host |
| Outbound | Access 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.
- 1Create an
Arecord for the panel, e.g.panel.example.com → <panel VPS IPv4>, set to DNS-only. - 2If 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.
- 3Verify propagation before installing:
dig +short panel.example.commust 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
fullchainis 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:
ufwis reset to deny-inbound / allow-outbound, then22/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-01with 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
autoscriptand writes/etc/autoscript/panel-credentials.txtwith mode600.
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- 1Open the panel URL exactly as printed — the port and path slug are both required.
- 2Log in with the printed credentials.
- 3Store the credentials in your password manager, then confirm
cat /etc/autoscript/panel-credentials.txtis still mode 600. - 4Rotate the login if you want your own values:
autoscript reset-userandautoscript 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 slugRe-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 CLIUninstall 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.