Skip to content

Quick start#

Try the demo#

To see manent at work before installing anything, the demo image runs in one container the server, the web interface, a worker and five hosts reached over SSH, with a few minutes of release history:

git clone https://github.com/manent-deployer/manent.git && cd manent
docker build -f demo/Dockerfile -t manent-demo .
docker run --rm -p 8080:8080 -p 9000:9000 --name manent-demo manent-demo

Open http://localhost:8080 (port 9000 is the demo identity provider, which signs you in as John Doe with no password), then release shop to production in waves (a canary host, then one region at a time, each behind a health gate) and try a broken version, which manent rolls back by itself:

docker exec -it manent-demo manent deploy -f /demo/deploys/shop-1.3.0.yml
docker exec -it manent-demo manent deploy -f /demo/deploys/shop-1.4.0.yml
docker exec -it manent-demo manent logs <id> --level warn
docker exec -it manent-demo manent inventory

manent demo

The demo has no login and keeps its data inside the container: it is not a configuration for real environments. The steps below build manent and run it on your machine.

Requirements#

  • Go 1.27 or later. go.mod pins the 1.27.x toolchain: with an older Go it is downloaded automatically (GOTOOLCHAIN=auto).
  • No database to install to try manent: by default DBOS uses a SQLite file (manent.db). Production needs Postgres.

Build#

make build      # bin/manent (client) and bin/manent-server
make plugins    # optional: external plugins in bin/ (manent-plugin-remote-copy)

First deploy#

  1. Check the descriptor. validate computes the step plan and shows the effective deploy, without starting anything:

    bin/manent-server -c configs/manent.yml validate -f examples/descriptor.yml --offline
    

    --offline skips reading the environment configuration (for example from Consul).

  2. Start a worker. Deploys are run only by a worker. serve starts the HTTP API on :8080 and a worker in the same process:

    bin/manent-server -c configs/manent.yml serve
    
  3. Queue the deploy from another terminal with the manent client, which by default talks to the local server (http://127.0.0.1:8080). The command waits for the deploy to finish and prints the result:

    bin/manent deploy -f examples/descriptor.yml
    

    The example descriptor copies the artifact over SSH to 192.168.1.10: adapt artifact.source, deploy.targets and the secrets to your environment, or use --dry-run to see what would happen without touching the targets.

  4. Check the status at any time:

    bin/manent list
    bin/manent status <id>
    

The same deploy can be queued through the API, with the descriptor in JSON:

curl -X POST localhost:8080/api/v1/deployments \
  -H 'Content-Type: application/json' \
  -d @examples/descriptor.json

Next steps#