bookstackbackup
This project provides a lightweight, containerized backup solution for BookStackβ .
10K+
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.
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:
Docker Healthcheck support
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
/api/books and /api/books/:id/export/pdf endpointsNC_WEBDAV_UPLOAD=onNC_WEBDAV_URLNC_TALK_NOTIFY=onNC_TALK_URL, NC_TALK_BOT_CHANNEL, and NC_TALK_BOT_SECRETEMAIL_NOTIFY=onSMTP_SERVER, EMAIL_FROM, EMAIL_TO, etc.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.
/logs/backup_YYYY-MM-DD.log/backup/<server_name>/YYYY-MM-DD/*.pdfMIT License β free for commercial and private use.
Content type
Image
Digest
sha256:4fb12e4e1β¦
Size
9 MB
Last updated
about 1 year ago
docker pull onesystems/bookstackbackup