setup.sh uses /opt/wallarm/ for env.list and all paths.
Extract once to base dir, each node registers with --force.
Simplified InstallNode to 4 steps: nginx → download → extract → setup.
Wallarm node (native deployment) requires NGINX as a runtime
dependency. installNginx() runs apt-get install nginx if not
already present, before extracting/running the Wallarm installer.
Also fixed repo.wallarm.com → meganode.wallarm.com in preflight.
- Binary + source installed to /opt/wallarm/
- Clients can rebuild: cd /opt/wallarm/source && go build ./cmd/wallarm/
- Source stays at repo root, not in a subdirectory
- deploy.sh installs to /opt/wallarm/wallarm (not ~/deploy/)
- state.json at /opt/wallarm/state.json (not ~/.wallarm/)
- instances under /opt/wallarm/{name}/
- .env will live at /opt/wallarm/.env for global defaults
- Single tree, no home directory clutter
- Uses Makeself --noexec --target to extract without running
- Then runs the embedded setup.sh with WALLARM_API_TOKEN and
WALLARM_API_HOST env vars
- Interactive prompts handled via stdin pipe
- WALLARM_INSTALLER_URL env var overrides the native node installer URL
- Address simplified: default IP 0.0.0.0, only ask for port
- Added upstream IP/port prompts
- Per-instance .env file saved to /opt/wallarm/{name}/.env
(allows resuming/reinstalling from saved state)
- Confirmation summary before deploying
Bubbletea and huh cannot coexist in the same process. Fixed by:
- TUI handles only display: deploy choice + dashboard
- Deploy wizard runs as plain terminal prompts in main.go
- No more terminal conflicts, keys work correctly
- Same flow: wallarm → choice → form → deploy → state saved
tea.WithAltScreen() caused the alternate buffer to conflict with
huh form rendering. Using normal screen lets huh render inline.
Also reverted broken tea.Suspend/tea.Resume (not valid commands).
m.deploying is now set synchronously before the goroutine starts,
preventing bubbletea from re-capturing number keys meant for the
huh form. Removed duplicate '1' key handler from wizard view.
Step-by-step instructions for configuring a Linux VM as a jump server:
- SSH server config (AllowTcpForwarding, GatewayPorts, keepalive)
- Tunnel user creation (password or key auth, no shell)
- Zoraxy/Nginx reverse proxy for TLS:443
- Testing and troubleshooting
Bubbletea and huh were fighting over terminal input. Fixed by:
- TUI exits when user selects 'Remote Assistance'
- Plain terminal prompts in main.go collect jumphost URL, user, pass
- Starts tunnel directly, shows connection string for admin
- No more conflicting rendering between TUI and forms
Startup flow now offers:
- [1] Deploy locally — config wizard, deploys on this server
- [2] Remote assistance — prompts for jumphost URL, user, password
(or SSH key path), opens reverse TLS:443 tunnel so a remote admin
can connect and run deployment through their terminal.
Tunnel now supports password auth in addition to key auth.
Gitea server has strict HTTP body limits (~1MB) preventing binary
uploads. deploy.sh now clones the repo and builds from source using
Go (auto-installed if missing).
Build takes ~30 seconds. Binary is ~7MB stripped, ~2MB with UPX.
Binary is now distributed via Gitea releases (not committed to repo).
deploy.sh queries API for latest release tag and downloads the correct
architecture binary.
Removed:
- docker/ (scripts, binaries, images) - no longer needed
- native/, common/ bash scripts - replaced by Go binary
- setup.sh - replaced by deploy.sh
- internal/docker/ Go package - no longer needed
Added:
- deploy.sh - one-command bootstrap
- --version flag
Result: one binary, one TUI, one deployment type. Zero Docker.
Binary distributed via Gitea releases (not in repo).
- Wizard: type pick → cloud region → token → node config → deploys via native.InstallNode / docker.DeployContainer
- State saved after successful deployment with API token
- Dashboard reflects real node state from ~/.wallarm/state.json
- Removed old unused HuhForm stub
- Wizard: type pick → cloud region → token → node config (huh forms)
- Dashboard: node list with status, action shortcuts
- Auto-routes based on ~/.wallarm/state.json existence
- Replaces text stubs with proper interactive TUI
- Replaces per-file curl downloads with single archive download
(tar.gz from Gitea), extracts only common/ + selected type folder.
- Interactive prompt uses /dev/tty when stdin is piped (curl|bash).
- Falls back to both only when fully headless.
- Post-extract sed patch fixes library sourcing path for flat deploy/
until source scripts are updated in the repo.
- setup.sh: ask user which deployment type (docker/native/both) instead
of silently downloading everything; uses env var for piped mode
- All scripts now download to single flat deploy/ directory instead of
separate common/docker/native dirs
- Post-download sed patch fixes library sourcing path until repo is
synced
- wallarm-native.sh: fix set -u crash when declare -a used without =()
(user hitting blank node name triggered unbound variable crash)
- All deployment scripts: library source path changed from
../common/wallarm-lib.sh to same-directory wallarm-lib.sh
Docker inside LXC containers is problematic, so the Docker deployment is
intended for full VMs; the native deployment is ideal for any container
environment (LXC, Proxmox containers, etc.).
Remove the native/wallarm-ct-*.sh scripts (NGINX-module based native
deployment) so the wallarm-ct-* family is Docker-only and the native
deployment is represented by the unified wallarm-native.sh manager.
Update setup.sh (native downloads only wallarm-native.sh), README and
changelog.