Backing up and moving Weblate¶
New in version 3.9.
Weblate has built in support for creating service backups using Borg backup. Borg creates space effective encrypted backups which can be safely stored in the cloud. The backups can be controlled in the management interface on the Backups tab.
Only PostgreSQL database is included in the automated backups. Other database engines have to be backed up manually. You are recommended to migrate to PostgreSQL as that will be the only supported database in the 4.0 release. See Migrating from other databases to PostgreSQL.
Using Weblate provisioned backup storage¶
The easiest approach to backup your Weblate instance is to purchase backup service at weblate.org. The process of activating can be performed in few steps:
- Purchase backup service on https://weblate.org/support/#backup.
- Enter obtained key in the management interface, see Activating support.
- Weblate will connect to the cloud service and obtain access information for the backups.
- Turn on the new backup configuration on the Backups tab.
- Backup Borg credentials in order to be able to restore the backups, see Borg encryption key.
The manual step of turning on is there for your safety. Without your consent no data is sent to the backup repository obtained through the registration process.
Using custom backup storage¶
You can also use own storage for the backups. SSH can be used to store backups on the remote destination, the target server needs to have Borg backup installed.
General in the Borg documentation
Borg encryption key¶
Borg backup creates encrypted backups and without a passphrase you will not be able to restore the backup. The passphrase is generated when adding new backup service and you should copy it and keep it in a secure place.
In case you are using Using Weblate provisioned backup storage, please backup your private SSH key as well — it is used to access your backups.
Restoring from Borg backup¶
- Restore access to your backup repository and prepare your backup passphrase.
- List backup existing on the server using
borg list REPOSITORY.
- Restore the desired backup to current directory using
borg extract REPOSITORY::ARCHIVE.
- Restore the database from the SQL dump placed in the
backupdirectory in the Weblate data dir (see Dumped data for backups).
- Copy Weblate configuration and data dir to correct location.
The borg session might look like:
$ borg list /tmp/xxx Enter passphrase for key /tmp/xxx: 2019-09-26T14:56:08 Thu, 2019-09-26 14:56:08 [de0e0f13643635d5090e9896bdaceb92a023050749ad3f3350e788f1a65576a5] $ borg extract /tmp/xxx::2019-09-26T14:56:08 Enter passphrase for key /tmp/xxx:
Depending on what you want to save, back up the type data Weblate stores in each respective place.
In case you are doing manual backups, you might want to silent Weblate
warning about lack of backups by adding
The actual storage location depends on your database setup.
The database is the most important storage. Set up regular backups of your database, without it all your translation setup will be gone.
Native database backup¶
The recommended approach is to do dump of the database using database native tools such as pg_dump or mysqldump. It usually performs better than Django backup and restores complete tables with all data.
You can restore this backup in newer Weblate release, it will perform any
necessary migrations when running in
migrate. Please consult
Upgrading Weblate on more detailed information how to peform upgrade between
Django database backup¶
Alternatively you can backup database using Django’s
command. That way the backup is database agnostic and can be used in case you
want to change database backend.
Prior to restoring you need to be running exactly same Weblate version as was
used when doing backups. This is necessary as the database structure does
change between releases and you would end up corrupting the data in some way.
After installing the same version, run all database migrations using
Once this is done, some entries will be already created in the database and you will have them in the database backup as well. The recommended approach is to delete such entries manually using management shell (see Invoking management commands):
./manage.py shell >>> from weblate.auth.models import User >>> User.objects.get(username='anonymous').delete()
If you have enough backup space, simply backup the whole
is safe bet even if it includes some files you don’t want.
The following sections describe in detail what you should back up and what you
Dumped data for backups¶
Weblate dumps various data here, and you can include these files for more complete backups. The files are updated daily (requires a running Celery beats server, see Background tasks using Celery). Currently, this includes:
- Translation memory dump, in JSON format.
- Weblate settings as
- PostgreSQL database backup as
The database backup are by default saved as plain text, but they also can be compressed
or entirely skipped by using
Version control repositories¶
The version control repositories contain a copy of your upstream repositories with Weblate changes. If you have push on commit enabled for all your translation components, all Weblate changes are included upstream and you do not have to backup the repositories on the Weblate side. They can be cloned again from the upstream locations with no data loss.
SSH and GPG keys¶
If you are using SSH or GPG keys generated by Weblate, you should back up these locations, otherwise you will lose the private keys and you will have to regenerate new ones.
User uploaded files¶
You should back up user uploaded files (e.g. Visual context for strings).
It is recommended to back up this content using
dump_memory in JSON-, instead of binary format, as that
might eventually change (and is also incompatible going from Python 2 to Python 3).
Weblate prepares this dump daily, see Dumped data for backups.
The Celery tasks queue might contain some info, but is usually not needed for a backup. At most your will lose updates that have not yet ben processed to translation memory. It is recommended to perform the fulltext or repository updates upon restoring anyhow, so there is no problem in losing these.