OpsVault

Configuration

Overview of the OpsVault configuration file.

OpsVault is configured through a single YAML file, by default at /etc/opsvault/config.yaml.

Create the file

opsvault config    # interactive wizard — creates the file if it doesn't exist

Top-level fields

version: 1                    # config format version, always 1
backup_dir: /var/backups/opsvault   # where backup files are stored locally
schedule: "0 2 * * *"         # cron expression for automatic backups
log_level: info               # debug | info | warn | error
log_format: json              # json (for systemd) | text (for terminal)

Schedule format

Standard 5-field cron:

┌─ minute (0–59)
│ ┌─ hour (0–23)
│ │ ┌─ day of month (1–31)
│ │ │ ┌─ month (1–12)
│ │ │ │ ┌─ day of week (0–7, 0 and 7 = Sunday)
│ │ │ │ │
0 2 * * *     every day at 02:00
0 */6 * * *   every 6 hours
30 3 * * 0    every Sunday at 03:30
0 1 * * 1-5   weekdays at 01:00

Log format

ValueWhen to use
jsonDefault. Structured output consumed by journald / log aggregators.
textHuman-readable colored output. Auto-selected when a TTY is detected.

Sections

Full example

version: 1
backup_dir: /var/backups/opsvault
schedule: "0 2 * * *"
log_level: info
log_format: json

databases:
  - name: myapp_prod
    type: postgres
    host: 127.0.0.1
    port: 5432
    user: backup_user
    password_env: DB_PASS
    database: myapp
    enabled: true

paths:
  - name: myapp_uploads
    path: /var/www/myapp/uploads
    preset_excludes:
      - cache
    enabled: true

storage:
  rclone:
    enabled: true
    remote: "gdrive"
    path: "opsvault/{hostname}/{name}/{date}"
    delete_after_upload: false

retention:
  local:
    enabled: true
    keep_last: 7
    keep_days: 30
  remote:
    enabled: true
    keep_last: 0
    keep_days: 90

notifications:
  on_success: true
  on_failure: true
  telegram:
    enabled: true
    bot_token_env: TELEGRAM_TOKEN
    chat_id: "123456789"
  email:
    enabled: false

On this page