README.md 2.1 KB

Cloud deployment & golden images

Tooling to ship the 3x-ui panel as a cloud image or via unattended install, with per-instance credentials generated on first boot (never admin/admin, never a shared session secret). Everything here supports amd64 and arm64.

Path What it is Use when
cloud-init/ Generic cloud-init user-data (unattended install.sh) Any cloud, no image build
packer/ Packer build → AWS AMI + qcow2/raw Reusable / Marketplace images
lightsail/ Launch script + snapshot builder Amazon Lightsail
firstboot/ First-boot unit + script that mints per-instance creds Used by the Packer/Lightsail images
marketplace/aws/ AWS Marketplace submission checklist Publishing an EC2 AMI
marketplace/hetzner/ Hetzner Cloud notes Hetzner deployments
test/ Container smoke tests Verifying the install/firstboot paths

Two models

  • Non-interactive install (cloud-init): install.sh runs unattended when XUI_NONINTERACTIVE=1 or stdin is not a TTY. Each instance installs and configures itself with random credentials. See cloud-init/README.md.
  • Golden image (Packer): the image contains the panel but no DB and no secrets; firstboot generates unique credentials on first boot. See packer/README.md.

Unattended install knobs

install.sh reads these env vars in non-interactive mode (all optional; unset ⇒ secure random / default):

XUI_USERNAME, XUI_PASSWORD, XUI_PANEL_PORT, XUI_WEB_BASE_PATH, XUI_SSL_MODE (none|ip|domain, default none), XUI_DOMAIN, XUI_ACME_EMAIL, XUI_ACME_HTTP_PORT (ACME HTTP-01 listener port, default 80), XUI_SSL_IPV6 (optional IPv6 address to add to an ip-mode cert), XUI_SERVER_IP (fallback IP for the displayed access URL when auto-detection fails), XUI_DB_TYPE (sqlite|postgres), XUI_DB_DSN.

The resulting credentials are written to /etc/x-ui/install-result.env (mode 600).