install.sh
Installs the whole platform, Docker, Traefik, Postgres, the control plane and the agent, on a fresh server.
curl -fsSL https://deplo.build/install.sh | bashConfigured by environment variables in front of the command. See
Environment variables for the table. With
none of them, and a terminal, it asks for a domain once: press Enter and it
generates deplo-<hex>.nip.io. With no terminal it generates one without asking.
Requires
Root, Bash 4, curl, openssl, and Docker Compose v2 when Docker is
already on the host. Docker itself is installed if missing. systemd is
what runs the agent: without it the panel still comes up, but the machine
cannot become a Deplo server.
Prop
Type
Preflight checks
Everything knowable before the host is touched, so a server that cannot
finish says so in ten seconds. These stop the run, unless you pass
--force:
- Architecture other than
x86-64orarm64, Bash older than 4, or a missingcurloropenssl. - Less than 8 GB free on
/. 30 GB is the recommended minimum. - Ports
80,443or3000already held by something that is not Deplo. - No outbound HTTPS to
ghcr.io, or toget.docker.comwhen Docker has to be installed.DEPLO_SKIP_NET_CHECKS=1skips the network checks on a host that reaches its registry another way. - Docker present but its daemon not answering, or without Compose v2.
These only warn:
- Less than 4 GB of RAM, fewer than 2 cores, or less than 30 GB free. That is the minimum, 4 cores and 8 GB is the comfortable size, and both are about the apps: Deplo and Postgres fit in about 1 GB, so a 2 GB server runs the platform and leaves nearly nothing to deploy on it. No amount of memory or CPU blocks the install.
- No
systemd: the control plane runs, but this machine cannot become a Deplo server. - The domain does not resolve here yet, or Let's Encrypt is unreachable, so the certificate cannot issue yet.
Install Docker
Installs Docker if absent, and enables the service.
Write the address pools
Writes Docker's default-address-pools, never clobbering an existing one,
backing up the old file and validating the new one.
Create the layout
Creates /opt/deplo/{traefik,data,acme}, the deplo network, and
acme.json at 0600.
Generate secrets
Generates secrets into /opt/deplo/.env at 0600, once.
Start Traefik
Writes and starts the Traefik stack, with a read-only socket proxy sidecar.
Symlink the proxy
Symlinks /var/lib/deplo-agent/traefik to it, so the local agent manages
the panel's own proxy.
Start Deplo
Writes and starts the Deplo stack: Postgres on an internal network, and the
control plane publishing 3000 on 127.0.0.1 only. Traefik serves it over
HTTPS, on your domain and on the generated nip.io host.
Enroll this machine
Waits up to two minutes for /api/health on http://127.0.0.1:3000, then
enrolls this machine as a server.
Re-running it is the update path
It detects /opt/deplo/.env, switches to update mode, and never rotates
a secret. The last step failing is a warning, not a fatal error: the
panel stays up and a re-run retries it.
See also
Did this page help you?