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