# Backups

Für automatisierte **Backups** der Apps verwenden wir den auf **Restic** basierenden [Backup Bot II](https://git.coopcloud.tech/coop-cloud/backup-bot-two) der [Co-op Cloud](https://coopcloud.tech) sowie unser selbstentwickeltes Tool [alakazam](https://git.coopcloud.tech/moritz/alakazam).


:::warning
Diese Anleitung beschränkt sich auf Backups der KolliCloud-Apps. Es empfiehlt sich, zusätzlich Backups des jeweiligen Host-Systems einzurichten.

:::

## Vorraussetzungen

* Grundlegende Linux-Kenntnisse
* Erfahrung mit bash, git und Docker
* Eine [KolliCloud-Installation](/doc/installation-wVp2LfBbg7)
* *optional:* Einen externen Speicherort via **S3**, **SFTP** oder **SSH**

## Alakazam-Konfiguration

In der zuvor angelegten Instanzkonfiguration (z.B. `kolli.example.org.yml)`, ergänze die Konfiguration für den Backup-Bot. 

```javascript
backup-bot-two:
    env:
        RESTIC_REPOSITORY: "s3:<s3-storage-url>/<bucket>"
        AWS_ACCESS_KEY_ID: "<AWS_ACCESS_KEY_ID>"
    secrets:
        aws_secret_access_key: ""
```


:::info
Achte darauf, das Secret nicht im Klartext zu commiten. Erwäge git-crypt oder das Setzen der Secrets direct via `abra app secret insert` und lasse dann die `secrets`-Sektion in der `.yml` weg.

:::

Wir verwenden standardmäßig einen **S3-Storage**. Um alternativ einen anderen Speicherort zu nutzen, ergänze die benötigten Umgebungsvariablen unter `env` oder `uncomment` sowie etwaige Secrets und füge die folgende Sektion `comment` zum Überschreiben der Defaultkonfiguration ein:

```javascript
backup-bot-two:
  comment:
    - SECRET_AWS_SECRET_ACCESS_KEY_VERSION
    - compose.s3.yml
```

Für Lösungen via **SSH** oder **SFTP**, siehe das [Recipe](https://git.coopcloud.tech/coop-cloud/backup-bot-two). Dort findet sich auch eine Anleitung, um **Push-Benachrichtigungen** zum Zustand der Backups einzurichten.

## Deployment

Nach der Anpassung der Instanzkonfiguration (und ggf. manuellem Setzen der Secrets via `abra`, führe folgende Schritte aus:

```bash
alakazam kolli.example.org.yml config -r backup-bot-two
```

Daraufhin wird die .env Datei für den Backup-Bot unter `~/.abra/servers/kolli.example.org/backup.kolli.example.org.yml` (re-)generiert.

*je nach Variante:* Generiere die Secrets für den Backup-Bot:

```bash
alakazam kolli.example.org.yml secrets -r backup-bot-two
```

Deploye und initialisiere den Backup-Bot:

```bash
alakazam kolli.example.org.yml deploy -r backup-bot-two
```

## Konfiguration der App-Backups

Der Backup-Bot sichert bei gesetztem **Docker-Label** standardmäßig alle Volumes der entsprechenden App. Darüber hinaus sind zusätzlich Pre- und Post-Hooks z.B. für das Erstellen von SQL-Dumps möglich.

Für die unter [Installation→Apps](https://wiki.local-it.org/doc/installation-wVp2LfBbg7#h-apps) aufgelisteten Anwendungen sind die dafür nötigen Label alle bereits im jeweiligen Recipe gesetzt. Um für ein eigenes Recipe die Backups zu konfigurieren, siehe [hier](https://git.coopcloud.tech/coop-cloud/backup-bot-two#recipe-configuration) oder orientiere dich an den von uns gewarteten Recipes.

## Ausführung

Der Backup-Bot sollte jetzt entsprechend des `CRON_SCHEDULE` in der `backup.kolli.example.org.yml` automatisch ausgeführt werden. 

Verifiziere dies gerne zu einem dem Schedule entsprechend geeigneten Zeitpunkt durch auflisten aller Backup-Snapshots:

```javascript
abra app run backup.kolli.example.org.yml app -- backup snapshots
```

Um sicherzustellen dass alle Volumes gesichert werden hilft ein Blick in den letzten Snapshot:

```javascript
abra app run backup.kolli.example.org.yml app -- backup ls /var/lib/docker/volumes
```

---

**Documents**

- [User:innen Guide](https://wiki.local-it.org/s/kollicloud-wiki/doc/userinnen-guide-zUit9qbRxm)
- [Selfhosting Guide](https://wiki.local-it.org/s/kollicloud-wiki/doc/selfhosting-guide-1xZJt8UIha)
- [Kollektivhosting](https://wiki.local-it.org/s/kollicloud-wiki/doc/kollektivhosting-9uzforQcz4)
- [FAQ zur KolliCloud](https://wiki.local-it.org/s/kollicloud-wiki/doc/faq-zur-kollicloud-1XlLVf5QpO)
- [Technik-Glossar](https://wiki.local-it.org/s/kollicloud-wiki/doc/technik-glossar-mqY0TUfkKy)