Skip to content

Install the panel ​

Requirements ​

  • Docker Engine with Docker Compose 2.20 or newer.
  • About 4 GB of RAM for the panel, database and a small workload.
  • For game nodes: Linux, systemd, Docker Engine and a reachable (preferably HTTPS) panel URL. See Connect a node.
  • Optional: an S3-compatible service for backups, reachable from the API and every node.

The panel stack runs on Linux, macOS and Windows (Docker Desktop, Linux containers with the WSL 2 engine). Game nodes must be Linux.

One command ​

sh
git clone --depth 1 --branch main https://github.com/kavaliersdelikt/fledge.git fledge && cd fledge && sh ./install.sh
powershell
git clone --depth 1 --branch main https://github.com/kavaliersdelikt/fledge.git fledge; if ($LASTEXITCODE -ne 0) { throw 'Download failed.' }; Set-Location fledge; powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\install.ps1; if ($LASTEXITCODE -ne 0) { throw 'Install failed.' }

The installer:

  1. Checks Docker, the Compose version and the repository files.
  2. Creates .env if it does not exist, with a random POSTGRES_PASSWORD and ENCRYPTION_KEY, in a file readable only by you. An existing .env is never overwritten.
  3. Runs docker compose up --build -d.
  4. Waits for the API and panel health checks. The plugin host is checked too; a problem there is only a warning, because the panel works without plugins.
OptionShellPowerShellEffect
Check only--check-CheckOnlyVerify prerequisites and files without changing anything
Don't wait--no-wait-NoWaitStart Compose without waiting for health checks

Manual install ​

sh
git clone https://github.com/kavaliersdelikt/fledge.git
cd fledge
cp .env.example .env

Edit .env: set a long URL-safe POSTGRES_PASSWORD and a permanent 64-character hex ENCRYPTION_KEY (openssl rand -hex 32), then:

sh
docker compose up --build -d
docker compose ps
curl http://localhost:4000/api/health

Keep the encryption key

ENCRYPTION_KEY encrypts two-factor secrets, stored S3 credentials, SMTP passwords and plugin secrets. Replacing it makes them unreadable. Back it up with your .env.

What gets started ​

ServiceImage / buildPublished portNotes
postgrespostgres:16-alpinenoneVolume postgres_data
apiapi/Dockerfile127.0.0.1:4000Applies db/schema.sql at startup
webweb/Dockerfile127.0.0.1:3000The panel
pluginsplugins/host/DockerfilenoneRead-only root, no capabilities, own network shared with the API only
updaterapi/DockerfilenonePerforms in-panel updates; has the Docker socket
s3SeaweedFS127.0.0.1:9000Opt-in: docker compose --profile bundled-s3 up -d

Ports bind to loopback by default. API_BIND and WEB_BIND in .env change that; for anything reachable from a network, put a reverse proxy with TLS in front.

First sign-in ​

Open the panel, create the administrator and enrol an authenticator. The first administrator can only be created while none exists; do not expose a fresh install to the internet before you have done this.

Uninstall ​

sh
docker compose down        # keeps the database and S3 volumes
docker compose down -v     # also deletes the database and local S3 data

Released under the AGPL-3.0-only license.