# Backup and Restore

### Beschreibung:

Bookstack besteht aus Dateien und Der Datenbank

Hier liegen die Dateien bzw Verzeichnisse

- `.env` - File, contains important configuration information.
- `public/uploads` - Folder, contains any uploaded images.
- `storage/uploads` - Folder, contains uploaded page attachments.
- `themes` - Folder, contains any configured [visual/logical themes](https://www.bookstackapp.com/docs/admin/hacking-bookstack/#visual-theme-system).

### Backup Manuell:

Die Dateien sichern.

In das Verzeichnis gehen bei ner direkt installation:

```
cd /var/www/Bookstack
```

Bei ner docker installtion reicht das ganze Projektverzeichnis, das der Vorteil von der Docker.  
nun ein archiv erstellen

```
tar -czvf bookstack-files-backup-$(date +"%Y-%m-%d_%H-%M-%S").tar.gz .env public/uploads storage/uploads themes
```

Nun die Datenbank sichern

```
mysqldump -u root bookstackdb > bookstack.backup-$(date +"%Y-%m-%d_%H-%M-%S").sql
```

Diese beiden Datein ins root Verzeichnsi vom neuen Server kopieren via scp zum Beispiel

### Restore/Migration:

#### Manuell:

Im Docker container, weil direkt installation machen wir in Zukunft nicht mehr:  
Falls der Conatiner schon unglücklicherweise gestartet wurde den container app stoppen

```
docker-compose stop app
```

Das Datenverzeichnis löschen

```
rm -r /root/bookstack/bookstack_data
```

Nun in phpmyadmin alle Tabellen löschen, falls der Conateiner schon gestartet wurde.

Nun die Datenbank restoren via phpmyadmin

Nun den app key aus der alten instance in die .env Datei eintragen.  
in einer nicht Docker installation leigt diese dann unter

```
cat /var/www/Boockstack/.env
```

Ein bisschen hochscrollen da steht der APP\_KEY diesen kopieren und in die neue .env einfügen / ersetzten

Nun die tar Datei hochladen die wir im Punkt backup erstellt haben

```
scp bookstack-files-backup-2025-02-02_14-23-51.tar.gz root@<ip>:/root/bookstack

```

Nun das archiv die Bilder entpacken nach bookstach\_data

```
tar -xf bookstack-files-backup-2025-02-02_14-26-12.tar.gz  --strip-components=1 -C /root/bookstack/bookstack_data public/images
```

Nun die Files/attachments entpacken

```
tar -xzf bookstack-files-backup-2025-02-02_14-23-51.tar.gz --strip-components=2 -C /root/bookstack/bookstack_data/www/ storage/uploads
```

Nun die Pfade eventuell anpassen wenn die URL sich geändert haben sollte, sonst diesen Schritt überspringen

Dazu in die instance einloggen

```
docker-compose exec app bash
```

Nun ins Verzeichnis von bookstack gehen

```
cd /app/www
```

Nun mittels php artisan die Urls aktualisieren, als erstes die alte URL als zweiten Parameter die neue.  
Falls die alte URL einen port mit dran ahtte zum docs.example.com:3000 dann diesen auch so angeben

```
# Searches for <oldUrl> and replaces it with <newUrl>
php artisan bookstack:update-url <oldUrl> <newUrl>

# Example:
php artisan bookstack:update-url http://docs.example.com https://demo.bookstackapp.com
```

Nun noch den cache löschen

```
php artisan cache:clear
```

Fertig

### Nachbearbeitung bei Manuell wie auch mit Backup Tool wenn das Ziel KEIN Docker ist:

Sollte nicht auf die gleiche Version migriert werden nachdem der Container gestartet ist, die migration ausführen das die Datenbank angepasst wird.

Dzu einmal in den container einloggen

```
docker-compose exec app bash
```

Dann diese Befehler ausfürhen

```
cd /app/www
php artisan migrate
```

Ausgabe:

```
php artisan migrate

                                                                                                                                                                                                                                               
                                                                                                          APPLICATION IN PRODUCTION.                                                                                                           
                                                                                                                                                                                                                                               

 ┌ Are you sure you want to run this command? ──────────────────┐
 │ ● Yes / ○ No                                                 │
 └──────────────────────────────────────────────────────────────┘
bestätigen

```