Self-Hosting UrBackup with Docker Compose
What Is UrBackup?
UrBackup is a client/server network backup system that backs up Windows, macOS, and Linux machines to a central server. It supports both file and image backups (full disk snapshots), with a web-based management interface. Think of it as a self-hosted alternative to enterprise backup solutions like CrashPlan or Veeam — centralized management, automatic client discovery, and both incremental and full backup support.
Prerequisites
- A Linux server (Ubuntu 22.04+ recommended)
- Docker and Docker Compose installed (guide)
- 1 GB of free RAM (minimum)
- Large backup storage volume (ext4 or BTRFS recommended for hard link support)
- Network access to client machines (port 55414-55415 + UDP 35623)
Docker Compose Configuration
Create a docker-compose.yml file:
services:
urbackup:
image: uroni/urbackup-server:2.5.35
container_name: urbackup
restart: unless-stopped
ports:
- "55414:55414" # Web UI
- "55413:55413" # FastCGI backend
- "55415:55415" # Internet client connections
- "35623:35623/udp" # Client discovery broadcast
volumes:
- urbackup-data:/var/urbackup # Server database and config
- /path/to/backups:/backups # CHANGE: backup storage location
networks:
- backup
networks:
backup:
driver: bridge
volumes:
urbackup-data:
Important: Replace /path/to/backups with your actual backup storage path. This should be on a drive with sufficient space — UrBackup stores all client backups here. Use a filesystem that supports hard links (ext4, BTRFS, XFS) for efficient deduplication.
Start the server:
docker compose up -d
Initial Setup
- Open
http://your-server-ip:55414in your browser - The web interface opens immediately — no login required initially
- Go to Settings → General and configure:
- Backup storage path (should match the container’s
/backupsmount) - Server name
- Email notifications (optional)
- Backup storage path (should match the container’s
- Set an admin password: Settings → Users → Add user with admin privileges
| Default Setting | Value |
|---|---|
| Web UI port | 55414 |
| Default auth | None (set password immediately) |
| Backup storage | /backups (container path) |
| Client discovery | Automatic via UDP broadcast |
Configuration
Installing Backup Clients
UrBackup uses client agents installed on each machine you want to back up. The server pulls backups from clients — clients don’t push to the server.
Windows: Download the client installer from the UrBackup web UI: Status → Download client or from urbackup.org/download.
Linux:
# Ubuntu/Debian
sudo add-apt-repository ppa:uroni/urbackup
sudo apt update
sudo apt install urbackup-client
# Or download from the web UI
macOS: Download the macOS client from the UrBackup website. Note: macOS support is more limited than Windows/Linux (file backup only, no image backup).
Client Discovery
Clients on the same LAN are discovered automatically via UDP broadcast on port 35623. For clients on different networks:
- In the web UI: Settings → Internet → Allow internet clients
- On the client: Configure the server’s IP address manually
- For WAN clients: Forward port 55415 on your router
Backup Types
| Type | What It Backs Up | Speed | Use Case |
|---|---|---|---|
| File backup (incremental) | Selected directories | Fast | Daily backups, documents |
| File backup (full) | All selected directories | Slow | Weekly reference backup |
| Image backup (incremental) | Entire disk/partition | Medium | Bare-metal restore |
| Image backup (full) | Complete disk snapshot | Slow | Disaster recovery baseline |
Configure backup schedules per client in the web UI under Settings → Default backup intervals.
Backup Paths
Configure which directories to back up per client:
- Windows defaults: C:\Users, C:\Program Files
- Linux defaults: /home, /etc, /var
- Custom paths: Add any directory via the web UI per client
Advanced Configuration (Optional)
Email Notifications
Settings → Mail → Configure SMTP:
SMTP server: smtp.gmail.com
SMTP port: 587
SMTP username: [email protected]
SMTP password: app-specific-password
Encryption: STARTTLS
BTRFS/ZFS Storage Optimization
If your backup volume uses BTRFS or ZFS, UrBackup can use filesystem snapshots for faster incremental backups:
- BTRFS: UrBackup detects and uses BTRFS snapshots automatically
- ZFS: Requires manual configuration in Settings → Storage
Retention Policies
Configure in Settings → General:
| Setting | Default | Recommended |
|---|---|---|
| Min. incremental file backups | 5 | 7 (one week) |
| Max. incremental file backups | 10 | 30 (one month) |
| Min. full file backups | 2 | 4 (one per week) |
| Min. incremental image backups | 1 | 4 |
| Min. full image backups | 1 | 2 |
Reverse Proxy
To access UrBackup behind a reverse proxy with SSL, proxy to port 55414. For detailed reverse proxy setup, see our Reverse Proxy Setup guide.
Note: Ports 55413 and 55415 handle client-server communication and should be forwarded directly (not proxied) if clients connect over WAN.
Backup
Back up the UrBackup server itself:
# The critical data is in the urbackup-data volume
docker compose exec urbackup /bin/sh -c "cp -r /var/urbackup /backups/server-config-backup/"
The /var/urbackup directory contains the server database, client metadata, and configuration. The /backups directory contains the actual backup data — ensure this is on redundant storage or backed up separately.
For a comprehensive backup strategy, see our Backup Strategy guide.
Troubleshooting
Clients not discovered automatically
Symptom: New clients on the LAN don’t appear in the web UI.
Fix: Ensure UDP port 35623 is open on both the server and client firewalls. If Docker is using a bridge network, client discovery may not work — use network_mode: host or configure clients manually with the server IP.
Backups failing with “no space left”
Symptom: Backup jobs fail even though disk shows free space.
Fix: Check inode usage: df -i /path/to/backups. UrBackup creates many hard links — filesystems with low inode limits (some default ext4 configs) can run out of inodes before disk space. Reformat with larger inode allocation or switch to BTRFS.
Image backups not available on Linux
Symptom: Image backup option is grayed out for Linux clients.
Fix: Image backups on Linux require the dattobd kernel module or a CBT (Changed Block Tracking) driver. Install the appropriate driver for your kernel version, or use file backups instead.
Slow backup performance
Symptom: Backups run at a fraction of network speed. Fix: Check for filesystem fragmentation on the backup volume. BTRFS users should run periodic balances. Also verify the backup volume isn’t on a slow USB drive — UrBackup benefits significantly from fast storage (SSD or RAID array).
Resource Requirements
| Resource | Requirement |
|---|---|
| RAM | 512 MB idle, 1-2 GB during active backups |
| CPU | Low (backup is I/O bound, not CPU bound) |
| Disk | Depends on clients — plan 1.5-2x the total source data size |
| Network | Gigabit recommended for LAN clients |
Verdict
UrBackup is the best self-hosted option for centralized network backup of multiple machines, especially in Windows-heavy environments. Its agent-based approach handles image backups (full disk snapshots) — something Restic and BorgBackup don’t do. If you need bare-metal restore capability or manage 5+ machines, UrBackup is the right choice. For simpler file-level backup of a single server, Restic or BorgBackup with Borgmatic are more lightweight.
Related
Get self-hosting tips in your inbox
Get the Docker Compose configs, hardware picks, and setup shortcuts we don't put in articles. Weekly. No spam.
Comments