Files
backupsidecar/README.md
2025-02-02 21:27:28 +01:00

107 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# BackupSidecar
BackupSidecar is a lightweight backup solution designed to run as a cron job in Kubernetes. It automates backups using Restic and supports both directory and PostgreSQL database backups. Notifications are sent via Gotify to keep you informed of backup results.
## Configuration
BackupSidecar is configured through environment variables. Below is a breakdown of the available settings.
### General Settings
These variables apply to both directory and PostgreSQL backups.
- **`BACKUP_MODE`** _(optional)_ Defines the backup type (`directory` or `postgres`). Defaults to `directory`.
- **`RESTIC_PASSWORD`** _(required)_ The encryption password for Restic.
- **`RESTIC_REPOSITORY`** _(required)_ The URI of the Restic repository (e.g., `rest:http://your-rest-server:8000/backup`).
- **`RESTIC_REST_USERNAME`** _(optional)_ The username for REST server authentication.
- **`RESTIC_REST_PASSWORD`** _(optional)_ The password for REST server authentication.
- **`GOTIFYHOST`** _(required)_ The Gotify server URL.
- **`GOTIFYTOKEN`** _(required)_ The API token for Gotify.
- **`GOTIFYTOPIC`** _(required)_ The topic under which backup notifications will be sent.
### Directory Backup
When running in `directory` mode, the following variable must be set:
- **`SOURCEDIR`** _(required)_ The path of the directory to be backed up.
### PostgreSQL Backup
For `postgres` mode, the following database-related variables are required:
- **`PGHOST`** _(required)_ The hostname of the PostgreSQL server.
- **`PGDATABASE`** _(required)_ The name of the database to back up.
- **`PGUSER`** _(required)_ The PostgreSQL username.
- **`PGPORT`** _(optional)_ The port for PostgreSQL (defaults to `5432`).
- **`PGPASSWORD`** _(optional)_ The password for authentication. Setting this prevents interactive prompts.
- **`PG_DUMP_ARGS`** _(optional)_ Additional flags for `pg_dump`.
## Dependencies
Ensure the following commands are available in the container:
- `restic`
- `curl`
- `jq`
- `pg_dump` _(only required for `postgres` mode)_
## Usage
Example Kubernetes CronJob manifest for running BackupSidecar as a cron job for directory backups in minimal configuration:
```yaml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: backupsidecar-cron
spec:
schedule: "0 2 * * *" # Run daily at 2:00 AM
jobTemplate:
spec:
template:
spec:
containers:
- name: backupsidecar
image: backupsidecar:latest
env:
- name: RESTIC_REPOSITORY
value: "rest:http://rest-server:8000/backup"
- name: RESTIC_PASSWORD
valueFrom:
secretKeyRef:
name: backupsidecar-secret
key: restic_password
- name: BACKUP_MODE
value: "directory" # or "postgres"
- name: SOURCEDIR
value: "/data/source"
- name: GOTIFYHOST
value: "http://gotify.example.com"
- name: GOTIFYTOKEN
valueFrom:
secretKeyRef:
name: backupsidecar-secret
key: gotify_token
- name: GOTIFYTOPIC
value: "Backup Notification"
# (For PostgreSQL mode, add PGHOST, PGDATABASE, PGUSER, PGPORT, PGPASSWORD)
volumeMounts:
- name: source-data
mountPath: /data/source
restartPolicy: OnFailure
volumes:
- name: source-data
persistentVolumeClaim:
claimName: source-data-pvc
```
## Notifications
The script sends success or failure notifications via Gotify.
Example success notification:
```
Backup successful. Snapshot 56ff6a909a44e01f67d2d88f9a76aa713d437809d7ed14a2361e28893f38befb: files new: 1, files changed: 0, data added: 1019 bytes in 0.277535184 sec
```