Skip to content

CLI Commands

Run ./bin/servestead --help or ./bin/servestead <command> --help for the complete flag list.

Terminal window
mkdir -p bin
go build -o ./bin/servestead ./backend
Terminal window
./bin/servestead ui
./bin/servestead ui --no-open
./bin/servestead ui --addr 127.0.0.1:8080 --no-open

ui accepts only local loopback addresses. The default chooses a random available port and opens the tokenized session URL.

Terminal window
./bin/servestead doctor
Terminal window
./bin/servestead keygen
Terminal window
./bin/servestead setup
./bin/servestead setup --ip 203.0.113.10

The first command opens the Terminal UI. The second begins an interactive profile-aware run for a known server address.

For a fully supplied scripted run:

Terminal window
./bin/servestead setup \
--ip 203.0.113.10 \
--private-key "$HOME/.ssh/id_ed25519" \
--domain example.com \
--email admin@example.com \
--yes
Terminal window
./bin/servestead provision \
--provider digitalocean \
--name production-vps \
--ssh-key provider-key-id-or-fingerprint

Direct provisioning creates a billable Droplet and stops after reporting its public IPv4 address. It does not create a completed setup plan.

Terminal window
./bin/servestead bootstrap \
--host 203.0.113.10 \
--admin-public-key "$HOME/.ssh/id_ed25519.pub" \
--private-key "$HOME/.ssh/id_ed25519"
Terminal window
./bin/servestead harden \
--host 203.0.113.10 \
--private-key "$HOME/.ssh/id_ed25519"
Terminal window
./bin/servestead network \
--host 203.0.113.10 \
--private-key "$HOME/.ssh/id_ed25519"
Terminal window
./bin/servestead proxy \
--host 203.0.113.10 \
--private-key "$HOME/.ssh/id_ed25519" \
--domain example.com \
--email admin@example.com \
--server-secret 'replace-with-a-long-random-secret'

Prefer a reviewed profile-aware setup unless a script intentionally manages each stage and secret.

Terminal window
./bin/servestead pangolin-credentials --profile <profile-id>
./bin/servestead pangolin-credentials --ip 203.0.113.10
Terminal window
./bin/servestead github-token set --profile <profile-id> --file /path/to/token.txt
./bin/servestead github-token set --profile <profile-id> --from-env
./bin/servestead github-token status --profile <profile-id>
./bin/servestead github-token remove --profile <profile-id>
Terminal window
./bin/servestead stack add \
--profile <profile-id> \
--compose /path/to/docker-compose.yml \
--publish web:3000:app
Terminal window
./bin/servestead stack env set --profile <profile-id> --stack <name> --file /path/to/.env
./bin/servestead stack env remove --profile <profile-id> --stack <name>
Terminal window
./bin/servestead secrets init --profile <profile-id>
./bin/servestead secrets status --profile <profile-id>
./bin/servestead secrets export-key --profile <profile-id>
./bin/servestead secrets import-key --profile <profile-id> --file /path/to/stack-secret-key.txt
Terminal window
SOPS_AGE_KEY_FILE=/path/to/stack-secret-key.txt \
sops -d stacks/<name>/servestead.secrets.yaml