# 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 ```