Skip to content

Configuration of Woodstock Backup

Configuration of the list of backup

In the directory specified by the CONFIG_PATH environment variable (default: /var/lib/woodstock/config), you must configure in the file hosts.yml the list of hosts to backup.

The file is in YAML format and contains a list of host names.

yaml
- server-1
- server-2
- server-3

For each server to backup, you must create a file with the name of the server (e.g., server-1.yml) in the same directory.

Content of the configuration of a host

This is an example of configuration for a host:

yaml
password: zYWYK1zdYdrvQwEu96n1rIMU4K3LA38xGERMXdDH2chdUV8mJXAuK8XvgWQFoiDq
addresses:
  - 10.0.0.1
operations:
  preCommands:
    - command: /data/prebackup.sh
  operation:
    shares:
      - name: /data/dump
      - name: /data/volumes
        excludes:
          - "**/*.unison.tmp"
FieldDefault valueDescription
passwordPassword used for authentication with the client agent (must match the password configured on the agent).
addressesList of IP addresses associated with the host. This can be used if Direct resolution or mDNS resolution can't be used.
port3657Port used to connect to the host.
operationsList of operations to execute on the host.
scheduleThe scheduler configuration for the backup.

The scheduler

Inside the schedule field:

FieldDefault valueDescription
activatedtrueEnable or disable automatic backups
backupPeriod8340Period between two backups in minutes (24H - 5 minutes)
backupToKeep{ hourly: -1, daily: 7, weekly: 4, monthly: 12, yearly: -1 }Number of backups to keep in each category

Operations

In the list of operations we have three parts:

FieldDefault valueDescription
preCommandsArray of commands to execute before the backup
operationList of shares and folders to backup
postCommandsArray of commands to execute after the backup

The preCommands and postCommands arrays are lists of ExecuteCommandOperation objects. The operation field is of type BackupOperation.

ExecuteCommandOperation

FieldDefault valueDescription
commandA command to execute (ex: /bin/true)

BackupOperation

FieldDefault valueDescription
includes[]List of files to include
excludes[]List of files to exclude (e.g., *.bak)
timeout120Timeout in seconds after an inactive period
sharesList of backup shares

Each share has the following properties:

FieldDefault valueDescription
nameName of the share (path on the client to backup)
includes[]List of files to include (merged with includes of backup)
excludes[]List of files to exclude (merged with excludes of backup)

How to Write Includes and Excludes

The includes and excludes fields allow you to specify which files should be included or excluded during the backup process. These fields use patterns that follow the rules of the globset crate.

Includes

The includes field is a list of patterns that specify which files to include in the backup. If this field is empty, all files are included by default.

Examples:

  • *: Matches any file.
  • *.txt: Matches all files with the .txt extension.
  • **/*.log: Matches all .log files in all subdirectories.
  • data/**: Matches all files and folders within the data directory.

Excludes

The excludes field is a list of patterns that specify which files to exclude from the backup. These patterns are applied after the includes patterns.

Examples:

  • *.bak: Excludes all files with the .bak extension.
  • temp/**: Excludes all files and folders within the temp directory.

Example Configuration

In this example:

yaml
includes:
  - "*.txt"
  - "data/**/*.log"
excludes:
  - "*.bak"
  - "temp/**"
  • All .txt files and all .log files within the data directory and its subdirectories are included.
  • All .bak files and all files within the temp directory and its subdirectories are excluded.

By using these patterns, you can precisely control which files are included or excluded in your backup operations.

Refresh cache

After modifying the configuration, you must refresh the cache from the web interface.

Configuration Examples

Here are some examples of host configurations for different use cases:

Example 1: Basic Server Configuration with Pre-Commands

This example demonstrates a configuration for a remote server with a pre-backup script:

yaml
password: f8vyj2r9rNyax7yMWAHKmQExo1GrXeI2n8dAJg40TmpntjYx1IDKJHnXfh8RiRp8
schedule:
  activated: false
addresses:
  - 192.168.1.100
