Auberge
Selfware for managing my self-hosted FOSS stack, built around Ansible automation. No Docker bloat, runs lean on a 1€/month 1GB VPS (IONOS Linux VPS XS).
Installation
Quick Start
Add your VPS as a host:
# Prompts for SSH user and port (defaults to current user, port 22)
Deploy the full stack:
# 1. Select your VPS host
# 2. Select "auberge" playbook for the complete stack
# 3. Sit back while it configures everything
Available commands:
# Host management
# Deployment
# Backup & Restore
# Other
Backup & Restore
Auberge includes built-in backup and restore for all application data. See docs/backup.md for comprehensive documentation.
Create Backups
# Backup all apps for a host
# Backup specific apps only
# Include music files (large, excluded by default)
# Dry run to preview
Backups are stored locally in ~/.local/share/auberge/backups/ with this structure:
backups/
└── my-vps/
├── radicale/
│ ├── 2026-01-23_14-30-00/
│ └── latest -> 2026-01-23_14-30-00
├── freshrss/
├── navidrome/
├── calibre/
└── webdav/
List Backups
# List all backups
# Filter by host or app
# Output as JSON or YAML
Restore from Backup
# Restore latest backup for all apps
# Restore specific apps only
# Restore a specific backup by timestamp
# Dry run to preview
Cross-Host Restore (Migration)
Restore backups from one host to another (useful for VPS provider migration or disaster recovery):
# Restore from old-vps to new-vps
# Dry run to preview cross-host restore
Cross-host restore includes comprehensive safety checks:
- Pre-flight validation: Verifies SSH connectivity, service existence, and disk space on target
- Hostname confirmation: Requires typing the target hostname to prevent accidents
- Emergency backup: Automatically backs up target host's current state before overwriting
- Post-restore guidance: Shows required manual steps (DNS updates, config regeneration, health checks)
Important: Cross-host restore may require additional steps after completion:
- Re-run ansible to regenerate host-specific configs:
auberge ansible run --host new-vps - Update DNS records if domain names changed
- Verify SSL certificates are valid for the new host
- Check service logs for errors:
journalctl -u <service> --since "5 minutes ago"
OPML Export/Import (FreshRSS)
# Export feeds to OPML file
# Import OPML file
SSH Key Configuration
Backup operations support flexible SSH key configuration. See docs/ssh.md for details on:
- Using custom SSH keys per host
- Ad-hoc key overrides with
--ssh-keyflag - Default SSH key derivation
What's backed up:
- Radicale: Calendar and contact data, configuration
- FreshRSS: SQLite database, configuration
- Navidrome: Database and configuration (music files excluded by default)
- Calibre: Book library and metadata
- WebDAV: All files
Stack
Infrastructure
| Name | Description |
|---|---|
| Caddy | Reverse proxy with automatic HTTPS |
| fail2ban | Intrusion prevention system |
| UFW | Uncomplicated firewall |
Required VPS Provider Firewall Ports:
- Custom SSH port: Set via
SSH_PORTenvironment variable (shown in CLI warnings) - 80 (HTTP): For HTTP traffic and ACME challenges
- 443 (HTTPS): For HTTPS traffic
- 853 (DNS over TLS): For Blocky DNS service
Apps
| Category | Name | Description |
|---|---|---|
| Ad-blocker | Blocky | DNS server with ad/tracking blocking |
| VPN | WireGuard | Fast, modern VPN |
| VPN | Tailscale | Mesh VPN for secure remote access |
| Calendar | Radicale | Lightweight CalDAV/CardDAV server |
| File sharing | WebDAV | File sharing and synchronization |
| Books | Calibre | Ebook library management |
| Music | Navidrome | Music streaming server |
| News | FreshRSS | RSS feed aggregator |
| URL shortener | YOURLS | URL shortener |
Develop
See develop.md for local development setup.
Playbooks
Playbooks are organized in layers:
| Playbook | Description |
|---|---|
bootstrap |
Initial VPS setup - creates users and secures SSH |
hardening |
Security hardening - firewall, intrusion prevention, kernel |
infrastructure |
Core infrastructure - package management, shell, reverse proxy |
apps |
Self-hosted applications layer |
auberge ⭐ |
Master playbook - runs all layers (bootstrap → apps) |
Run individual layers with tags: