onesystems/bookstackbackup

By onesystems

β€’Updated about 1 year ago

This project provides a lightweight, containerized backup solution for BookStack⁠.

Image
Networking
Security
Monitoring & observability
0

10K+

onesystems/bookstackbackup repository overview

β πŸ“š BookStack Backup Docker

This project provides a lightweight, containerized backup solution for BookStack⁠, including optional upload to a Nextcloud WebDAV folder and alerting via Nextcloud Talk and email.


β πŸš€ Features

  • Export BookStack books as PDF (default)

  • Upload backups to Nextcloud WebDAV

  • Cleanup old backups (both local and remote)

  • Scheduled backups via cron

  • Error notifications via:

    • πŸ“§ Email
    • πŸ’¬ Nextcloud Talk Bot
  • Docker Healthcheck support


⁠🐳 Usage (Docker Compose)

version: "3.9"

services:
  bookstack-backup:
    image: bookstack-backup:latest
    container_name: bookstack-backup
    volumes:
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
      - ./logs:/logs
      - ./backup:/backup
    environment:
      CRON_SCHEDULE: "0 0 * * *"
      EXPORT_FORMAT: "pdf"
      RETENTION_DAYS: 30
      BACKUP_DIR: "/backup"
      LOG_DIR: "/logs"

      BOOKSTACK_SERVERS: |
        server1|https://bookstack1.example.com|token_id_1|token_secret_1
        server2|https://bookstack2.example.com|token_id_2|token_secret_2

      NC_WEBDAV_UPLOAD: "off"
      NC_WEBDAV_URL: "https://cloud.example.com/remote.php/dav/files/USERNAME/BookStackBackups"
      NC_USER: "USERNAME"
      NC_PASSWORD: "APP_PASSWORD"

      NC_TALK_NOTIFY: "off"
      NC_TALK_URL: "https://cloud.example.com"
      NC_TALK_BOT_CHANNEL: "channel_id"
      NC_TALK_BOT_SECRET: "secret"

      EMAIL_NOTIFY: "off"
      EMAIL_TO: "[email protected]"
      EMAIL_FROM: "[email protected]"
      SMTP_SERVER: "smtp.example.com"
      SMTP_PORT: 587
      SMTP_USER: "smtp-user"
      SMTP_PASS: "smtp-pass"
      SMTP_TLS: "on"

    healthcheck:
      test: ["CMD", "/app/healthcheck.sh"]
      interval: 5m
      timeout: 10s
      retries: 3
      start_period: 30s

β βœ… Setup

⁠1. Configure BookStack API
  • Create tokens in Settings > API Tokens (admin panel)
  • Ensure the token has access to the /api/books and /api/books/:id/export/pdf endpoints
⁠2. Enable WebDAV upload (optional)
  • Set NC_WEBDAV_UPLOAD=on
  • Provide valid credentials and NC_WEBDAV_URL
⁠3. Enable Nextcloud Talk notifications (optional)
  • Set NC_TALK_NOTIFY=on
  • Fill in NC_TALK_URL, NC_TALK_BOT_CHANNEL, and NC_TALK_BOT_SECRET
⁠4. Enable Email alerts (optional)
  • Set EMAIL_NOTIFY=on
  • Configure SMTP_SERVER, EMAIL_FROM, EMAIL_TO, etc.

β πŸ€– Create a Nextcloud Talk Bot

To enable Nextcloud Talk notifications, a bot must be created:

# Configuration
BOT_NAME="BookStack"  # Display name
BOT_SECRET=$(openssl rand -hex 40)
BOT_BASE_URL="https://cloud.example.com/ocs/v2.php/apps/spreed/api/v1/bot"

# Sanitize for URL (lowercase, no spaces)
BOT_NAME_LOWER=$(echo "$BOT_NAME" | tr '[:upper:]' '[:lower:]' | tr -cd 'a-z0-9_-')
BOT_URL="${BOT_BASE_URL}/${BOT_NAME_LOWER}"

# Register bot
php occ talk:bot:install \
  --feature message \
  "$BOT_NAME" \
  "$BOT_SECRET" \
  "$BOT_URL" \
  && echo "βœ… Bot installed"
echo "πŸ”‘ Secret: $BOT_SECRET"
echo "🌐 URL:    $BOT_URL"

Set NC_TALK_BOT_SECRET to the value of $BOT_SECRET in your compose file.


β πŸ“ Output

  • Logs saved to /logs/backup_YYYY-MM-DD.log
  • Book exports saved to /backup/<server_name>/YYYY-MM-DD/*.pdf
  • Remote uploads (if enabled) stored in Nextcloud under matching folder structure

β πŸ§‘β€πŸ’» Author


β πŸ“ License

MIT License – free for commercial and private use.

Tag summary

Content type

Image

Digest

sha256:4fb12e4e1…

Size

9 MB

Last updated

about 1 year ago

docker pull onesystems/bookstackbackup