Applications, ingress and backups
Application commands compile a catalog entry or flui.yaml into services on a
known host. Ingress and backup commands remain separate so public exposure and
data retention are explicit choices.
Specification and catalog
vops spec templatesvops spec generate --template node --name my-api --output-file flui.yamlvops spec validate flui.yamlvops spec schema
vops catalog productsvops catalog blocksvops catalog describe <id>vops app catalogSpec validation changes nothing and exits non-zero with structured errors when the manifest is invalid.
Build and immutable deployment
vops build setupvops build run --waitvops build status
vops deploy plan --spec flui.yaml --host web-1 --image <image>vops deploy apply --plan <plan-id> --yesvops deploy verify --app my-apivops writes and triggers a GitHub Actions workflow; it never builds the application image locally or on the VPS. The plan is re-derived before apply and is refused when stale.
Direct application workflow
vops app preflight web-1vops app setup web-1 --yesvops app deploy -f ./flui.yaml --host web-1 --image <image>vops app deploy -f ./flui.yaml --host web-1 --image <image> --yes
vops app install uptime-kuma --host web-1vops app install uptime-kuma --host web-1 --yesWithout --yes, deploy and install render their plan. Use --set KEY=value for
values declared by the selected manifest.
Day-two application commands
vops app listvops app show my-apivops app status my-apivops app logs my-api --lines 200vops app restart my-apivops app shell my-apivops app credentials my-apivops app remove my-api --yesapp credentials --show reveals values read back from the host and should be
used deliberately. app remove --purge --yes also destroys volumes and secrets;
the default removal path keeps persistent data separate.
Ingress and TLS
vops ingress up web-1 --email you@example.comvops ingress status web-1vops app expose my-api --domain api.example.com --yesvops app unexpose my-api --yesvops ingress down web-1Ingress owns ports 80 and 443 and refuses to start when another service already
owns them. app expose routes an application through the host ingress and can
request TLS or a basic-auth gate. Removing ingress while routes remain requires
the command-specific force path.
Backups
vops backup setup web-1 \ --paths /etc,/var/lib/my-api \ --to s3:https://s3.example.com/bucket \ --dry-run
vops backup setup web-1 \ --paths /etc,/var/lib/my-api \ --to s3:https://s3.example.com/bucket
vops backup run web-1vops backup status web-1vops backup snapshots web-1vops backup restore web-1 --snapshot latest --target /srv/restore --yesRestore writes into an explicit target directory and never overwrites the live
path in place. Removing backup configuration keeps the repository unless
--purge-repo is explicitly selected.