node

voipappz

Command-line tool to install, run, and deploy the VoIPAppz platform. The stack (docker-compose + configs) ships in this repo; the CLI brings it up on the local machine and deploys it to remote hosts over SSH.

CI Release

Install

One command, on the machine that will run the platform:

curl -fsSL https://raw.githubusercontent.com/voipappz/cli/main/install.sh | sh

It ensures Docker (plus git and openssl), fetches the CLI + stack into /opt/voipappz, installs the voipappz binary on PATH, then runs voipappz bootstrap — docker login → setup → up -p appup -p voip → health.

Env overrides:

INSTALL_DIR=/opt/voipappz   # where the CLI + stack live (compose runs here)
VERSION=v0.1.1              # pin a CLI release (default: latest)
BOOTSTRAP=0                 # install only; print the bring-up command instead
SKIP_VOIP=1                 # app profile only

Unattended install

install.sh runs setup --ci, which auto-detects everything and prompts for nothing. To install unattended and choose your own answers (domain, TLS, alerts), prepare an answer file and run setup against it:

BOOTSTRAP=0 curl -fsSL https://raw.githubusercontent.com/voipappz/cli/main/install.sh | sh
cd /opt/voipappz
cp installer.env.example installer.env    # edit: domain, Cloudflare token, SMTP
voipappz setup --env-file installer.env
voipappz up -p app                         # app machine / ingress
voipappz deploy --host <switch> -P voip    # separate VoIP machine / egress

Every VOIPAPPZ_* key in the file answers one wizard prompt. The file holds credentials — it is git-ignored; delete it after the install.

TLS

Certificates are issued by acme.sh over DNS-01, so no inbound port has to be open for validation. The customer creates one static DNS record delegating the challenge into the zone we control:

_acme-challenge.<your-domain>   CNAME   _acme-challenge.<VA_ACME_ALIAS>

Setup asks for a Cloudflare API token (scoped Zone:DNS:Edit) and verifies it live. Issue and install with voipappz cert --issue; check status any time with voipappz cert. Without a token the node runs on a self-signed placeholder — TLS still negotiates, so check voipappz cert before going live.

Commands

voipappz setup                 generate .env config + secrets (wizard)
voipappz setup --env-file F    unattended setup from an answer file
voipappz up [-p app|voip]      start the stack (docker compose)
voipappz down | restart        stop / restart
voipappz status                container states
voipappz health [--api]        health check
voipappz cert [--issue]        TLS status / issue via acme.sh (DNS-01)
voipappz logs                  container logs
voipappz deploy --host <ip> --user <u> --key <key>   provision + deploy over SSH

./.env is auto-loaded; process env wins. Run voipappz --help for the full list.

Configuration

voipappz setup writes .env (config + generated secrets) and config/va.yaml. Both are git-ignored and stay on the machine.

Deploy a remote host

export VA_REGISTRY_PASSWORD=<registry-token>
voipappz deploy --host <ip> --user <user> --key ~/.ssh/<key> --check   # preflight
voipappz deploy --host <ip> --user <user> --key ~/.ssh/<key>           # deploy

Build from source

./build.sh              # static binary via Docker -> bin/voipappz
ARCH=arm64 ./build.sh   # cross-build for aarch64

Docs: https://voipappz.zendesk.com/hc/en-us

Repository

node

Owner
Statistic
  • 0
  • 0
  • 0
  • 0
  • 3
  • about 5 hours ago
  • August 19, 2026
License

Links
Synced at

Wed, 19 Aug 2026 07:26:23 GMT

Languages