8. Required post-install work and day-to-day operations
POC deployment manual chapter. Verified against the 2026.10 mainline; command output follows the installer delivered for that engagement.
Back to overview · Full table of contents · Download full PDF
This chapter: a finished install is not a finished handover. The first three sections are three things that must be done on install day — copy key material off the host, take the first platform backup and move it off-host, and clean temporary files. The last four sections are the commands used in day-to-day operations, how to read logs, how to change deployment configuration, and emergency recovery of the root password and the admin-network CIDR. The readers are the implementation engineer and the customer system administrator who takes over operations. Every command in this chapter runs as root on the install host and does not depend on whether the console is available.
8.1 Off-host backup of key material
Applies to: must be done on install day; redo later when the master key is rotated or secret-service material changes.
Prerequisite: install is complete; a controlled storage location isolated from the install host has been agreed with the customer (a different host, different storage, preferably a different site), and a keeper named.
A platform backup (section 8.2) includes /opt/zenova/.env (which holds the master key) but does not include secret-service material /etc/zenova/secret-service/. The secret-service keys/ directory encrypts every credential the platform stores (model-provider keys, object-storage keys, and similar). Without it, even with a platform backup, you cannot restore a usable platform onto a new host.
Procedure
- Pack the key material and compute the digest.
# Install host · root · write (creates the key-material archive under /root)
umask 077
tar -C / -czf /root/zenova-keys-$(hostname)-$(date +%Y%m%d).tar.gz \
etc/zenova/secret-service opt/zenova/.env
sha256sum /root/zenova-keys-*.tar.gz- Copy the archive to the storage location isolated from the install host, using the customer's controlled method.
- Recompute SHA-256 at the storage location and compare it character by character with the output of step 1.
- Fill in the register below and file it with the handover materials (the register itself contains no key content).
- After the copy succeeds and the digest matches, delete the archive on this host (see section 8.3).
| Register item | Fill in |
|---|---|
| Archive file name | zenova-keys-<hostname>-<date>.tar.gz |
| SHA-256 digest | |
| Storage location | |
| Keeper | |
| Backup date | |
| Date the on-host archive was deleted |
What you will see
/rootcontainszenova-keys-<hostname>-<date>.tar.gz, readable only by root (guaranteed byumask 077).sha256sumprints one line: a 64-character hex digest and the file name.
Note: High risk. This archive contains the master key and every encryption key of the secret service. Leakage is equivalent to leaking every credential the platform stores; loss means the platform cannot be restored from backup. Handle it as the customer's highest-classification data: do not send it over instant messaging, email, a ticket, or a cloud-drive share link; do not store it in the same place as the platform-backup file (section 8.2); when the keeper changes, leave a trace on the register.
Note: with a custom install root (--install-dir), replace opt/zenova/.env in the command with <install-root>/.env (without the leading /).
8.2 First platform backup and off-host copy
Applies to: immediately after install and Chapter 7 acceptance; also before every upgrade and every important configuration change.
Prerequisite: enough free space on the install host; see the notes in this section.
Procedure
- Back up immediately, list the backup ID, then export it as a single archive.
# Install host · root · write (creates the local backup and the export archive)
sudo zenova backup
sudo zenova backup list
sudo zenova backup export <backup-id> --output /root/zenova-install/first-install.zbackup- Compute the export-file digest, copy it to a controlled location in a different failure domain from the install host (a different host, different storage device, preferably a different site), and confirm the digest matches at the destination.
# Install host · root · read-only
ls -l /root/zenova-install/first-install.zbackup
sha256sum /root/zenova-install/first-install.zbackup- Record in the handover materials: backup ID, export file name, digest, off-host location, keeper, date.
What you will see
zenova backup listlists local backups, newest first. The backup ID looks likezb-20261020T020000Z-1a2b3c4d(zb-+ UTC time + 8-character random string).- Local backups are stored under
/opt/zenova/data/backups/<backup-id>/. - The export file mode is
0600.
Backup scope:
| Object | Included |
|---|---|
| PostgreSQL deployed by the installer | Yes |
| Existing PostgreSQL | No; the customer database administrator backs it up with their mechanism |
| ClickHouse (installer-deployed and existing service) | Yes; exported through the HTTP interface |
| Bundled object storage / local directory | Yes |
| Existing S3-compatible storage | No; the customer storage administrator is responsible |
Install state (.env, .env.runtime, etc, state/install.json) | Yes |
Secret-service material /etc/zenova/secret-service/ | No; back it up separately per section 8.1 |
Note: the export file is not compressed, not additionally encrypted, and contains the master key. Store it at the highest classification, separate from the key-material archive in section 8.1. Do not put them on the same host or in the same bucket.
Note: space needed is about "local PG data directory + local object-data directory + 1 GiB". The local backup and the export file each take a copy. Before export, confirm both /opt/zenova and /root/zenova-install have headroom.
Note: local backups sit under /opt/zenova/data, on the same volume as platform data. Leaving only a local backup does not count as a backup — a host or disk failure loses them together, and wipe-and-reinstall (Chapter 11) deletes them as well. Always copy off-host.
Note: restore requires the same version, product, deployment form, and platform. A backup from an older version cannot be restored onto a newer install. After an upgrade, take a new backup and copy it off-host.
8.3 Clean temporary files
Applies to: after sections 8.1 and 8.2; do a final pass when handover acceptance finishes.
Prerequisite: the key-material archive and the platform-backup export file have both been copied off-host, and the digest matches at the destination.
Procedure
- Handle each class of file per the table.
| File | Location (follow the actual staging directory) | Handling |
|---|---|---|
Secrets file secrets.toml | /root/zenova-install/secrets.toml | Delete immediately after install, or hand over under the customer's credential-management rules |
Answers file answers.toml | /root/zenova-install/answers.toml | Keep a copy with the handover materials (no passwords) |
| Key-material archive | /root/zenova-keys-<hostname>-<date>.tar.gz | After the off-host copy and digest check, delete the on-host file |
| Platform-backup export file | /root/zenova-install/first-install.zbackup | After the off-host copy and digest check, delete the on-host copy if the customer requires it |
| Installer and offline package | /root/zenova-install/ | Keep until handover acceptance finishes; still needed for gateway-node install, reconfigure, and upgrade troubleshooting |
| Doctor and status reports | /root/zenova-install/doctor*, status.json | File with the handover materials |
- Delete the secrets file and the archives that have been copied off-host.
# Install host · root · delete (secrets file and the copied-off key-material archive and backup export)
rm -f /root/zenova-install/secrets.toml
rm -f /root/zenova-keys-*.tar.gz
rm -f /root/zenova-install/first-install.zbackup
ls -la /root/zenova-install/ /root/What you will see: ls no longer shows secrets.toml, zenova-keys-*.tar.gz, or first-install.zbackup; the installer, offline package, and answers.toml are still there.
Note: delete only the files listed above. Do not delete /opt/zenova/state/answers.toml (install record, used by upgrade and reconfigure) or any file under /opt/zenova/.env.runtime/. The initial-password file root-password-initial becomes invalid after the root password is changed and does not need to be deleted by hand.
Note: do not delete the key-material archive before the off-host copy and digest check finish. If the copied copy is then found corrupt, pack again per section 8.1.
8.4 Day-to-day operations command cheat sheet
Applies to: daily inspection, incident handling, change windows. All commands run as root on the install host and do not depend on the console.
Procedure
Pick the command by "when to use it".
| Command | Effect | When to use it |
|---|---|---|
zenova status [--json] | Each service's status, current version, instances, in-progress and last upgrade | Daily inspection; first step when the console will not open; before and after any change |
zenova doctor [--target <URL>] [--json] | Full host and connectivity doctor; prints diagnostic codes and remedies. --all shows every item; --save saves the report | A service is abnormal and the cause is unclear; before sending to support; connectivity to a model or tool address (--target) |
zenova start <service> | Start a service whose name starts with zenova- | Recover after a service was stopped by hand |
zenova stop <service> | Stop a service whose name starts with zenova- | Need to stop services in a maintenance window; stop the control-plane group before restore |
zenova restart <service> | Restart a service whose name starts with zenova-; control plane, background worker, and runtime store resolve the current slot automatically | zenova status shows a service not running, and you have already looked at the logs |
zenova upgrade <package.zpkg> | Upgrade (run with the new version's installer) | Upgrade in a maintenance window; the same flow as console System Updates (Chapter 10) |
zenova backup | Back up now | Before an upgrade, before an important configuration change, periodic backup |
zenova backup list | List local backups, newest first | Look up a backup ID |
zenova backup export <backup-id> --output <file> | Export as a .zbackup archive | Copy to another failure domain |
zenova backup import <file> | Import a .zbackup and register it as a local backup | Prepare restore on a new host or a reinstalled host |
zenova backup delete <backup-id> | Delete one local backup | This host is short of space, and that backup has been copied off-host |
zenova restore <backup-id-or-archive> | Restore from a backup; type RESTORE to confirm | Restore after data corruption or a mistaken operation; overwrites current data |
zenova root-password show | View the initial root password | Forgot the initial password before the first password change (section 8.7) |
zenova root-password set | Reset root | root forgot the password, or every two-factor method is lost (section 8.7) |
zenova infra upgrade <package> | Upgrade infrastructure deployed by the installer | Pre-upgrade check reports that the infrastructure version does not meet the requirement |
zenova config set <key> [--value-stdin] | Change an online-changeable deployment-configuration item (18 items) | The console is unavailable, or the change must be scripted (section 8.6) |
zenova logs <component> [--since] [--follow] | View component logs | When a service is abnormal (section 8.5) |
zenova admin-network show/allow/disable | Admin-plane access CIDRs | A whitelist misconfiguration blocks the console from the customer network (section 8.7) |
What you will see: each command prints its result directly in the terminal. zenova doctor exits 0 when there is no blocking item, 2 when there is a blocking item.
Note: zenova start/stop/restart accept only service names that start with zenova-, for example sudo zenova restart zenova-edge. postgres, clickhouse, caddy, secret-service, and spicedb are managed with systemctl.
Note: before restore (zenova restore), take another backup of the current environment. Restore conditions: same version, product, deployment form, and platform; no upgrade in progress; control-plane group services already stopped. After restore and before starting the control-plane group, restart spicedb, secret-service, and rustfs first (omit rustfs when bundled object storage is not used).
Note: never clean or "reinstall" the platform with hand-written rm -rf, docker rm, systemctl disable, or similar. When a wipe is needed, use only the wipe-and-reinstall flow in Chapter 11.
8.5 How to read logs
Applies to: zenova status shows a service abnormal, install or upgrade failed, or you need to give logs to support.
Procedure
- View logs by component.
zenova logsresolves the systemd unit currently corresponding to that component (the control plane locates the slot currently taking traffic) and then callsjournalctl.
# Install host · root · read-only
sudo zenova logs control-plane --since '30 min ago'
sudo zenova logs edge --follow- For services not in the component list, view by unit name with journalctl.
# Install host · root · read-only
journalctl -u [email protected] --since '30 min ago' --no-pager
journalctl -u spicedb.service --since '30 min ago' --no-pager- Process logs for install, resume, and reconfigure are in
install.log.
# Install host · root · read-only
tail -n 200 /opt/zenova/state/install.log- Logs of a remote gateway node are viewed on the node host.
# Node host · root · read-only
sudo zenova logs node-edge --since '30 min ago'
sudo zenova logs node-caddy --since '30 min ago'- When sending to support, collect everything once with the commands below.
# Install host · root · write (creates files only under /root/zenova-install)
sudo zenova status --json > /root/zenova-install/status.json
sudo zenova doctor --all --save /root/zenova-install/doctor
sudo zenova logs control-plane --since '30 min ago' > /root/zenova-install/control-plane.log
sudo cp /opt/zenova/state/install.log /root/zenova-install/Component-to-unit mapping (Linux; zenova logs has 8 components):
zenova logs component | Notes | Matching systemd unit | Which host |
|---|---|---|---|
control-plane | Control plane | zenova-control-plane@<current-slot>.service | Install host |
edge | Gateway data plane (central gateway node) | zenova-edge.service | Install host |
caddy | Ingress (Caddy) | caddy.service | Install host |
postgres | PostgreSQL | postgres.service | Install host (only when deployed by the installer) |
clickhouse | Analytics database (ClickHouse) | clickhouse.service | Install host (only when deployed by the installer) |
secret-service | Secret service | secret-service.service | Install host |
node-edge | Gateway-node data plane | zenova-node-edge.service | Remote node host |
node-caddy | Gateway-node ingress (Caddy) | zenova-node-caddy.service | Remote node host |
Other service units (view with journalctl -u <unit>): zenova-worker@<slot>, zenova-updater, spicedb, rustfs, and capability components such as qdrant, docling, zenova-runtime-store@<slot>. Which units actually exist follows the capabilities installed on this host.
What you will see
zenova logsoutput is the content ofjournalctl -u <unit>. Without--followit prints once and exits; with--followit keeps following untilCtrl+C.- A wrong component name reports "unknown log component …" and lists every available component.
Note: service logs on Linux are stored by journald. --since is passed through to journalctl --since and accepts formats journalctl accepts, such as '30 min ago' or '2026-10-20 09:00'. There is no directory such as /opt/zenova/<service>/logs/; do not look for logs on that path.
Note: logs may contain request content and internal addresses. Review them against the customer's data-management rules before sending them to support. Do not send .env, key material, or the initial-password file.
8.6 Change deployment configuration
Applies to: access-URL change, object-storage parameter adjustment, operations-notification channel change, resource-capacity adjustment, ingress-port change, and similar post-install configuration changes.
Prerequisite: no upgrade is in progress; the previous change has finished taking effect. Back up first per section 8.2 before the change.
Procedure
- Prefer the console. A platform administrator opens System maintenance › Deployment configuration, chooses Edit on the target item, fills in the new value, and saves. The page has seven groups:
| Group | What can be changed |
|---|---|
| Access URL | Access domain (admin access address can be changed with ADMIN_PUBLIC_URL) |
| Object storage | Service address, region, bucket, addressing style, access keys, and payload-archive and audit-archive buckets (the object-storage mode cannot be changed) |
| Operations notification channel | Addresses for ordinary alerts, critical alerts, and heartbeat notifications |
| Trace export | External OTLP receiver address (filling in an address does not by itself turn export on) |
| Resource capacity | Control-plane database max connections (12–200) |
| Ingress listen | Ports and bind NICs for the business ingress and admin ingress |
| Data dependencies | View deployment mode and operator of the platform database, analytics database, and object storage |
- When the console is unavailable or the change must be scripted, use the command line. Ordinary items take the value on the command line:
# Install host · root · write (change the access URL; related services reload or restart)
sudo zenova config set PUBLIC_URL <new-access-url>
echo "exit code: $?"- Sensitive items must not be written on the command line. Enter them at the prompt (not echoed), or read them from standard input with
--value-stdin:
# Install host · root · write (change the object-storage secret access key; enter at the prompt, not echoed)
sudo zenova config set LP_OBJECT_STORE_ACCESS_KEY_SECRET- After the change, check service status with
sudo zenova statusand make one real business call per section 7.3.
The 18 keys zenova config set can change:
| Key | What it is |
|---|---|
PUBLIC_URL | Access URL |
ADMIN_PUBLIC_URL | Admin access URL |
ZENOVA_OBJECT_STORE_MODE | Object-storage mode (cannot be changed online; see the note) |
LP_OBJECT_STORE_ENDPOINT | Object-storage service address |
LP_OBJECT_STORE_REGION | Object-storage region |
LP_OBJECT_STORE_BUCKET | Platform-data bucket |
LP_OBJECT_STORE_ADDRESSING | Addressing style |
LP_OBJECT_STORE_ACCESS_KEY_ID | Object-storage access-key ID |
LP_OBJECT_STORE_ACCESS_KEY_SECRET | Object-storage secret access key (sensitive) |
LP_PAYLOAD_STORE_BUCKET | Payload-archive bucket |
LP_PAYLOAD_STORE_ACCESS_KEY_ID | Payload-archive access-key ID |
LP_PAYLOAD_STORE_ACCESS_KEY_SECRET | Payload-archive secret access key (sensitive) |
LP_AUDIT_ARCHIVE_STORE_BUCKET | Audit-archive bucket |
OTEL_EXPORTER_OTLP_ENDPOINT | Trace-export address |
LP_DB_MAX_CONNECTIONS | Control-plane database max connections |
Key names follow the command's actual prompt. A key not in the list reports "<key> is not a changeable deployment-configuration item" and lists every changeable key.
What you will see
- Console: "saved; applying the new value", then the number of services restarted. Sensitive items show only Set or Not set; the previous value is not echoed.
- Command line: first "saved; applying the new value…", then possibly "restarted: …" and "install record updated: …", last line "the change has taken effect".
- An empty value clears that item.
| Exit code | Meaning | Remedy |
|---|---|---|
| 0 | Has taken effect | Check per step 4 |
| 1 | The new value was saved, but a service failed to restart, or the console could not switch to the new configuration (it still runs on the old one) | sudo zenova status, then logs per section 8.5 |
| 2 | Key or value is not valid (including a sensitive item written on the command line, or a missing new value) | Follow the prompt and retry |
| 3 | An upgrade is in progress | Wait until the upgrade finishes, then change |
Note: the object-storage mode cannot be changed online after install. The console reports "online change is not supported: back up, reinstall with the new choice, then restore". When a change is needed, schedule a maintenance window and follow backup → reinstall → restore.
Note: ingress ports and bind NICs can be changed only under Ingress listen on the console; they cannot be changed with zenova config set. After changing the business ingress, external callers and remote gateway nodes must use the new port. After changing the admin ingress, the current page URL is invalid; use the new URL the page gives. The installer opens firewall ports only on first install. After a port change, operations adjust the firewall, load balancer, and the public access URL under Gateway → Entry & certificates.
Note: changing Resource capacity restarts the control plane. The console is briefly unavailable; gateway requests are not affected.
Note: do not edit files under /opt/zenova/.env.runtime/ or /opt/zenova/etc/ by hand. They are generated by the installer and configuration compilation. Hand edits are overwritten on the next change, upgrade, or reconfigure, or they prevent services from starting. /opt/zenova/.env contains the master key; do not edit it by hand either.
Note: credentials of existing-service databases and object storage are rotated by the customer administrator. The Deployment configuration page does not provide credential rotation for those dependencies.
8.7 Recover the root password and two-factor authentication; emergency admin-network access
Applies to: root forgot the password, or both the two-factor device and the recovery codes are lost; or the Admin-plane access CIDRs whitelist is wrong, so the console cannot be reached from the customer network.
Procedure
A. View the initial password before the first password change
- Before the initial password has been changed, you can view it again:
# Install host · root · read-only
sudo zenova root-password showB. Reset root
- When root forgot the password, or both two-factor authentication and the recovery codes are lost:
# Install host · root · write (reset the root password, clear two-factor authentication, and invalidate sessions)
sudo zenova root-password set- Sign in with the new password printed in the terminal and change the password as the page requires. If Require two-step verification is on at platform scope, the page then asks you to bind two-factor authentication again (authenticator app or passkey); store the new recovery codes. If it is off, bind again by following steps 5–6 in Section 6.1. Password change and binding each have a 10-minute limit; after timeout, sign in again.
C. Emergency admin-network access
- View the current whitelist:
# Install host · root · read-only
sudo zenova admin-network show- Append a CIDR allowed to reach the admin console:
# Install host · root · write (append an allowed admin-plane CIDR)
sudo zenova admin-network allow --cidr <cidr>- Or turn the whitelist off:
# Install host · root · write (disable the admin-plane CIDR whitelist)
sudo zenova admin-network disable- After access is restored, sign in as root, open Platform accounts & sign-in › Sign-in methods, and reconfigure the correct CIDRs under the Allow only these CIDRs to reach the admin console switch.
What you will see
root-password show: prints the initial password before the first password change; after the change the initial password is invalid.root-password set: prints a newly generated random password; root's existing two-factor authentication and recovery codes are cleared, every root session is invalidated, and the action is written to the audit log.admin-network: the change takes effect on every instance in about 10 seconds. Access to the console from this host's loopback is always allowed.
Note: the new password printed by root-password set is like the initial password: do not send it over instant messaging, email, or a ticket, and do not record or screenshot it for anyone off the host. Before running it, confirm the terminal is not being recorded or shared.
Note: with an http:// access URL the sign-in page does not offer passkeys; two-factor authentication can use only an authenticator app.
Note: these two command groups recover only platform root. When a tenant administrator loses two-factor authentication, a platform administrator opens that tenant's detail under Tenants and Reset two-factor authentication on the Admins tab.
Note: before turning on Allow only these CIDRs to reach the admin console, add both the implementing party's and the customer's operations CIDRs. admin-network disable is for emergency only; after recovery, turn it back on and check the CIDRs.
Capability notes
| Not provided | Alternative |
|---|---|
| Platform backup automatically including secret-service material | Pack /etc/zenova/secret-service/ and .env separately per section 8.1 and keep them off-host |
| Automatic encryption or compression of the backup export file | The export is uncompressed, unencrypted, and contains the master key. Copy it onto the customer's encrypted storage or encrypted media and keep it at the highest classification |
| Backing up existing PostgreSQL and existing S3 | Protected by the customer database administrator and storage administrator using their backup mechanisms |
| Changing the object-storage mode online | Back up, reinstall with the new choice, then restore |
Changing ingress ports and bind NICs with zenova config set | Change them under Deployment configuration › Ingress listen on the console, and adjust the firewall and load balancer to match |
Starting or stopping non-zenova- services such as postgres, clickhouse, and caddy with the zenova command | Use systemctl status/restart <name>; logs with zenova logs <component> or journalctl -u <unit> |
| Recovering the root password through the console | Run sudo zenova root-password set on the install host |
Previous: 7. Installation acceptance · Next: 9. Add a remote gateway node
7. Installation acceptance
POC deployment manual chapter. Verified against the 2026.10 mainline; command output follows the installer delivered for that engagement.
9. Add a remote gateway node
POC deployment manual chapter. Verified against the 2026.10 mainline; command output follows the installer delivered for that engagement.