Compare commits

...

7 Commits

Author SHA1 Message Date
Apfelwurm ceaf7fde8a make --delete in restic restore detault behaviour
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2026-07-22 20:39:34 +02:00
moritz fa5078eb6e Merge pull request 'chore(deps): update docker docker tag to v29.4.3' (#87) from renovate/docker-29.x into main
continuous-integration/drone/push Build is passing
Reviewed-on: #87
2026-05-12 12:27:35 +00:00
renovate-bot 3bbef4a0de chore(deps): update docker docker tag to v29.4.3
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2026-05-12 12:27:22 +00:00
moritz f3924969e8 Merge pull request 'fix backup download instruction and some beautifying' (#90) from doc-download into main
continuous-integration/drone/push Build is passing
Reviewed-on: #90
2026-05-12 12:26:44 +00:00
stevensting ff7c9c5cd8 fix backup download instruction and some beautifying
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2026-05-12 12:26:07 +00:00
moritz 25f977c312 Merge pull request 'fix: Use actual CRON_SCHEDULE for swarm-cronjob instead of demo */5' (#88) from fix/3wc/swarm-cronjob-schedule into main
continuous-integration/drone/push Build is passing
Reviewed-on: #88
Reviewed-by: decentral1se <decentral1se@noreply.git.coopcloud.tech>
2026-05-11 15:44:24 +00:00
3wordchant 6255edc834 fix: Use actual CRON_SCHEDULE for swarm-cronjob instead of demo */5
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2026-04-11 16:59:25 -04:00
4 changed files with 20 additions and 20 deletions
+1 -1
View File
@@ -1,4 +1,4 @@
FROM docker:29.3.1-dind
FROM docker:29.4.3-dind
RUN apk add --upgrade --no-cache restic bash python3 py3-pip py3-click py3-docker-py py3-json-logger curl
+17 -15
View File
@@ -137,55 +137,57 @@ Enable basic auth in the env file, by uncommenting the following line:
## Usage
Run the cronjob that creates a backup, including the push notifications and docker logging:
### Run the cronjob that creates a backup, including the push notifications and docker logging:
`abra app cmd <backupbot_name> app run_cron`
Create a backup of all apps:
### Create a backup of all apps:
`abra app run <backupbot_name> app -- backup create`
> The apps to backup up need to be deployed
Create an individual backup:
### Create an individual backup:
`abra app run <backupbot_name> app -- backup --host <target_app_name> create`
Create a backup to a local repository:
### Create a backup to a local repository:
`abra app run <backupbot_name> app -- backup create -r /backups/restic`
> It is recommended to shutdown/undeploy an app before restoring the data
Restore the latest snapshot of all including apps:
### Restore the latest snapshot of all including apps:
`abra app run <backupbot_name> app -- backup restore`
Restore a specific snapshot of an individual app:
### Restore a specific snapshot of an individual app:
`abra app run <backupbot_name> app -- backup --host <target_app_name> restore --snapshot <snapshot_id>`
Show all snapshots:
### Show all snapshots:
`abra app run <backupbot_name> app -- backup snapshots`
Show all snapshots containing a specific app:
### Show all snapshots containing a specific app:
`abra app run <backupbot_name> app -- backup --host <target_app_name> snapshots`
Show all files inside the latest snapshot (can be very verbose):
### Show all files inside the latest snapshot (can be very verbose):
`abra app run <backupbot_name> app -- backup ls`
Show specific files inside a selected snapshot:
### Show specific files inside a selected snapshot:
`abra app run <backupbot_name> app -- backup ls --snapshot <snapshot_id> /var/lib/docker/volumes/`
Download files from a snapshot:
### Download files from a snapshot:
```
filename=$(abra app run <backupbot_name> app -- backup download --snapshot <snapshot_id> --path <absolute_path>)
abra app cp <backupbot_name> app:$filename .
```
`abra app run <backupbot_name> app -- backup download --snapshot <snapshot_id> --path <absolute_path>`
extract the <path> from the output of the first command and use in the second.
`abra app cp <backupbot_name> app:<path> .`
## Run restic
+1 -1
View File
@@ -224,7 +224,7 @@ def restore_path(snapshot_id, target, noninteractive, paths):
def restic_restore(snapshot_id, include=[], target_dir=None):
cmd = restic.cat.base_command() + ["restore", snapshot_id]
cmd = restic.cat.base_command() + ["restore", snapshot_id, "--delete"]
for path in include:
cmd.extend(["--include", path])
if target_dir:
+1 -3
View File
@@ -7,9 +7,7 @@ services:
replicas: 0
labels:
- "swarm.cronjob.enable=true"
# Note(3wc): every 5m, testing
- "swarm.cronjob.schedule=*/5 * * * *"
# Note(3wc): blank label to be picked up by `abra recipe sync`
- "swarm.cronjob.schedule=${CRON_SCHEDULE}"
restart_policy:
condition: none
entrypoint: [ "/usr/bin/backup.sh" ]