operations:
  preCommands:
    - command: /var/app/prebackup.sh
  operation:
    excludes:
      - "*.unison.tmp"
    shares:
      - name: /data/dump
      - name: /data/volumes

Example 2: Linux Home Directory with Extensive Exclusions

This example shows how to back up a Linux home directory while excluding numerous unnecessary files and directories:

yaml
password: f8vyj2r9rNyax7yMWAHKmQExo1GrXeI2n8dAJg40TmpntjYx1IDKJHnXfh8RiRp8
schedule:
  activated: false
operations:
  operation:
    shares:
      - name: /home
        excludes:
          - "*.vdi"
          - "*.vmdk"
          - "*.sft"
          - "*.safetensors"
          - "*.ckpt"
          - "*.pt"
          - "*.pth"
          - ".cache/lm-studio/"
          - "**/.venv"
          - "**/app/cache"
          - "**/web/public/"
          - "**/mongodb/configdb"
          - "**/mongodb/db"
          - "**/mongodb/dump"
          - "**/var/cache"
          - "**/node_modules"
          - "**/vcpkg"
          - "**/vendor"
          - "**/target/debug"
          - "**/target/release"
          - "user/.android"
          - "user/.AndroidStudio*"
          - "user/.bun"
          - "user/.cache"
          - "user/.cargo"
          - "user/.ccache"
          - "user/.CloudStation"
          - "user/.composer"
          - "user/.config/Code"
          - "user/.config/google-chrome"
          - "user/.gradle"
          - "user/.local/share/flatpak"
          - "user/.local/share/Google"
          - "user/.local/share/Trash"
          - "user/.m2"
          - "user/.meteor"
          - "user/.npm"
          - "user/.nvm"
          - "user/.rustup"
          - "user/.thumbnails"
          - "user/.vagrant.d"
          - "user/.VirtualBox"
          - "user/.vscode"
          - "user/.vscode-server"
          - "user/.wine"
          - "user/snap"
          - "user/tmp"
          - "user/VirtualBox VMs"
      - name: /etc

Example 3: Windows Multi-Drive Backup with Path-Specific Exclusions

This example demonstrates how to configure backups for a Windows system with multiple drives and path-specific exclusions:

yaml
password: f8vyj2r9rNyax7yMWAHKmQExo1GrXeI2n8dAJg40TmpntjYx1IDKJHnXfh8RiRp8
schedule:
  activated: true
operations:
  operation:
    excludes:
      - "*.vdi"
      - "*.vmdk"
      - "*.sft"
      - "*.safetensors"
      - "*.ckpt"
      - "*.pt"
      - "*.pth"
      - "**\\app\\cache"
      - "**\\web\\public"
      - "**\\mongodb\\configdb"
      - "**\\mongodb\\db"
      - "**\\mongodb\\dump"
      - "**\\var\\cache"
      - "**\\node_modules"
      - "**\\vcpkg"
      - "**\\target\\debug"
      - "**\\target\\release"
      - "*.tmp"
      - "pagefile.sys"
      - "System Volume Information"
      - "$RECYCLE.BIN"
    shares:
      - name: "c:\\tools"
      - name: "c:\\Users"
        excludes:
          - "alice\\.android"
          - "alice\\.rustup"
          - "alice\\.cargo"
          - "alice\\.vscode"
          - "alice\\.gradle"
          - "alice\\AppData\\Roaming\\.minecraft"
          - "alice\\AppData\\Roaming\\Code"
          - "alice\\AppData\\Roaming\\Google"
          - "alice\\AppData\\Roaming\\Mozilla\\Firefox"
          - "alice\\AppData\\Local"
          - "alice\\SynologyDrive"
          - "alice\\OneDrive"
          - "alice\\CrossDevice"
          - "bob\\SynologyDrive"
          - "bob\\OneDrive"
          - "bob\\CrossDevice"
      - name: "d:\\"
        excludes:
          - "Documents public"

These examples demonstrate different approaches to configuring backups based on the operating system and specific requirements. You can adapt these examples to your needs by modifying the paths, exclusion patterns, and other settings as appropriate.