Skip to main content

Docker Swarm: Installer Flags

The complete flag reference for deploy/docker/install.sh (and, verbatim, the get.sh bootstrap and upgrade.sh, which just re-exec install.sh). Run install.sh --help for the built-in list. Defaults for the component image tags live in versions.env, the single source of truth; a flag or environment variable always overrides whatever is pinned there.

Core

FlagDefaultPurpose
--main-address=<dns|ip>requiredPublic address — TLS SAN + UI API URL.
--port=<n>443Public Envoy edge port. --port=80 implies plaintext (TLS off) unless overridden.
--ui-port=<n>8080Internal UI port.
--log-level=<level>infoBackend log level.

Versions

Component image tags. versions.env holds the defaults; these flags override per component.

FlagDefaultPurpose
--backend-version=<csv>v1.6.6-v0.14.0-envoy1.38.3Backend variant tag(s), comma-separated. One control-plane + Envoy cluster is generated per variant; the embedded Envoy version must be unique per variant.
--ui-version=<tag>v1.5.5UI image tag.
--coredns-version=<tag>v0.1.4CoreDNS GSLB image tag.
--collector-version=<tag>v0.1.11elchi-collector image tag.
--image-repo=<repo>jhonbrownnDocker Hub namespace / registry for the Elchi images (point at a private mirror for air-gapped installs).

TLS

FlagDefaultPurpose
--tls=self-signed|providedself-signedCertificate mode. Self-signed is a 10-year ECDSA-P256 cert.
--cert=<path>Certificate file for --tls=provided.
--key=<path>Private key file for --tls=provided.
--tls-san=<csv>Extra SAN names/IPs for the self-signed cert. --main-address and all --nodes are included automatically.

Features / external services

FlagDefaultPurpose
--no-gslbGSLB onDisable the CoreDNS GSLB service.
--gslb-zone=<domain>elchi.localGSLB authoritative zone.
--gslb-publishoffPublish CoreDNS :53 on the host (off by default to avoid clashing with the host resolver).
--no-collectorcollector onDisable elchi-collector and ClickHouse.
--enable-demooffEnable UI demo mode.

Datastores

MongoDB, ClickHouse and VictoriaMetrics each default to a local container; point at an external service instead with the corresponding URI/endpoint flag.

FlagDefaultPurpose
--mongo=local|externallocalMongoDB placement.
--mongo-uri=<uri>Connection URI for --mongo=external.
--clickhouse=local|externallocalClickHouse placement.
--clickhouse-uri=<uri>Connection URI for --clickhouse=external.
--vm=local|externallocalVictoriaMetrics placement.
--vm-endpoint=<url|host:port>Endpoint for --vm=external.
Clustering has no flags

Whether MongoDB and ClickHouse run standalone or clustered is derived entirely from the --nodes count — there are no storage/HA flags. See High Availability.

Grafana

FlagDefaultPurpose
--grafana-user=<u>adminGrafana admin user.
--grafana-password=<p>auto-generatedGrafana admin password. If unset, a random one of the form elchi-<8 hex> is minted and printed at the end of the install.

Host tuning

FlagDefaultPurpose
--no-tune-hosttuning onSkip all host tuning (sysctl, Transparent Huge Pages off, docker log rotation). Use on a shared / externally-managed host. All tuning steps are best-effort and idempotent.

By default the installer applies kernel sysctl tuning (vm.max_map_count, net.core.somaxconn, nf_conntrack_max, and more), disables Transparent Huge Pages via a persistent elchi-thp.service oneshot (MongoDB and ClickHouse require this), and configures Docker json-file log rotation (max-size=50m, max-file=5) if /etc/docker/daemon.json is absent. On multi-node it applies these on every node over SSH.

Multi-node

Run the installer once on M1 (the first --nodes host); it fans out over SSH. See High Availability for the full model.

FlagDefaultPurpose
--nodes=<csv>single nodeNode IPs or hostnames — the first is M1, where you run this. M1 SSHes into the rest, installs Docker, joins them to the Swarm, then deploys.
--ssh-user=<user>rootSSH user for the other nodes.
--ssh-port=<port>22SSH port.
--ssh-key=<path>mints ed25519Existing private key (skips the key-bootstrap step).
--ssh-password=<pwd>promptedPassword for the one-time key copy (else prompted once per node).
--no-sshauto-joinDon't auto-join; join the workers yourself first, then re-run.
--placement-m1="<expr>"node.role == managerPlacement constraint for the M1-pinned stateful services.

Operational

FlagDefaultPurpose
--offline=<tarball>onlinedocker load a save-images.sh bundle before deploy and deploy with --resolve-image=never. See Offline / Air-Gapped.
--overlay-mtu=<n>1500Set the elchi-net overlay MTU (e.g. 1400) for tunnelled / cross-DC links where path MTU < 1500.
--non-interactiveoffNever prompt.

Paths

FlagDefaultPurpose
--stack-name=<name>elchiSwarm stack name.
--state-dir=<path>~/.elchi-dockerWhere the generated stack.yml lives (<state-dir>/gen).
--etc-dir=<path>/etc/elchiRoot of the bind-mounted, editable config/secrets/TLS tree.
--dry-runoffRender config + stack file only; no deploy, no root, no daemon. Inspect ~/.elchi-docker/gen/.