> For the complete documentation index, see [llms.txt](https://veerendra2.gitbook.io/raspberrypi-home-server/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://veerendra2.gitbook.io/raspberrypi-home-server/services/nextcloud/backup.md).

# Backup

Nextcloud back with restic

{% hint style="danger" %}
Below steps are not tested fully.
{% endhint %}

These are basic steps to perform backup nextcloud with `restic`

From nextcloud [docs](https://docs.nextcloud.com/server/latest/admin_manual/maintenance/backup.html), there 2 location that need to be backed up. There are

* Nextcloud data directory
* Postgresql database dumps For these, we need to create 2 restic repos to maintain.

## Initialize restic repos

```
NEXTCLOUD_DATA_RESTIC_REPO="/media/disk1/nextcloud_data_restic_repo"
NEXTCLOUD_PG_RESTIC_REPO="/media/disk1/nextcloud_pg_restic_repo"
BACKUP_DIR="/media/disk2/nextcloud"
RESTIC_PASSWORD_FILE="/home/veerendra/pass.txt"
```

* `NEXTCLOUD_DATA_RESTIC_REPO` is the restic repo for nextcloud data directory backup
* `NEXTCLOUD_PG_RESTIC_REPO` is the restic repo for postgresql database dumps backup
* `BACKUP_DIR` backup directory of nextcloud data
* `RESTIC_PASSWORD_FILE` Restic repo password file for both repos

Init the repos

```
$ restic -r $NEXTCLOUD_DATA_RESTIC_REPO init
$ restic -r $NEXTCLOUD_PG_RESTIC_REPO init
```

## Set maintenance mode ON

```
$ docker exec -it -u www-data nextcloud php occ maintenance:mode --on
```

## Run restic backups

Backup nextcloud data

```
$ restic -r $NEXTCLOUD_DATA_RESTIC_REPO \
      -p $RESTIC_PASSWORD_FILE \
      --json \
      backup $BACKUP_DIR
```

Backup postgresql database dump

```
$ docker exec postgres \
      bash -c 'pg_dump -c -U `cat $POSTGRES_USER_FILE` `cat $POSTGRES_DB_FILE`' | \
      restic backup --stdin --json \
      -r $NEXTCLOUD_PG_RESTIC_REPO \
      -p /home/veerendra/pass.txt \
      --stdin-filename db_postgres_nextcloud.sql
```

## Unset maintenance mode

```
$ docker exec -it -u www-data nextcloud php occ maintenance:mode --off
```

This [shell script](https://gist.github.com/veerendra2/462264542e3de75b4ffbed7bba8a41b3) automates above steps with metrics
