Installer
Install the Panel using the official automated installer.
The recommended way to install Struxa is the official installer script. One command sets up Docker, generates all secrets, creates your admin account, configures a webserver with SSL, and starts the Panel. If you install Wings in the same run, the installer also registers the node in the Panel and connects it for you.
One-line Install
Run as root on a fresh Linux server:
bash <(curl -fsSL https://install.struxa.cloud)The installer requires root. It reads from /dev/tty directly, so running it piped through curl works correctly.
What the Installer Asks You
- Installation mode - Dashboard only or Dashboard + Wings
- Admin account - email, password, and display name. This account is created during the install, so you can log in right after it finishes
- Panel domain - used for
APP_URL,BETTER_AUTH_URL, andCORS_ORIGIN - Web server - use your existing nginx, Apache, or Caddy, install nginx fresh, or skip (Docker Compose only)
- SSL - Let's Encrypt certificate, self-signed certificate, or none
- Cloudflare Turnstile - optional bot protection keys
When you choose Dashboard + Wings, it also asks for the node's domain or IP, a location name, and a node name.
What the Installer Does
- Checks prerequisites - verifies Docker, Docker Compose, curl, and openssl. Offers to install Docker automatically if missing.
- Fetches the latest release - resolves the current stable tag from GitHub and downloads the production compose file.
- Generates all secrets - RSA key pair, auth secret, database passwords, and encryption key via openssl. Nothing is reused or hardcoded.
- Creates your admin account - the Panel creates the account through a bootstrap endpoint, so the
/setupwizard is skipped. (The wizard only appears after manual installs.) - Configures a web server - writes the reverse proxy config for the Panel. Skipped if you chose Docker Compose only.
- Handles SSL - obtains a Let's Encrypt certificate via certbot, generates a self-signed cert, or skips SSL entirely. No certificate is configured if you skipped the web server.
- Starts services - pulls images and starts the Panel and MySQL containers.
In Dashboard + Wings mode it additionally registers the node in the Panel, writes a ready-to-use config.yml to Wings, and starts Wings connected. See Wings - Installer for the details.
Options
| Flag / Argument | Effect |
|---|---|
| (none) | Interactive install of the latest stable release |
--nightly | Install the latest pre-release build |
--no-telemetry | Disable anonymous install telemetry (see Telemetry) |
update | Update an existing installation to the latest release |
--panel-only | With update, update only the Panel (skip Wings) |
--wings-only | With update, update only Wings (skip the Panel) |
uninstall | Remove an existing installation (asks for confirmation first) |
Unattended installs are supported too: set STRUXA_UNATTENDED=1 and provide the STRUXA_* variables documented in the installer README.
Telemetry
The installer sends a few anonymous events (OS, architecture, install mode, and success/failure) so we can see install volume and where installs commonly fail. No domains, secrets, or IP addresses are collected.
To opt out, use any of:
bash <(curl -fsSL https://install.struxa.cloud) --no-telemetrySTRUXA_NO_TELEMETRY=1 bash <(curl -fsSL https://install.struxa.cloud)DO_NOT_TRACK=1 bash <(curl -fsSL https://install.struxa.cloud)Updating
To update an existing installation:
bash <(curl -fsSL https://install.struxa.cloud) updateThe updater reads the current version from /opt/struxa/.env.prod, fetches the latest tag, updates the image tag, pulls new images, and restarts the Panel. If Wings is installed on the same machine, it updates Wings as well.
What Gets Created
| Path | Contents |
|---|---|
/opt/struxa/docker-compose.prod.yml | Production compose file |
/opt/struxa/.env.prod | All secrets and configuration (chmod 600) |
/opt/wings/compose.yml | Wings compose file (Dashboard + Wings mode) |
/opt/wings/config/config.yml | Installer's copy of the Wings config (Dashboard + Wings mode) |
Web server config is written to the appropriate location for your web server (/etc/nginx/sites-available/, /etc/apache2/sites-available/, or /etc/Caddyfile).