Skip to content

Updates and renewals

Your licence includes one year of updates and support from the date you buy. During that year you can install every release we publish. After it ends, your install keeps working on the version it has.

Which releases you can install

A release is yours to install if it was published on or before your updates-until date. Your account at account.cvntechnologies.com shows that date on each licence.

  • Releases published inside your update year: install them any time, including after the year ends.
  • Releases published after your update year: listed, but marked "Not covered — renew". They do not install until you renew.

The updater never installs an older version than the one you run.

The Updates tab

Administrators find it under Configuration › General › Updates. It shows:

  • the installed version, your updates-until date and when the install last checked for releases,
  • the channel: Stable (the default) or Beta. Beta gets new releases before they reach Stable. You can switch back to Stable at any time,
  • Check now, which asks your account for the latest list,
  • Update status: the update that is queued or running, with its current step and log, or the result of the last one,
  • Releases, newest first, each marked Beta, Installed, Available or Not covered, with its release notes.

The install checks for releases once a day and shows administrators a notice when a newer release is available. Nothing installs on its own: an update only starts when an administrator picks a release and confirms.

The updates worker

Install queues the update. A dedicated queue worker runs it, so the update keeps going if you close the browser. Run this worker permanently, for example as a systemd service, as the user that owns the install (never as root):

php artisan queue:work updates --queue=updates --timeout=21600 --tries=1

While no worker is running, the tab shows the update as Queued — waiting for the updates worker.

What an update does

  1. Pre-flight checks. The PHP version, the tools the updater needs (tar, mysqldump, mysql), write access to the install folders and the free disk space. If a check fails, nothing is changed.
  2. Download and verify. It downloads the release bundle, checks its SHA-256 hash and its signature, and checks every file in the bundle. A bundle that fails any check is deleted.
  3. Maintenance mode. It puts the site into maintenance mode.
  4. Backup. It backs up the database to shared/backups/pre-<version>-<date>.sql.gz, readable only by the install's owner. The five newest backups are kept.
  5. Install. It unpacks the release into its own folder, runs the database migrations and rebuilds the caches.
  6. Switch. It points current at the new release, brings the site back up, restarts the queue workers and runs a health check on /up for up to 60 seconds.

The three newest releases stay on disk.

Automatic rollback

If the migrations or the health check fail, the updater rolls back by itself. It:

  1. keeps the site in maintenance mode, or puts it back into maintenance mode,
  2. makes sure current points at the previous release,
  3. restores the database from the backup it just took,
  4. brings the previous version back up.

The Updates tab then shows "The update to X was rolled back", with the reason. Your previous version keeps running. Send us the log from Show log in a support ticket.

The restore covers the database. Uploaded files live in shared/storage, and an update never touches them.

Folder layout

A licensed install keeps each version in its own folder:

releases/<version>/   one folder per installed version
shared/.env           your settings, shared by every release
shared/storage/       uploads, logs and caches
shared/backups/       the database backups taken before each update
current -> releases/<version>   the version your web server serves

Point the web server at current/public, and make it resolve the symlink on every request. In Nginx, use $realpath_root for both root and SCRIPT_FILENAME.

Update from the command line

The same steps run from a shell on the server. Run them as the user that owns the install:

php artisan psa:update:check
php artisan psa:update
php artisan psa:update 1.2.0 --yes
  • psa:update:check lists the newer releases and whether your licence covers them.
  • psa:update installs the newest release you can install, after asking for confirmation.
  • Give a version to install that one instead. Add --yes to skip the question in scripts.

Settings for unusual servers

Add these to .env only if you need them:

  • PSA_LOCAL_URL: the address the updater uses to reach its own site for the health check, for example http://127.0.0.1. The default is APP_URL. Set this when the server cannot reach its own public address, for example behind NAT.
  • PSA_MYSQLDUMP and PSA_MYSQL: full paths to mysqldump and mysql, if they are not on the worker's PATH.

If an update looks stuck

An update holds a lock for up to six hours. If the updates worker was killed during an update, the tab can keep showing the update as queued or running. First check that the worker is running. To drop a queued update that will never run:

php artisan queue:clear updates --queue=updates

Renewing

Renew from your account at account.cvntechnologies.com. A renewal adds one year of updates and support:

  • If your update year has not ended, the new year starts at your current updates-until date, so you lose no days.
  • If it has already ended, the new year starts on the day you renew.

Renewing is optional. Nothing in the app stops working if you never renew. An update that fails, or that cannot reach your account, never switches the app off either. You keep the version you have, and you can still read your old support tickets. Opening a new support ticket needs an active update year.

See Licences, domains and renewals for the full licence terms.

Edit or report a problem