mirror of
https://gh.wpcy.net/https://github.com/WeblateOrg/weblate.git
synced 2026-04-25 23:57:21 +08:00
- remove inline seealso tags - use lists to separate entries for better readability (long links are hard to distinguish) and translatability (references only need not translation)
395 lines
13 KiB
ReStructuredText
395 lines
13 KiB
ReStructuredText
.. _backup:
|
||
|
||
Backing up and moving Weblate
|
||
=============================
|
||
|
||
.. _projectbackup:
|
||
|
||
Project level backups
|
||
---------------------
|
||
|
||
.. versionadded:: 4.14
|
||
|
||
.. warning::
|
||
|
||
Restoring backups is only supported when using PostgreSQL or MariaDB 10.5+ as a database.
|
||
|
||
The project backups all translation content from Weblate (project, components,
|
||
translations, string comments, suggestions or checks). It is suitable for
|
||
transferring a project to another Weblate instance.
|
||
|
||
You can perform a project backup in :guilabel:`Operations` ↓ :guilabel:`Backups`.
|
||
The backup can be restored when creating a project (see
|
||
:ref:`adding-projects`).
|
||
|
||
The backups currently do not include access control information and history.
|
||
|
||
The comments and suggestions are backed up with an username of user who did
|
||
create them. Upon import it is assigned to a matching user. If there is no user
|
||
with such username, it is assigned to anonymous user.
|
||
|
||
The generated backups are kept on the server as configured by
|
||
:setting:`PROJECT_BACKUP_KEEP_DAYS` and :setting:`PROJECT_BACKUP_KEEP_COUNT`
|
||
(it defaults to keep at most 3 backups for 30 days).
|
||
|
||
Use the generated file to import project when :ref:`adding-projects` or in :wladmin:`import_projectbackup`.
|
||
|
||
.. note::
|
||
|
||
Restoring of the backup might fail if the restoring server has different set
|
||
of :ref:`languages` or different configuration of
|
||
:setting:`SIMPLIFY_LANGUAGES`. The restore will tell you which language
|
||
codes could not be processed and you can then add missing language
|
||
definitions manually.
|
||
|
||
.. _automated-backup:
|
||
|
||
Automated backup using BorgBackup
|
||
---------------------------------
|
||
|
||
Weblate has built-in support for creating service backups using `BorgBackup`_.
|
||
Borg creates space-effective encrypted backups which can be safely stored in
|
||
the cloud. The backups can be controlled in the management interface from the
|
||
:guilabel:`Backups` tab.
|
||
|
||
.. versionchanged:: 4.4.1
|
||
|
||
Both PostgreSQL and MySQL/MariaDB databases are included in the automated backups.
|
||
|
||
The backups using Borg are incremental and Weblate is configured to keep following backups:
|
||
|
||
* Daily backups for 14 days back
|
||
* Weekly backups for 8 weeks back
|
||
* Monthly backups for 6 months back
|
||
|
||
.. image:: /screenshots/backups.webp
|
||
|
||
.. _borg-keys:
|
||
|
||
Borg encryption key
|
||
~~~~~~~~~~~~~~~~~~~
|
||
|
||
`BorgBackup`_ creates encrypted backups and you wouldn’t be able to restore them
|
||
without the passphrase. The passphrase is generated when adding a new
|
||
backup service and you should copy it and keep it in a secure place.
|
||
|
||
If you are using :ref:`cloudbackup`, please backup your private SSH key
|
||
too, as it’s used to access your backups.
|
||
|
||
.. seealso::
|
||
|
||
:doc:`borg:usage/init`
|
||
|
||
Customizing backup
|
||
~~~~~~~~~~~~~~~~~~
|
||
|
||
* The database backup can be configured via :setting:`DATABASE_BACKUP`.
|
||
* The backup creation can be customized using :setting:`BORG_EXTRA_ARGS`.
|
||
|
||
.. _cloudbackup:
|
||
|
||
Weblate provisioned backup storage
|
||
----------------------------------
|
||
|
||
The easiest way of backing up your Weblate instance is purchasing the `backup
|
||
service at weblate.org <https://weblate.org/support/#backup>`_. This
|
||
is how you get it running:
|
||
|
||
1. Purchase the `Backup service` on https://weblate.org/support/#backup.
|
||
2. Enter the obtained key in the management interface, see :ref:`activate-support`.
|
||
3. Weblate connects to the cloud service and obtains access info for the backups.
|
||
4. Turn on the new backup configuration from the :guilabel:`Backups` tab.
|
||
5. Backup your Borg credentials to be able to restore the backups, see :ref:`borg-keys`.
|
||
|
||
.. hint::
|
||
|
||
The manual step of turning everything on is there for your safety.
|
||
Without your consent no data is sent to the backup repository obtained
|
||
through the registration process.
|
||
|
||
.. _custombackup:
|
||
|
||
Using custom backup storage
|
||
---------------------------
|
||
|
||
You can also use your own storage for the backups. SSH can be used to store
|
||
backups in the remote destination, the target server needs to have
|
||
`BorgBackup`_ installed.
|
||
|
||
.. seealso::
|
||
|
||
:doc:`borg:usage/general` in the Borg documentation
|
||
|
||
Local filesystem
|
||
~~~~~~~~~~~~~~~~
|
||
|
||
It is recommended to specify the absolute path for the local backup, for example
|
||
`/path/to/backup`. The directory has to be writable by the user running Weblate
|
||
(see :ref:`file-permissions`). If it doesn't exist, Weblate attempts
|
||
to create it but needs the appropriate permissions to do so.
|
||
|
||
.. hint::
|
||
|
||
When running Weblate in Docker, please ensure the backup location
|
||
is exposed as a volume from the Weblate container. Otherwise the backups
|
||
will be discarded by Docker upon restarting the container it is in.
|
||
|
||
One option is to place backups into an existing volume, for example
|
||
:file:`/app/data/borgbackup`. This is an existing volume in the container.
|
||
|
||
You can also add a new container for the backups in the Docker Compose file
|
||
for example by using :file:`/borgbackup`:
|
||
|
||
.. code-block:: yaml
|
||
|
||
services:
|
||
weblate:
|
||
volumes:
|
||
- /home/weblate/data:/app/data
|
||
- /home/weblate/borgbackup:/borgbackup
|
||
|
||
The directory where backups will be stored have to be owned by UID 1000,
|
||
otherwise Weblate won’t be able to write the backups there.
|
||
|
||
Remote backups
|
||
~~~~~~~~~~~~~~
|
||
|
||
For creating remote backups, you will have to install `BorgBackup`_
|
||
onto another server that’s accessible for your Weblate deployment
|
||
via SSH using the Weblate SSH key:
|
||
|
||
1. Prepare a server where your backups will be stored.
|
||
2. Install the SSH server on it (you will get it by default with most Linux distributions).
|
||
3. Install `BorgBackup`_ on that server; most Linux distributions have packages available (see :doc:`borg:installation`).
|
||
4. Choose an existing user or create a new user that will be used for backing up.
|
||
5. Add Weblate SSH key to the user so that Weblate can SSH to the server without a password (see :ref:`weblate-ssh-key`).
|
||
6. Configure the backup location in Weblate as ``user@host:/path/to/backups`` or ``ssh://user@host:port/path/to/backups``.
|
||
|
||
.. hint::
|
||
|
||
:ref:`cloudbackup` provides you automated remote backups without any effort.
|
||
|
||
.. seealso::
|
||
|
||
* :ref:`weblate-ssh-key`
|
||
* :doc:`borg:usage/general`
|
||
|
||
.. _restore-borg:
|
||
|
||
Restoring from BorgBackup
|
||
-------------------------
|
||
|
||
1. Restore access to your backup repository and prepare your backup passphrase.
|
||
|
||
2. List all the backups on the server using ``borg list REPOSITORY``.
|
||
|
||
3. Restore the desired backup to the current directory using ``borg extract REPOSITORY::ARCHIVE``.
|
||
|
||
4. Restore the database from the SQL dump placed in the ``backup`` directory in the Weblate data dir (see :ref:`backup-dumps`).
|
||
|
||
5. Copy the Weblate configuration (:file:`backups/settings.py`, see
|
||
:ref:`backup-dumps`) to the correct location, see :ref:`configuration`.
|
||
|
||
When using Docker container, the settings file is already included in the
|
||
container and you should restore the original environment variables. The
|
||
:file:`environment.yml` file might help you with this (see :ref:`backup-dumps`).
|
||
|
||
6. Copy the whole restored data dir to the location configured by
|
||
:setting:`DATA_DIR`.
|
||
|
||
When using Docker container place the data into the data volume, see
|
||
:ref:`docker-volume`.
|
||
|
||
Please ensure the files have correct ownership and permissions, see :ref:`file-permissions`.
|
||
|
||
The Borg session might look like this:
|
||
|
||
.. code-block:: console
|
||
|
||
$ 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:
|
||
|
||
.. seealso::
|
||
|
||
* :doc:`borg:usage/list`
|
||
* :doc:`borg:usage/extract`
|
||
|
||
|
||
.. _BorgBackup: https://www.borgbackup.org/
|
||
|
||
|
||
Manual backup
|
||
-------------
|
||
|
||
Depending on what you want to save, back up the type of data Weblate stores in each respective place.
|
||
|
||
.. hint::
|
||
|
||
If you are doing the manual backups, you might want to
|
||
silence Weblate's warning about a lack of backups by adding ``weblate.I028`` to
|
||
:setting:`django:SILENCED_SYSTEM_CHECKS` in :file:`settings.py` or
|
||
:envvar:`WEBLATE_SILENCED_SYSTEM_CHECKS` for Docker.
|
||
|
||
.. code-block:: python
|
||
|
||
SILENCED_SYSTEM_CHECKS.append("weblate.I028")
|
||
|
||
Database
|
||
~~~~~~~~
|
||
|
||
The actual storage location depends on your database setup.
|
||
|
||
.. hint::
|
||
|
||
The database is the most important storage. Set up regular backups of your
|
||
database. Without the database, all the translations are gone.
|
||
|
||
Native database backup
|
||
++++++++++++++++++++++
|
||
|
||
The recommended approach is to save a dump of the database using database-native
|
||
tools such as :program:`pg_dump` or :program:`mysqldump`. It usually performs
|
||
better than Django backup, and it restores complete tables with all their data.
|
||
|
||
You can restore this backup in a newer Weblate release, it will perform all the
|
||
necessary migrations when running in :wladmin:`migrate`. Please consult
|
||
:doc:`upgrade` on more detailed info on how to upgrade between versions.
|
||
|
||
Django database backup
|
||
++++++++++++++++++++++
|
||
|
||
Alternatively, you can back up your database using Django's :djadmin:`django:dumpdata`
|
||
command. That way the backup is database agnostic and can be used in case you
|
||
want to change the database backend.
|
||
|
||
Prior to restoring the database you need to be running exactly the same Weblate
|
||
version the backup was made on. 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
|
||
:wladmin:`migrate`.
|
||
|
||
Afterwards some entries will already be 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 the management shell (see :ref:`invoke-manage`):
|
||
|
||
.. code-block:: console
|
||
|
||
weblate shell
|
||
>>> from weblate.auth.models import User
|
||
>>> User.objects.get(username='anonymous').delete()
|
||
|
||
Files
|
||
~~~~~
|
||
|
||
If you have enough backup space, simply back up the whole :setting:`DATA_DIR`. This
|
||
is a safe bet even if it includes some files you don't want.
|
||
The following sections describe what you should back up and what you
|
||
can skip in detail.
|
||
|
||
.. _backup-dumps:
|
||
|
||
Dumped data for backups
|
||
+++++++++++++++++++++++
|
||
|
||
.. versionchanged:: 4.7
|
||
|
||
The environment dump was added as :file:`environment.yml` to help in
|
||
restoring in the Docker environments.
|
||
|
||
Stored in :setting:`DATA_DIR` ``/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
|
||
:ref:`celery`). Currently, this includes:
|
||
|
||
* Weblate settings as :file:`settings.py` (there is also expanded version in :file:`settings-expanded.py`).
|
||
* PostgreSQL database backup as :file:`database.sql`.
|
||
* Environment dump as :file:`environment.yml`.
|
||
|
||
The database backups are saved as plain text by default, but they can also be compressed
|
||
or entirely skipped using :setting:`DATABASE_BACKUP`.
|
||
|
||
To restore the database backup, load it using database tools, for example:
|
||
|
||
.. code-block:: shell
|
||
|
||
psql --file=database.sql weblate
|
||
|
||
Version control repositories
|
||
++++++++++++++++++++++++++++
|
||
|
||
Stored in :setting:`DATA_DIR` ``/vcs``.
|
||
|
||
The version control repositories contain a copy of your upstream repositories
|
||
with Weblate changes. If you have :ref:`component-push_on_commit` enabled for all your
|
||
translation components, all Weblate changes are included upstream. No need to
|
||
back up the repositories on the Weblate side as they can be cloned
|
||
again from the upstream location with no data loss.
|
||
|
||
SSH and GPG keys
|
||
++++++++++++++++
|
||
|
||
Stored in :setting:`DATA_DIR` ``/ssh`` and :setting:`DATA_DIR` ``/home``.
|
||
|
||
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
|
||
+++++++++++++++++++
|
||
|
||
Stored in :setting:`DATA_DIR` ``/media``.
|
||
|
||
You should back up all user uploaded files (e.g. :ref:`screenshots`).
|
||
|
||
Celery tasks
|
||
++++++++++++
|
||
|
||
The Celery task queue might contain some info, but is usually not needed
|
||
for a backup. At most you will lose updates not yet been processed to translation
|
||
memory. It is recommended to perform the fulltext or repository update upon
|
||
restoration anyhow, so there is no problem in losing these.
|
||
|
||
.. seealso::
|
||
|
||
:ref:`celery`
|
||
|
||
Command-line for manual backup
|
||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
Using a cron job, you can set up a Bash command to be executed on a daily basis, for example:
|
||
|
||
.. code-block:: console
|
||
|
||
$ tar -Jcf ~/backup/weblate-backup-$(date -u +%Y-%m-%d_%H%M%S).xz backups vcs ssh home media fonts secret
|
||
|
||
You can adjust the list of folders and files to your needs. To avoid saving the translation memory (in backups folder), you can use:
|
||
|
||
.. code-block:: console
|
||
|
||
$ tar -Jcf ~/backup/weblate-backup-$(date -u +%Y-%m-%d_%H%M%S).xz backups/database.sql backups/settings.py vcs ssh home media fonts secret
|
||
|
||
Restoring manual backup
|
||
-----------------------
|
||
|
||
1. Restore all data you have backed up.
|
||
|
||
2. Update all repositories using :wladmin:`updategit`.
|
||
|
||
.. code-block:: sh
|
||
|
||
weblate updategit --all
|
||
|
||
Moving a Weblate installation
|
||
------------------------------
|
||
|
||
Relocate your installation to a different system
|
||
by following the backing up and restoration instructions above.
|
||
|
||
.. seealso::
|
||
|
||
* `Upgrading from Python 2 to Python 3 in the Weblate 3.11.1 documentation <https://docs.weblate.org/en/weblate-3.11.1/admin/upgrade.html#upgrading-from-python-2-to-python-3>`_
|
||
* :ref:`database-migration`
|