Deplo

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 | bash

Configured 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-64 or arm64, Bash older than 4, or a missing curl or openssl.
  • Less than 8 GB free on /. 30 GB is the recommended minimum.
  • Ports 80, 443 or 3000 already held by something that is not Deplo.
  • No outbound HTTPS to ghcr.io, or to get.docker.com when Docker has to be installed. DEPLO_SKIP_NET_CHECKS=1 skips 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.

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?

On this page