Upgrading Nextcloud with the Nextcloud App¶
The Updater app automates many of the steps of upgrading an Nextcloud installation. It is useful for installations that do not have root access, such as shared hosting, for installations with a smaller number of users and data, and it automates updating manual installations.
The Updater app has command-line options.
Downgrading is not supported and risks corrupting your data! If you want to revert to an older Nextcloud version, install it from scratch and then restore your data from backup. Before doing this, file a support ticket (if you have paid support) or ask for help in the Nextcloud forums to see if your issue can be resolved without downgrading.
You should maintain regular backups (see Backing up Nextcloud), and make a backup before every update. The Updater app does not backup your database or data directory.
The Updater app performs these operations:
- Creates an
updater_backup
directory under your Nextcloud data directory - Downloads and extracts updated package content into the
updater_backup/packageVersion
directory - Makes a copy of your current Nextcloud instance, except for your data
directory, to
updater_backup/currentVersion-randomstring
- Moves all directories except
data
,config
andthemes
from the current instance toupdater_backup/tmp
- Moves all directories from
updater_backup/packageVersion
to the current version - Copies your old
config.php
to the newconfig/
directory
Using the Updater app to update your Nextcloud installation is just a few steps:
- You should see a notification at the top of any Nextcloud page when there is a new update available.
- Even though the Updater app backs up important directories, you should always have your own current backups (See Backing up Nextcloud for details.)
- Verify that the HTTP user on your system can write to your whole Nextcloud directory; see the Setting Permissions for Updating section below.
- Navigate to your Admin page and click the Update Center button under Updater. This takes you to the Updater control panel.
- Click Update, and carefully read the messages. If there are any problems it will tell you. The most common issue is directory permissions; your HTTP user needs write permissions to your whole Nextcloud directory. (See Setting Strong Directory Permissions.) Another common issue is SELinux rules (see SELinux Configuration.) Otherwise you will see messages about checking your installation and making backups.
- Click Proceed, and then it performs the remaining steps, which takes a few minutes.
- If your directory permissions are correct, a backup was made, and downloading the new Nextcloud archive succeeded you will see the following screen. Click the Start Update button to complete your update:
Note
If you have a large Nextcloud installation and have shell access,
you should use the occ upgrade
command, running it as your HTTP user,
instead of clicking the Start Update button, in order to avoid PHP
timeouts.
This example is for Ubuntu Linux:
$ sudo -u www-data php occ upgrade
Before completing the upgrade, Nextcloud first runs a simulation by copying all
database tables to new tables, and then performs the upgrade on them, to ensure
that the upgrade will complete correctly. The copied tables are deleted after
the upgrade. This takes twice as much time, which on large installations can be
many hours, so you can omit this step with the --skip-migration-test
option, like this example on Ubuntu:
$ sudo -u www-data php occ upgrade --skip-migration-test
See Using the occ Command to learn more.
- It runs for a few minutes, and when it is finished displays a success message, which disappears after a short time.
Refresh your Admin page to verify your new version number. In the Updater section of your Admin page you can see the current status and backups. These are backups of your old and new Nextcloud installations, and do not contain your data files. If your update works and there are no problems you can delete the backups from this screen.
If the update fails, then you must update manually. (See Manually upgrading.)
Setting Permissions for Updating¶
For hardened security we highly recommend setting the permissions on your Nextcloud directory as strictly as possible. These commands should be executed immediately after the initial installation. Please follow the steps in Setting Strong Directory Permissions.
These strict permissions will prevent the Updater app from working, as it needs
your whole Nextcloud directory to be owned by the HTTP user. Run this script to
set the appropriate permissions for updating. Replace the ocpath
variable
with the path to your Nextcloud directory, and replace the htuser
and
htgroup
variables with your HTTP user and group.:
#!/bin/bash
# Sets permissions of the Nextcloud instance for updating
ocpath='/var/www/nextcloud'
htuser='www-data'
htgroup='www-data'
chown -R ${htuser}:${htgroup} ${ocpath}
You can find your HTTP user in your HTTP server configuration files. Or you can use PHP Version and Information (Look for the User/Group line).
- The HTTP user and group in Debian/Ubuntu is
www-data
. - The HTTP user and group in Fedora/CentOS is
apache
. - The HTTP user and group in Arch Linux is
http
. - The HTTP user in openSUSE is
wwwrun
, and the HTTP group iswww
.
After the update is completed, re-apply the strong directory permissions immediately by running the script in Setting Strong Directory Permissions.
Command Line Options¶
The Updater app includes command-line options to automate updates, to create checkpoints and to roll back to older checkpoints. You must run it as your HTTP user. This example on Ubuntu Linux displays command options:
sudo -u www-data php updater/application.php list
See usage for commands, like this example for the upgrade:checkpoint
command:
sudo -u www-data php updater/application.php upgrade:checkpoint -h
You can display a help summary:
sudo -u www-data php updater/application.php --help
When you run it without options it runs a system check:
sudo -u www-data php nextcloud/updater/application.php
Nextcloud updater 1.0 - CLI based Nextcloud server upgrades
Checking system health.
- file permissions are ok.
Current version is 9.0.0.12
No updates found online.
Done
Create a checkpoint:
sudo -u www-data php updater/application.php upgrade:checkpoint --create
Created checkpoint 9.0.0.12-56d5e4e004964
List checkpoints:
sudo -u www-data php updater/application.php upgrade:checkpoint --list
Restore an earlier checkpoint:
sudo -u www-data php nextcloud/updater/application.php upgrade:checkpoint
--restore=9.0.0.12-56d5e4e004964
Add a line like this to your crontab to automatically create daily checkpoints:
2 15 * * * sudo -u www-data php /path/to/nextcloud/updater/application.php
upgrade:checkpoint --create > /dev/null 2>&1