# Set up updates from the web interface | RenewCMS Docs

> Install the systemd update helper once, then download and install signed RenewCMS releases from Settings.

Canonical page: https://renewcms.dev/en/resources/browser-updates

## Check your installation

Browser updates require the standalone RenewCMS binary (v2.6.0-beta or later) running as an unprivileged systemd service on Linux. Keep the executable and its parent directory under root control. You need sudo access on the server for setup and a RenewCMS owner account to apply updates. Docker deployments update by pulling a new image and recreating the container.

Back up the database, uploads, configuration and current executable before testing or applying an update. The helper uses fixed systemd unit names, so configure it for one RenewCMS instance per host.

## Find your service settings

The commands use the installation guide’s service and environment file. Substitute your actual unit and configuration path. Use the directory containing `DB_FILE` for SQLite. Resolve relative paths against the service’s `WorkingDirectory`. For example, `./data/renewcms.db` under `/var/lib/renewcms` gives `/var/lib/renewcms/data`. Keep your existing database path. With an external database, use RenewCMS’s configured `DATA_DIR`.

```bash
systemctl show renewcms -p User -p WorkingDirectory -p ExecStart -p EnvironmentFiles
sudo grep -E '^(DB_FILE|DATA_DIR|PORT)=' /etc/renewcms/renewcms.env
```

## Enable the update helper

Run this once on the server. Adjust both executable paths, the service name, the data directory and the port. Use the local port where RenewCMS answers `/healthz` on `127.0.0.1`. The command installs and starts the systemd watcher and writes `update-helper.json` in the data directory.

```bash
sudo /opt/renewcms/renewcms enable-browser-updates \
  --service renewcms \
  --binary /opt/renewcms/renewcms \
  --data-dir /var/lib/renewcms \
  --port 8080
```

## Verify setup and test a restart

The path unit should report `active` and `enabled`. Reload Settings as the owner and find Updates. With no update staged, you can test the helper by selecting Restart and confirming. The site is briefly unavailable. Wait for it to return, then check `/healthz` on your public CMS URL.

```bash
systemctl is-active renewcms-update.path
systemctl is-enabled renewcms-update.path
```

## Install an update from Settings

In Settings → Updates, choose Check for updates. If a newer version is available, read its release notes and choose Update. RenewCMS downloads and verifies the signed release while your site stays online.

When the update is ready to install, save any work in progress, choose Restart and confirm. You can wait for a maintenance window before restarting. Once the site returns, verify the new version in Settings and check `/healthz` on your public CMS URL.

## Diagnose a missing button or failed update

If Restart is missing, confirm you are signed in as the owner and check that the service user can read `update-helper.json` in the actual data directory. If you set up the helper with the wrong directory, run `disable-browser-updates` with the original service name and data directory before enabling it with the correct settings.

If the site does not come back or the update fails, inspect `update-result.json` in the data directory, check the helper journal and test the local health endpoint. Automatic rollback restores the previous executable. If you need to undo a database migration, use your database backup.

```bash
sudo journalctl -u renewcms-update.service -n 30 --no-pager
curl -fsS http://127.0.0.1:8080/healthz
```
