Backup and upgrade
Backup
Section titled “Backup”veltro backup is the one backup for an install: the sign-in service and
every installed product go into the same archive. The same library runs
without the CLI package, which is what the Make targets and the POSIX shims
use:
veltro backup --to ./veltro-backup-$(date +%Y%m%d).tar# without the CLI package installed:python3 scripts/veltro_backup.py backup --to ./veltro-backup-$(date +%Y%m%d).tar# POSIX shim: scripts/veltro-backup.sh --to ./…Artifact veltro-backup/v1 (datastore layout suite) contains:
- One
pg_dump -Fcpersuite-postgresdatabase, taken assuite_admin:veltro_identityalways,vectorflow,sigmaticandwardenwhen selected - One key dump per
suite-redisindex: 0 VectorFlow, 1 Sigmatic cache, 2 Sigmatic queue, 3 Warden (only selected products) - OpenSearch snapshot of
sigmatic-*indices - Volume archives (
vf-data,sigmatic-data,warden-data, workload secrets) - The encrypted identity secret envelope and
versions.env manifest.jsonwith per-artifact sha256, module pins,backup_status,datastore_layoutand the database and Redis index lists
.env is excluded unless --include-env (prints a warning). Components are
captured sequentially, so the manifest records
consistency.is_coordinated_snapshot: false — it is not a distributed
snapshot. Scheduled backups use compose profile backup.
Use --encrypt or VELTRO_BACKUP_ARCHIVE_ENCRYPTION=true to encrypt the whole
Suite archive, including database dumps and its manifest. The archive password
and versioned key ID are separate from the identity secret-envelope password.
Keep historical mounted keys and an independent escrow copy while any archive
needs them.
Full procedure, including partial-backup semantics: backup and restore runbook.
Restore
Section titled “Restore”veltro restore ./veltro-backup-….tar# without the CLI package installed:python3 scripts/veltro_backup.py restore ./veltro-backup-….tarRefuses: backup suite major newer than installed; module versions newer than installed (restore, then upgrade).
Each database is dropped and recreated with its owner role, then restored
with pg_restore as suite_admin, keeping the owners in the dump. The
identity database gets its connect ACL back, and vectorflow is restored
between timescaledb_pre_restore() and timescaledb_post_restore(). Each
Redis index is flushed and refilled with RESTORE through the running
suite-redis, so its append-only file records the writes, and DBSIZE must
match the artifact’s key count.
Managed Lake backup and recovery have been removed. Archives containing
lake.clickhouse, lake.lifecycle or other retired Lake artifacts are refused
in full before any restore effects, including with --postgres-only. Take a new
backup without Lake content. There is no flag to skip those artifacts.
External ClickHouse sink data isn’t part of the suite archive. Back it up and restore it separately.
Upgrade
Section titled “Upgrade”Update the CLI first. The upgrade runs the CLI you already have, not the one
in the release, so it can’t pick up fixes the new release makes to the
upgrade itself. veltro upgrade refuses to start when the CLI is older than
the release you name, and prints the command to update it.
~/.veltro/venv/bin/python3 -m pip install -U veltro-cli==<release># or, if you installed it with pipx:pipx install --force veltro-cli==<release>
veltro upgrade --to <release> # --dry-run prints the planUse the first line if install.sh set up the CLI. Otherwise use the pip
of the environment veltro lives in. A CLI installed from a clone reports a
placeholder version, so the upgrade always refuses it. Install the published
veltro-cli==<release> to upgrade.
veltro upgrade fetches the release manifest, refuses downgrades, prints the
release’s breaking-change and migration notes, takes a backup, replaces the
version pins in versions.env, starts the new release, and checks that every
running Veltro container runs the image digest the release signs. An enrolled
VectorFlow agent is restarted on the new release before that check. Don’t edit
those pins by hand.
It also checks that identity’s install id, written once on the first install, is the same after the upgrade. A different one means the suite came up on a freshly initialised datastore, and the upgrade stops before recording the new version.
Remove managed Lake deployments first
Section titled “Remove managed Lake deployments first”Before stopping services or replacing release files, the upgrade reads
VectorFlow’s deployed and pending graphs from PostgreSQL. If any still contain
vectorflow_lake, including disabled nodes, it refuses and lists the pipeline
names and IDs. Pending deploy requests, promotions and active canaries count,
as do versions still assigned to an agent.
Use the installed release to remove those nodes and their edges. Keep every
surviving destination wired as it was, then deploy through the normal approval
flow. Cancel pending requests or canaries that contain Lake. Undeploy a pipeline
whose only destination was Lake until you’ve added a surviving destination.
Then retry the upgrade. Generic external clickhouse sinks don’t need changing.
PostgreSQL 16 to 18
Section titled “PostgreSQL 16 to 18”Releases after 0.26.x run PostgreSQL 18, which won’t open the data PostgreSQL
16 wrote. Upgrading from 0.26.x or earlier, veltro upgrade moves it: it stops
every service but the datastores, takes the backup, starts PostgreSQL 18 on a
new volume, restores into it and refuses unless every table’s row count and
every migration ledger match. The old volume, veltro-suite-pgdata, isn’t
touched, and veltro upgrade --rollback goes back to it. Expect downtime of a
few minutes per few GB of PostgreSQL data. The
PostgreSQL 18 upgrade runbook has the
details, the manual steps and what to remove once you’re satisfied.
Bundled Let’s Encrypt TLS was removed
Section titled “Bundled Let’s Encrypt TLS was removed”Releases up to 0.20.x could run Caddy with --tls auto, which got its own
certificate from Let’s Encrypt. That mode is gone. Running behind your own
reverse proxy is the recommended setup, and the bundled Caddy now only serves
a certificate you supply (custom) or one from its own CA (internal).
On an install made with --tls auto, veltro upgrade and every other command
that reads veltro.toml stop with an error and change nothing. They won’t
start the install without TLS. Move the install to one of these first, then
run veltro upgrade again:
- Your own proxy, the recommended route. Set it up as
TLS and your reverse proxy shows. The gateway’s address is
VELTRO_HTTP_PORTin.env: the auto install put it on loopback (127.0.0.1:8088unless you’d set a port), so change it if the proxy runs on another host. With Sigmatic installed, the old Caddy also served log ingest on port 8443, so point your shippers at/api/logs/on the public URL first, or have your proxy take over 8443 once the old Caddy is gone. Then settls_mode = "off"inveltro.tomland remove the old Caddy so it frees ports 80, 443 and 8443:docker rm -f veltro-tls. - Your own certificate in the bundled Caddy. Copy the certificate chain
and key to
tls/fullchain.pemandtls/privkey.pemand settls_mode = "custom"inveltro.toml. To keep serving the certificate Caddy already has while you sort out renewal, copy<host>.crtand<host>.keyfromtls/caddy-data/caddy/certificates/<ca>/<host>/(owned by root; for Let’s Encrypt<ca>isacme-v02.api.letsencrypt.org-directory). Nothing renews it, so it expires within 90 days.