Automated installer (install.sh)¶
The repository ships an interactive installer — a wizard over the same
docker-compose.yml a manual install uses. It writes .env, generates
secrets, and brings the stack up; it does not install Docker itself
(see Installation overview for the prerequisites).
./install.sh # menu
./install.sh --dry-run # print every mutating command, execute nothing
./install.sh -h # help
The UI is whiptail dialogs (installed on demand when apt is
available). On a minimal host or over a plain serial console, force the
plain-text fallback:
Modes¶
The installer builds exactly one menu entry — everything else below is planned, not shipped:
| Mode | Edition | Status | What it does |
|---|---|---|---|
aio |
Core, EE | shipped | Single-node "all-in-one": writes .env, docker compose build && up for db/redis/backend/frontend/nginx on this host |
ha_seed |
EE | not shipped | First HA node: pg_auto_failover monitor, this node's Postgres, HAProxy + keepalived (VIP), Redis + Sentinel |
ha_join |
EE | not shipped | Second (or later) node joining an existing HA cluster |
ha_app |
EE | not shipped | Point this node's app layer (backend/frontend/nginx) at a running HA cluster through its VIP |
HA is deployed today via docker-compose.ha.yml by hand — follow
HA deployment; that page remains
the source of truth.
What the aio mode asks and does¶
- Checks prerequisites —
docker,openssl,curlmust be on the host. - Database — Postgres username, database name, password.
- Admin account — initial admin username and password (change it after first login).
- Network — the port nginx exposes the platform on (default
3000). - Environment —
production(recommended: enforcesENCRYPTION_KEY, stricter defaults) ordev(relaxed checks, local testing only). - HTTPS — in production mode: is the instance reachable over
HTTPS? Answers No if you are only testing over plain HTTP — otherwise
login cookies would require HTTPS and lock you out
(
COOKIE_SECURE). - Generates secrets —
JWT_SECRETandWEBHOOK_HMAC_SECRET(random hex-32),ENCRYPTION_KEY(Fernet key). Secrets are typed into masked prompts and never echoed or logged. - Writes
.env— an existing.envis backed up first, never overwritten in place. - Builds and starts the stack, then waits for the first-login
screen (
/api/auth/setup) to answer.
The result is byte-for-byte what a manual Core installation produces — the installer is only the wizard over the same compose file.
HA modes: read before running¶
pg_auto_failovernode registration is a one-shot handshake. Re-runningha_seed/ha_joinagainst an already-bootstrapped cluster is not safe.- Prerequisite on every HA host:
sudo sysctl -w net.ipv4.ip_nonlocal_bind=1(the installer offers to run it). ENCRYPTION_KEYandJWT_SECRETmust be byte-for-byte identical on every app node — generate once on the seed node and reuse the values everywhere.
Full topology, recovery and teardown: HA deployment.
Safety notes¶
--dry-runprints every mutating command instead of running it — review a mode on the real host before committing to it.- Cancel any dialog and the installer stops; nothing is half-applied
except what the completed steps already did (
.envbackup keeps the previous state recoverable). - The installer never starts, stops or reads the live stack's data directory — it only manages this checkout's compose project.
After the install: Verification — health checks and first login.