Deploy an application
A repository deployment has four visible stages: validate the manifest, obtain an image, create a plan, and verify the applied result. vops never builds an application image on the target VPS or the developer’s workstation.
Before you start
You need:
- a repository with a valid
flui.yaml; - a reachable host in
vops host list; - an image already published, or a GitHub repository whose workflow vops can trigger;
- values for every declared runtime setting or secret.
Validate first:
vops spec validate flui.yamlvops app preflight web-1Both commands are non-mutating.
Obtain the application image
If you already have an immutable image reference, keep it for the plan:
ghcr.io/acme/my-api:4f3c2a1To use GitHub Actions, let vops write a reviewable workflow:
vops build setupgit diff -- .github/workflows/vops-build.ymlYou decide whether to commit and push that file. Once the workflow exists on GitHub, trigger it and wait for the published image reference:
vops build run --waitvops build statusThe GitHub PAT is read from the local encrypted store, VOPS_GITHUB_TOKEN or
the --token input. A private container package may also require a read-only
registry token at apply time.
Create the immutable plan
vops deploy plan \ --spec flui.yaml \ --host web-1 \ --image ghcr.io/acme/my-api:4f3c2a1 \ --domain api.example.comPlanning writes a versioned artifact under .vops/plans/ and changes nothing
on the host. Review:
- application and target host;
- component images;
- declared secrets;
- endpoints and exposure;
- domain, TLS and optional access gate;
- warnings and coexistence notes.
Do not put secret values into the manifest or plan file. Supply declared values
with --set KEY=value; vops keeps them outside the immutable public plan
material.
Apply exactly what you reviewed
vops deploy apply --plan <plan-id> --yesAt apply time vops derives the plan again. If the manifest, host or relevant inputs no longer produce the approved plan, it refuses as stale rather than silently deploying something else.
For a private registry:
VOPS_REGISTRY_TOKEN=... \ vops deploy apply \ --plan <plan-id> \ --registry-user <user> \ --yesUse a token scoped to pulling packages.
Verify from the workstation
vops deploy verify --app my-apiVerification checks the host units and containers, then performs the applicable DNS and HTTP or HTTPS checks from the workstation. A successful upload is not enough evidence that a public application is reachable.
If verification fails:
vops app status my-apivops app logs my-api --lines 200vops ingress status web-1See Troubleshooting for a fuller diagnostic path.
The shorter interactive path
For direct human use, vops app deploy combines preflight, plan rendering and
approval:
vops app deploy -f ./flui.yaml --host web-1 --image <image>vops app deploy -f ./flui.yaml --host web-1 --image <image> --yesUse the explicit deploy plan → apply → verify path when the plan must be
reviewed, handed between tools or approved for an agent session.