Teach the systemd installer to install required Debian/Ubuntu packages by default, with an opt-out for users who manage system dependencies themselves. Add explicit MariaDB install-extra handling so native installs can pull in both the Python extra and required client build packages. Slim down the README to production setup and operations, and move development, Docker, migration helper, and architecture notes into docs/development.md.
165 lines
4.3 KiB
Markdown
165 lines
4.3 KiB
Markdown
# pobsync
|
|
|
|
`pobsync` is a pull-based backup service. It runs on a central backup server and pulls data from remote machines via
|
|
rsync over SSH.
|
|
|
|
The current refactor is SQL-first:
|
|
|
|
- Django is the management layer and source of truth.
|
|
- SQLite is the default database; MariaDB is optional.
|
|
- Backups use the existing rsync snapshot engine internally.
|
|
- Scheduling is handled by a Django scheduler service, not host cron.
|
|
- SSH keys can be managed from Django and selected globally or per host.
|
|
|
|
## Recommended Production Install
|
|
|
|
The recommended production deployment is native systemd services on the backup server. Docker Compose remains available
|
|
for development and disposable test installs, but native systemd avoids Docker friction around SSH, filesystem mounts,
|
|
large backup storage, and host-level service logs.
|
|
|
|
Recommended layout:
|
|
|
|
```
|
|
/opt/pobsync/app # installed app checkout
|
|
/opt/pobsync/venv # Python virtualenv
|
|
/etc/pobsync/pobsync.env # settings and secrets
|
|
/var/lib/pobsync # SQLite database, state, runtime SSH key files, static files
|
|
/backups # backup storage, or set another absolute path
|
|
```
|
|
|
|
From a checked-out copy of this repository, run:
|
|
|
|
```
|
|
sudo scripts/install-systemd
|
|
```
|
|
|
|
The installer will, by default:
|
|
|
|
- install required Debian/Ubuntu OS packages with `apt-get`
|
|
- copy the checkout to `/opt/pobsync/app`
|
|
- create `/opt/pobsync/venv`
|
|
- write `/etc/pobsync/pobsync.env` if it does not exist
|
|
- create `/var/lib/pobsync`, `/var/log/pobsync`, and the backup root
|
|
- install Python dependencies
|
|
- run migrations and collect static files
|
|
- install and start `pobsync-web`, `pobsync-worker`, and `pobsync-scheduler`
|
|
|
|
Common overrides:
|
|
|
|
```
|
|
sudo scripts/install-systemd \
|
|
--backup-root /mnt/backups/pobsync \
|
|
--allowed-hosts backup.example.com,localhost,127.0.0.1 \
|
|
--csrf-trusted-origins https://backup.example.com
|
|
```
|
|
|
|
Use `--no-install-os-packages` if you want to manage system packages yourself. Use `--force-env` only when you want the
|
|
installer to rewrite an existing `/etc/pobsync/pobsync.env`.
|
|
|
|
For MariaDB support, add:
|
|
|
|
```
|
|
sudo scripts/install-systemd --install-extras mariadb
|
|
```
|
|
|
|
## Services
|
|
|
|
The installer creates:
|
|
|
|
- `pobsync-web.service`: Gunicorn Django control panel on `127.0.0.1:8010`
|
|
- `pobsync-worker.service`: queued backup worker
|
|
- `pobsync-scheduler.service`: SQL-backed schedule dispatcher
|
|
|
|
Check service state and logs:
|
|
|
|
```
|
|
systemctl status pobsync-web pobsync-worker pobsync-scheduler
|
|
journalctl -u pobsync-worker -f
|
|
```
|
|
|
|
Restart after configuration changes:
|
|
|
|
```
|
|
sudo systemctl restart pobsync-web pobsync-worker pobsync-scheduler
|
|
```
|
|
|
|
## Reverse Proxy
|
|
|
|
Use an existing reverse proxy by forwarding to:
|
|
|
|
```
|
|
http://127.0.0.1:8010
|
|
```
|
|
|
|
To install a starter nginx site file:
|
|
|
|
```
|
|
sudo scripts/install-systemd --with-nginx --server-name backup.example.com
|
|
```
|
|
|
|
For HTTPS behind a reverse proxy, set:
|
|
|
|
```
|
|
POBSYNC_DJANGO_ALLOWED_HOSTS=backup.example.com,localhost,127.0.0.1
|
|
POBSYNC_DJANGO_CSRF_TRUSTED_ORIGINS=https://backup.example.com
|
|
```
|
|
|
|
## Django UI
|
|
|
|
After install, open the control panel through your reverse proxy or directly at:
|
|
|
|
```
|
|
http://127.0.0.1:8010/
|
|
```
|
|
|
|
Create a superuser if needed:
|
|
|
|
```
|
|
sudo -u pobsync /opt/pobsync/venv/bin/python /opt/pobsync/app/manage.py createsuperuser
|
|
```
|
|
|
|
The UI includes:
|
|
|
|
- dashboard and host detail pages
|
|
- global and per-host config forms
|
|
- schedule editing
|
|
- manual backup queueing
|
|
- snapshot discovery
|
|
- SQL retention planning and apply flow
|
|
- Django-managed SSH keys
|
|
- `/self-check/` for runtime checks
|
|
|
|
## SSH Keys
|
|
|
|
SSH keys can be managed from `/ssh-credentials/`. Add a private key, optionally paste `known_hosts` entries, and select
|
|
the credential either as the global default or as a per-host override.
|
|
|
|
When a backup starts, the worker writes the selected key to:
|
|
|
|
```
|
|
$POBSYNC_HOME/state/ssh-credentials/<id>/identity
|
|
```
|
|
|
|
The key file is written with `0600` permissions and injected into the rsync SSH command with `IdentityFile`.
|
|
|
|
## Updates
|
|
|
|
From a fresh checkout or the existing app directory:
|
|
|
|
```
|
|
git pull
|
|
sudo scripts/install-systemd --app-dir /opt/pobsync/app
|
|
```
|
|
|
|
Then check:
|
|
|
|
```
|
|
systemctl status pobsync-web pobsync-worker pobsync-scheduler
|
|
```
|
|
|
|
## Development
|
|
|
|
Development, Docker, migration helper commands, and architecture notes live in:
|
|
|
|
- [docs/development.md](docs/development.md)
|