• 1 Post
  • 12 Comments
Joined 4 months ago
cake
Cake day: April 25th, 2026

help-circle
  • I actually use the document_exporter of paperless-ngx. I have a small bash script backup-paperless.sh that runs the paperless-ngx document_exporter and also makes a database dump using pg_dump. It sets up the restic backups logic with daily, weekly and monthly backups. I run that bash script using a systemd service paperless-backup.service. This service is run daily with the timer paperless-backup.timer, randomly at 3 am ±30 minutes. restic is smart, so it does only backup if there are changes. The incremental backups are great, in case the database corrupts without me noticing. I’ll share the scripts in case you are interested in how it works:

    backup-paperless.sh

    #!/bin/bash
    set -euo pipefail
    
    COMPOSE_DIR="/home/user/paperless-ngx/"
    DUMP_DIR="$COMPOSE_DIR/sqldump"
    EXPORT_DIR="/usr/src/paperless/export"
    
    export RESTIC_REPOSITORY="sftp:abc123@abc123.your-storagebox.de:/backup/restic"
    export RESTIC_PASSWORD_FILE="/home/user/.config/restic/password"
    
    mkdir -p "$DUMP_DIR"
    
    cd "$COMPOSE_DIR"
    docker compose exec -T webserver document_exporter "$EXPORT_DIR" -p
    docker compose exec -T db pg_dump -U paperless paperless > "$DUMP_DIR/dump.sql"
    
    
    
    restic backup "$DUMP_DIR" "$COMPOSE_DIR/export"
    
    restic forget \
    	--keep-daily 7 \
    	--keep-weekly 4 \
    	--keep-monthly 6 \
    	--prune
    
    rm -rf "$COMPOSE_DIR/export"/*
    rm -rf "$DUMP_DIR"/*
    

    paperless-backup.service

    [Unit]
    Description=Paperless-ngx Restic Backup
    Wants=network-online.target
    After=network-online.target docker.service
    
    [Service]
    Type=oneshot
    User=user
    WorkingDirectory=/home/user/paperless-ngx
    ExecStart=/home/user/paperless-ngx/backup-paperless.sh
    

    paperless-backup.timer

    [Unit]
    Description=Run paperless backup every 24 hours
    
    [Timer]
    OnCalendar=*-*-* 03:00:00
    Persistent=true
    RandomizedDelaySec=30min
    
    [Install]
    WantedBy=timers.target
    





  • I bought a Red Plus NAS 8TB a couple of weeks ago, because I didn’t know better. My mini PC is sitting a meter behind the monitors of my desktop PC and the noise is unbearable. So at the moment I just use the HDD as a backup, but it will be impossible for me to place it somewhere near where I live. Unfortunately I have no Ethernet in the kitchen.

    I could have known this before but I didn’t know better. I had no idea those things run 24/7. You seem to be better informed than me, just wanted to warn you!