200 lines
7.0 KiB
ReStructuredText
200 lines
7.0 KiB
ReStructuredText
|
|
||
|
The `rcb` command
|
||
|
-----------------
|
||
|
|
||
|
The ``rcb`` command is is basically what this entire project is.
|
||
|
It provides useful commands interacting with the compose setup
|
||
|
and restic.
|
||
|
|
||
|
The command can be executed inside the container or through ``run``.
|
||
|
|
||
|
.. code:: bash
|
||
|
|
||
|
# Get the current status using run
|
||
|
$ docker-compose run --rm backup rcb status
|
||
|
|
||
|
# by entering the container
|
||
|
$ docker-compose exec backup sh
|
||
|
/restic-compose-backup # rcb status
|
||
|
|
||
|
Log level can be overridden by using the ``--log-level``
|
||
|
flag. This can help you better understand what is going on
|
||
|
for example by using ``--log-level debug``.
|
||
|
|
||
|
version
|
||
|
~~~~~~~
|
||
|
|
||
|
Displays the version.
|
||
|
|
||
|
Example output::
|
||
|
|
||
|
/restic-compose-backup # rcb version
|
||
|
0.4.0
|
||
|
|
||
|
status
|
||
|
~~~~~~
|
||
|
|
||
|
Shows the general status of our setup. The command is doing
|
||
|
the following operations
|
||
|
|
||
|
- Displays the name of the compose setup
|
||
|
- Displays the repository path
|
||
|
- Tells us if a backup is currently running
|
||
|
- Removes stale backup process containers if the exist
|
||
|
- Checks is the repository is initialized
|
||
|
- Initializes the repository if this is not already done
|
||
|
- Displays what volumes and databases are flagged for backup
|
||
|
|
||
|
Example output::
|
||
|
|
||
|
INFO: Status for compose project 'myproject'
|
||
|
INFO: Repository: '<restic repository>'
|
||
|
INFO: Backup currently running?: False
|
||
|
INFO: --------------- Detected Config ---------------
|
||
|
INFO: service: mysql
|
||
|
INFO: - mysql (is_ready=True)
|
||
|
INFO: service: mariadb
|
||
|
INFO: - mariadb (is_ready=True)
|
||
|
INFO: service: postgres
|
||
|
INFO: - postgres (is_ready=True)
|
||
|
INFO: service: web
|
||
|
INFO: - volume: media
|
||
|
INFO: - volume: /srv/files
|
||
|
|
||
|
alert
|
||
|
~~~~~
|
||
|
|
||
|
Sends a test message to all configured alert backends
|
||
|
and is there for you to verify that alerts are in
|
||
|
fact working and configured correctly.
|
||
|
|
||
|
The format of this message::
|
||
|
|
||
|
subject: myproject: Test Alert
|
||
|
body: Test message
|
||
|
|
||
|
snapshots
|
||
|
~~~~~~~~~
|
||
|
|
||
|
Displays the latest snapshots in restic. This can also
|
||
|
be done with ``restic snapshots``.
|
||
|
|
||
|
Example output::
|
||
|
|
||
|
/restic-compose-backup # rcb snapshots
|
||
|
repository f325264e opened successfully, password is correct
|
||
|
ID Time Host Tags Paths
|
||
|
---------------------------------------------------------------------------------------------
|
||
|
19928e1c 2019-12-09 02:07:44 b3038db04ec1 /volumes
|
||
|
7a642f37 2019-12-09 02:07:45 b3038db04ec1 /databases/mysql/all_databases.sql
|
||
|
883dada4 2019-12-09 02:07:46 b3038db04ec1 /databases/mariadb/all_databases.sql
|
||
|
76ef2457 2019-12-09 02:07:47 b3038db04ec1 /databases/postgres/test.sql
|
||
|
---------------------------------------------------------------------------------------------
|
||
|
4 snapshots
|
||
|
|
||
|
backup
|
||
|
~~~~~~
|
||
|
|
||
|
Starts a backup process by spawning a new docker container.
|
||
|
The network stack, mounted volumes, env vars etc. from the
|
||
|
backup service are copied to this container.
|
||
|
|
||
|
We attach to this container and stream the logs and delete
|
||
|
the container with the backup process is completed. If the
|
||
|
container for any reason should not be deleted, it will
|
||
|
be in next backup run as these containers are tagged with
|
||
|
a unique label and detected.
|
||
|
|
||
|
If anything goes wrong the exist status of the container
|
||
|
is non-zero and the logs from this backup run will be sent
|
||
|
to the user through the configure alerts.
|
||
|
|
||
|
This command is by default called by cron every
|
||
|
day at 02:00 unless configured otherwise. We can also run this
|
||
|
manually is needed.
|
||
|
|
||
|
Running this command will do the following:
|
||
|
|
||
|
* Checks if a backup process is already running.
|
||
|
If so, we alert the user and abort
|
||
|
* Gathers all the volumes configured for backup and starts
|
||
|
the backup process with these volumes mounted into ``/volumes``
|
||
|
* Checks the status of the process and reports to the user
|
||
|
if anything failed
|
||
|
|
||
|
The backup process does the following:
|
||
|
|
||
|
* ``status`` is first called to ensure everything is ok
|
||
|
* Backs up ``/volumes`` if any volumes were mounted
|
||
|
* Backs up each configured database
|
||
|
* Runs ``cleanup`` purging snapshots based on the configured policy
|
||
|
* Checks the health of the repository
|
||
|
|
||
|
Example::
|
||
|
|
||
|
$ docker-compose exec backup sh
|
||
|
/restic-compose-backup # rcb backup
|
||
|
INFO: Starting backup container
|
||
|
INFO: Backup process container: loving_jepsen
|
||
|
INFO: 2019-12-09 04:50:22,817 - INFO: Status for compose project 'restic-compose-backup'
|
||
|
INFO: 2019-12-09 04:50:22,817 - INFO: Repository: '/restic_data'
|
||
|
INFO: 2019-12-09 04:50:22,817 - INFO: Backup currently running?: True
|
||
|
INFO: 2019-12-09 04:50:23,701 - INFO: ------------------------- Detected Config -------------------------
|
||
|
INFO: 2019-12-09 04:50:23,701 - INFO: service: mysql
|
||
|
INFO: 2019-12-09 04:50:23,718 - INFO: - mysql (is_ready=True)
|
||
|
INFO: 2019-12-09 04:50:23,718 - INFO: service: mariadb
|
||
|
INFO: 2019-12-09 04:50:23,726 - INFO: - mariadb (is_ready=True)
|
||
|
INFO: 2019-12-09 04:50:23,727 - INFO: service: postgres
|
||
|
INFO: 2019-12-09 04:50:23,734 - INFO: - postgres (is_ready=True)
|
||
|
INFO: 2019-12-09 04:50:23,735 - INFO: service: web
|
||
|
INFO: 2019-12-09 04:50:23,736 - INFO: - volume: /some/volume
|
||
|
INFO: 2019-12-09 04:50:23,736 - INFO: -------------------------------------------------------------------
|
||
|
INFO: 2019-12-09 04:50:23,736 - INFO: Backing up volumes
|
||
|
INFO: 2019-12-09 04:50:24,661 - INFO: Backing up databases
|
||
|
INFO: 2019-12-09 04:50:24,661 - INFO: Backing up mysql in service mysql
|
||
|
INFO: 2019-12-09 04:50:25,643 - INFO: Backing up mariadb in service mariadb
|
||
|
INFO: 2019-12-09 04:50:26,580 - INFO: Backing up postgres in service postgres
|
||
|
INFO: 2019-12-09 04:50:27,555 - INFO: Forget outdated snapshots
|
||
|
INFO: 2019-12-09 04:50:28,457 - INFO: Prune stale data freeing storage space
|
||
|
INFO: 2019-12-09 04:50:31,547 - INFO: Checking the repository for errors
|
||
|
INFO: 2019-12-09 04:50:32,869 - INFO: Backup completed
|
||
|
INFO: Backup container exit code: 0
|
||
|
|
||
|
crontab
|
||
|
~~~~~~~
|
||
|
|
||
|
Generates and verifies the crontab. This is done automatically when
|
||
|
the container starts. It can be user to verify the configuration.
|
||
|
|
||
|
Example output::
|
||
|
|
||
|
/restic-compose-backup # rcb crontab
|
||
|
10 2 * * * source /env.sh && rcb backup > /proc/1/fd/1
|
||
|
|
||
|
cleanup
|
||
|
~~~~~~~
|
||
|
|
||
|
Purges all snapshots based on the configured policy. (``RESTIC_KEEP_*``
|
||
|
env variables). It runs ``restic forget`` and ``restic purge``.
|
||
|
|
||
|
Example output::
|
||
|
|
||
|
/restic-compose-backup # rcb cleanup
|
||
|
2019-12-09 05:09:52,892 - INFO: Forget outdated snapshots
|
||
|
2019-12-09 05:09:53,776 - INFO: Prune stale data freeing storage space
|
||
|
|
||
|
start-backup-process
|
||
|
~~~~~~~~~~~~~~~~~~~~
|
||
|
|
||
|
This can only be executed by the backup process container.
|
||
|
Attempting to run this command in the backup service
|
||
|
will simply tell you it's not possible.
|
||
|
|
||
|
The backup process is doing the following:
|
||
|
|
||
|
* ``status`` is first called to ensure everything is ok
|
||
|
* Backs up ``/volumes`` if any volumes were mounted
|
||
|
* Backs up each configured database
|
||
|
* Runs ``cleanup`` purging snapshots based on the configured policy
|
||
|
* Checks the health of the repository
|