Files
l-ui/deploy/README.md
T
Muse 6a5ee8f77b rename: 3x-ui/x-ui -> L-UI/l-ui/lui-agent (paths, services, env, assets)
Display L-UI; panel binary/process l-ui, agent lui-agent.
Dirs /usr/local/l-ui, /etc/l-ui, /var/log/l-ui; DB /etc/l-ui/l-ui.db
(name file drives it via GetName), probe.db beside it, cert
/etc/l-ui/cert, bin /usr/local/l-ui/bin. Services l-ui.service /
lui-agent.service, OpenRC lui-agent, l-ui.sh, cmd/lui-agent.
Env prefix XUI_ -> LUI_ (code reads new prefix only). Release
assets l-ui-linux-* / lui-agent-linux-*; Gitea repo rogue/l-ui is
a placeholder pending user confirmation (see selfupdate.go note).
Go module path github.com/mhsanaei/3x-ui/v3 intentionally kept.
Versions unchanged: panel V2.6.0 / agent A2.5.0.
2026-10-24 12:00:55 +00:00

1.4 KiB

Cloud deployment (unattended install)

Tooling to ship the L-UI panel via unattended install, with per-instance credentials generated on first boot (never admin/admin, never a shared session secret). Works on amd64 and arm64.

Path What it is Use when
cloud-init/ Generic cloud-init user-data (unattended install.sh) Any cloud, no image build
marketplace/hetzner/ Hetzner Cloud notes Hetzner deployments
test/ Container smoke test Verifying the install path

How it works

install.sh runs unattended when LUI_NONINTERACTIVE=1 or stdin is not a TTY. Each instance installs and configures itself with random credentials. See cloud-init/README.md.

Unattended install knobs

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

LUI_USERNAME, LUI_PASSWORD, LUI_PANEL_PORT, LUI_WEB_BASE_PATH, LUI_SSL_MODE (none|ip|domain, default none), LUI_DOMAIN, LUI_ACME_EMAIL, LUI_ACME_HTTP_PORT (ACME HTTP-01 listener port, default 80), LUI_SSL_IPV6 (optional IPv6 address to add to an ip-mode cert), LUI_SERVER_IP (fallback IP for the displayed access URL when auto-detection fails), LUI_DB_TYPE (sqlite|postgres), LUI_DB_DSN.

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