Files
docker/remarkable/README.md
Borgal b63131c0c5 Add reMarkable backup system with web UI
- Docker container with rmapi cloud backup, PDF conversion pipeline
- Web UI: file browser, multi-select, delete/move, thumbnail preview
- Sync: backup from reMarkable cloud, rmdoc→PDF conversion via rmc+Inkscape
- Excluded-files mechanism to prevent deleted items from returning after sync

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 23:43:36 +01:00

129 lines
4.3 KiB
Markdown
Executable File

# reMarkable Backup (offizielle Cloud) + lokale Web-UI
Dieses Projekt ist auf einen klaren Workflow reduziert:
- Tablet bleibt in der **offiziellen reMarkable-Cloud** (OCR/Convert bleibt aktiv).
- `rmapi` laeuft im Docker-Container und zieht periodisch Daten aus der offiziellen Cloud.
- `.rmdoc`-Dateien werden automatisch zu **PDF konvertiert** (Originale bleiben erhalten).
- Lokale Ablage im Docker-Volume `remarkable_notizen` mit inkrementellem Stand + datierten Snapshots.
- Web-UI zum Browsen und Oeffnen von PDFs direkt im Browser.
## Dateien in diesem Projekt
```
/opt/remarkable/
├── docker-compose.yml Orchestrierung beider Container
├── backup/
│ ├── Dockerfile Backup-Container (rmapi, rmc, inkscape)
│ └── entrypoint.sh Cron-Setup + Start
├── scripts/
│ ├── backup-official-cloud.sh Backup + Snapshot-Versionierung
│ └── convert-to-pdf.sh .rmdoc → PDF Konvertierung
└── web/
├── Dockerfile Web-UI-Container (PHP)
├── index.php Dateibaum + PDF-Viewer
└── index2.php Archiv-Suche
```
## Voraussetzungen
- Docker + Docker Compose
- Einmaliger reMarkable-Login (Token wird im Volume gespeichert)
## Ersteinrichtung
### 1. Token einrichten
```bash
cd /opt/remarkable
docker compose run --rm --entrypoint bash backup -c "rmapi ls"
# Code von https://my.remarkable.com/device/desktop/connect eingeben
```
Token wird im Volume `remarkable_rmapi-config` gespeichert und bleibt bei Container-Updates erhalten.
### 2. Container starten
```bash
cd /opt/remarkable
docker compose up -d
```
### 3. Erstes Backup manuell ausfuehren
```bash
docker compose exec backup remarkable-backup.sh /data /
```
## Normalbetrieb
Backup + PDF-Konvertierung laufen automatisch per Cron (Standard: taeglich 03:15).
Web-UI erreichbar unter: `http://SERVER_IP:8080`
## Datenstruktur (im Volume `remarkable_notizen`)
```
current/ Aktueller Stand (inkl. konvertierter PDFs)
snapshots/
2026-03-23_031500/
latest -> ...
logs/
```
## Umgebungsvariablen (docker-compose.yml)
| Variable | Standard | Beschreibung |
|----------|----------|--------------|
| `BACKUP_CRON` | `15 3 * * *` | Cron-Zeitplan |
| `SNAPSHOT_KEEP` | `60` | Anzahl aufzubewahrender Snapshots |
| `RUN_ON_START` | `0` | Backup beim Container-Start ausfuehren (`1` = ja) |
## Manuelles Backup mit Optionen
```bash
# Vollsync (alle Dateien neu laden)
docker compose exec backup env BACKUP_FULL=1 remarkable-backup.sh /data /
# Spiegelmodus (lokal geloeschte Dateien entfernen)
docker compose exec backup env BACKUP_MIRROR_DELETE=1 remarkable-backup.sh /data /
```
## PDF-Konvertierung (convert-to-pdf.sh)
Das Skript konvertiert alle `.rmdoc`-Dateien nach dem Backup automatisch zu PDFs.
### Verhalten nach Dokumenttyp
| Typ | Inhalt im rmdoc | Ergebnis |
|-----|-----------------|---------|
| Handschrift-Notiz | `.rm`-Dateien | Seiten werden einzeln via `rmc` + `inkscape` konvertiert und mit `pdfunite` zusammengefuegt |
| Importiertes PDF | `.pdf`-Datei | PDF wird direkt extrahiert |
| Reines EPUB | nur `.epub` | Wird uebersprungen (kein PDF moeglich) |
### Seitenreihenfolge
Die Reihenfolge der Seiten wird aus der `.content`-Datei im rmdoc gelesen. Damit stimmt die Reihenfolge im PDF mit der des Tablets ueberein.
### Bekannte Einschraenkungen
- **Custom ARGB-Farben** (Highlighter, farbige Stifte): werden als grau dargestellt. `rmc` 0.3.0 unterstuetzt keine benutzerdefinierten ARGB-Farbcodes. Issue: https://github.com/ricklupton/rmc/issues
- **Neuere rm-Formate**: Einige `.rm`-Dateien enthalten Daten in einem neueren Format als `rmscene` unterstuetzt — diese Seiten koennen fehlerhaft oder leer erscheinen.
### Konvertierung manuell neu ausfuehren
```bash
# Alle PDFs loeschen und neu konvertieren
docker compose exec backup bash -c "find /data/current -name '*.pdf' -delete && remarkable-convert.sh /data/current"
# Nur neue/geaenderte Dateien konvertieren (Standard)
docker compose exec backup remarkable-convert.sh /data/current
```
## Warum dieser Aufbau
- OCR bleibt verfuegbar, weil die offizielle Cloud weiter genutzt wird.
- Kein Vendor-Lock fuer Aufbewahrung: Daten liegen lokal.
- `.rmdoc`-Originale bleiben erhalten — jederzeit zurueckspielbar.
- Vollstaendig containerisiert: keine Host-Abhaengigkeiten ausser Docker.