Skip to main content

Bare Metal / VM Deployment

Run rabbitmq-backup directly on a server as a one-shot command, a cron job, or a long-running systemd service.

Option 1: Download a Release Binary

Download the latest pre-built binary from the GitHub releases page:

# Download the latest release (replace VERSION with the actual version)
curl -LO https://github.com/osodevops/rabbitmq-backup/releases/download/vVERSION/rabbitmq-backup-linux-amd64.tar.gz
tar xzf rabbitmq-backup-linux-amd64.tar.gz
sudo mv rabbitmq-backup /usr/local/bin/

Verify the installation:

rabbitmq-backup --version

Option 2: Build from Source

Prerequisites

  • Rust toolchain (1.75 or later)
  • pkg-config and OpenSSL development headers
# Ubuntu / Debian
sudo apt-get install -y pkg-config libssl-dev

# RHEL / Fedora
sudo dnf install -y pkg-config openssl-devel

# macOS
brew install openssl pkg-config

Build

git clone https://github.com/osodevops/rabbitmq-backup.git
cd rabbitmq-backup
cargo build --release

The binary is at target/release/rabbitmq-backup. Copy it to a location on your PATH:

sudo cp target/release/rabbitmq-backup /usr/local/bin/

Verify

rabbitmq-backup --help

Create a Configuration File

Place your configuration file at /etc/rabbitmq-backup/backup.yaml:

sudo mkdir -p /etc/rabbitmq-backup
/etc/rabbitmq-backup/backup.yaml
mode: backup
backup_id: "daily-backup"

source:
amqp_url: "amqp://backup_user:${RABBITMQ_PASSWORD}@rabbitmq.example.com:5672/%2f"
management_url: "http://rabbitmq.example.com:15672"
management_username: backup_user
management_password: "${RABBITMQ_PASSWORD}"
queues:
include:
- "*"
exclude:
- "*-dead-letter"

storage:
backend: s3
bucket: my-rabbitmq-backups
region: us-east-1
prefix: prod/

backup:
compression: zstd
compression_level: 3
prefetch_count: 100
max_concurrent_queues: 4
include_definitions: true
stop_at_current_depth: true

metrics:
enabled: true
port: 8080

Run a One-Shot Backup

rabbitmq-backup backup --config /etc/rabbitmq-backup/backup.yaml

Add -v for debug logging or -vv for trace-level output:

rabbitmq-backup backup -v --config /etc/rabbitmq-backup/backup.yaml

Run on a Schedule with Cron

# Run a daily backup at 02:00
echo '0 2 * * * root RABBITMQ_PASSWORD=changeme rabbitmq-backup backup --config /etc/rabbitmq-backup/backup.yaml >> /var/log/rabbitmq-backup.log 2>&1' \
| sudo tee /etc/cron.d/rabbitmq-backup

Run as a Systemd Service

For long-running or regularly triggered backups, create a systemd service and timer.

Service Unit

/etc/systemd/system/rabbitmq-backup.service
[Unit]
Description=RabbitMQ Backup
After=network-online.target
Wants=network-online.target

[Service]
Type=oneshot
User=rabbitmq-backup
Group=rabbitmq-backup
ExecStart=/usr/local/bin/rabbitmq-backup backup --config /etc/rabbitmq-backup/backup.yaml
Environment=RABBITMQ_PASSWORD=changeme
Environment=AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
Environment=AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
StandardOutput=journal
StandardError=journal

# Hardening
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/var/lib/rabbitmq-backup

[Install]
WantedBy=multi-user.target

Timer Unit (Daily at 02:00)

/etc/systemd/system/rabbitmq-backup.timer
[Unit]
Description=Daily RabbitMQ Backup

[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true

[Install]
WantedBy=timers.target

Enable and Start

# Create the service user
sudo useradd -r -s /usr/sbin/nologin rabbitmq-backup
sudo mkdir -p /var/lib/rabbitmq-backup
sudo chown rabbitmq-backup:rabbitmq-backup /var/lib/rabbitmq-backup

# Reload systemd and enable the timer
sudo systemctl daemon-reload
sudo systemctl enable --now rabbitmq-backup.timer

# Check timer status
sudo systemctl list-timers rabbitmq-backup.timer

# Run manually to verify
sudo systemctl start rabbitmq-backup.service
sudo journalctl -u rabbitmq-backup.service -f

Uninstall

sudo systemctl disable --now rabbitmq-backup.timer
sudo rm /etc/systemd/system/rabbitmq-backup.{service,timer}
sudo systemctl daemon-reload
sudo rm /usr/local/bin/rabbitmq-backup
sudo rm -rf /etc/rabbitmq-backup