Install

Two pieces, and most people need only the first.

The server#

Requires Docker and Docker Compose. Nothing else — no Go, no Node, no Postgres of your own.

mkdir pando && cd pando
curl -fsSLO https://github.com/bemeek-io/pando/releases/latest/download/docker-compose.yml
docker compose up -d

That starts the published image, trypando/pando, with the Postgres and BuildKit it needs beside it. Open http://localhost:8080.

The compose file pins the image to its release. To upgrade, download the newer release's docker-compose.yml over it and run docker compose up -d again; your apps and data are kept in named volumes. Postgres is only reachable from the other containers, and its password defaults to pando; to choose your own, put POSTGRES_PASSWORD=... in a .env file beside the compose file before the first start.

The image is built on Docker Hardened Images, for linux/amd64 and linux/arm64, and signed; checking the signature is in docs/releasing.md. Its server runs as a non-root user. To build it from source instead, clone the repository, sign in with docker login dhi.io, and run docker compose up -d --build, as described in CONTRIBUTING.md.

The CLI#

Optional. It is the same binary as the server and talks to an installation over its API, so it goes on your own machine rather than on the host, and everything it does can also be done in the console.

macOS, and Linux with Homebrew 4.5 or newer:

brew install bemeek-io/tap/pando

Debian and Ubuntu: take a version from the releases page and download the .deb for your architecture.

VERSION=0.2.0   # the release you want
curl -LO https://github.com/bemeek-io/pando/releases/download/v${VERSION}/pando_${VERSION}_linux_amd64.deb
sudo apt install ./pando_${VERSION}_linux_amd64.deb

The same page has .rpm and .apk packages, and plain tarballs for macOS and Linux on both architectures. Every command and flag: docs/cli.md. To build it from source instead:

go install github.com/bemeek-io/pando/cmd/pando@latest

Or skip installing it and use the copy already inside the container, via docker compose exec pando pando ….

First sign-in#

A new installation has no accounts. Open the console and Pando asks you to set up the administrator: choose a username and password there, and you are signed in.

Whoever reaches the console first sets up the administrator, so do this before anyone else can reach Pando. To create the account at startup instead, for an unattended install, supply its password; you are asked to change it when you first sign in:

# Read only on first run, when there is no account yet.
PANDO_ADMIN_PASSWORD=... docker compose up -d

If the administrator's password is lost, reset it from the host. This ends every session for that account:

docker compose exec pando pando admin reset-password

pando admin talks to the database rather than the API, so it works when nobody can sign in.

Deploying your first app#

In the console, choose Add app and paste a repository URL. Pando clones it and shows you a proposal: which build method it chose, which port it thinks the app listens on, which services it appears to need, and what it is unsure about. Review it and accept. Anything it could not determine becomes a question rather than a guess.

Apps are reachable on their own port, starting at http://localhost:9000, and the address is shown on the app's page. Twenty ports are published by default; PANDO_APP_PORT_START and PANDO_APP_PORT_END change the range.