PanelInstallation

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, and CORS_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

  1. Checks prerequisites - verifies Docker, Docker Compose, curl, and openssl. Offers to install Docker automatically if missing.
  2. Fetches the latest release - resolves the current stable tag from GitHub and downloads the production compose file.
  3. Generates all secrets - RSA key pair, auth secret, database passwords, and encryption key via openssl. Nothing is reused or hardcoded.
  4. Creates your admin account - the Panel creates the account through a bootstrap endpoint, so the /setup wizard is skipped. (The wizard only appears after manual installs.)
  5. Configures a web server - writes the reverse proxy config for the Panel. Skipped if you chose Docker Compose only.
  6. 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.
  7. 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 / ArgumentEffect
(none)Interactive install of the latest stable release
--nightlyInstall the latest pre-release build
--no-telemetryDisable anonymous install telemetry (see Telemetry)
updateUpdate an existing installation to the latest release
--panel-onlyWith update, update only the Panel (skip Wings)
--wings-onlyWith update, update only Wings (skip the Panel)
uninstallRemove 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-telemetry
STRUXA_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) update

The 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

PathContents
/opt/struxa/docker-compose.prod.ymlProduction compose file
/opt/struxa/.env.prodAll secrets and configuration (chmod 600)
/opt/wings/compose.ymlWings compose file (Dashboard + Wings mode)
/opt/wings/config/config.ymlInstaller'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).

On this page