Operate / System Ops

Updates and recovery

Native updates stage a candidate release, validate it, build frontend assets, and switch the active symlink with readiness-gated rollback. They do not reset the live checkout or clear its assets.

Before updating

Back up the environment file and persistent data. Keep SSH access independent of the dashboard. Confirm Node.js 24 and service-account permissions. The native updater currently follows origin/main; published release artifacts do not yet change that update channel.

sudo bash /opt/system-ops/scripts/deploy.sh

Settings → Update now invokes the native background worker where supported. Automatic daily updates are optional; enable them only after validating the recovery path for your deployment.

Recovery

sudo bash /opt/system-ops/scripts/recover.sh
sudo systemctl status system-ops.service
sudo journalctl -u system-ops.service -n 100 --no-pager
curl -i http://127.0.0.1:9080/ready

An old installation with a broken dashboard launcher needs an initial SSH update. See atomic releases for the one-time permission/wrapper repair and custom-port readiness configuration.

Rollback preserves shared data; it cannot undo an incompatible schema migration. Future schema changes need explicit backup/rollback instructions. The current helper retains release directories rather than deleting them automatically.

Docker

Update your source checkout, rebuild/recreate the image, and keep the data volume:

git pull --ff-only
docker compose --env-file .env.docker up -d --build

Record the previous image/source revision so you can recreate it if needed. The default container does not support the native dashboard updater. See installation limits.