Free, self-hosted, agentless backups for the Odoo instances you run. One small Docker container gives you scheduled backups, integrity verification, retention and a clean dashboard — for any number of Odoo servers and databases.
OBM CE is the Community Edition of OBM. The hosted Pro edition adds restores & restore drills, e-mail/Telegram alerts with a dead-man's-switch, GFS retention & legal-hold pins, share links, API tokens & Prometheus metrics, team accounts, off-site storage and SSH backups — see the comparison.
- Agentless — talks to Odoo's standard
/web/database/backupendpoint over HTTPS. Nothing to install on the Odoo servers. - Organized — customers → instances → databases, with a 3-step onboarding wizard that discovers each instance's databases live.
- Scheduled — daily / weekly / monthly / cron, per database, with timezones.
- Verified — every archive is checked (zip CRC + manifest, or
pg_dumpheader) and its SHA-256 recorded before it is accepted. - Retention — keep N days and/or keep last N copies; a backup survives while either rule keeps it, and the newest backup is never deleted.
- Observable — dashboard with 30-day trends, live job progress, and a full activity log.
Backups are standard Odoo artifacts: a .zip (database + filestore, restorable
via Odoo's own database manager) or a smaller .dump (database only).
git clone https://github.com/ProjoMania/obm-ce.git && cd obm-ce
# 1. the two required secrets
python3 scripts/gen_fernet_key.py # -> FERNET_KEY
python3 scripts/hash_password.py # -> ADMIN_PASSWORD_HASH (pick a password)
# 2. configure
cp .env.example .env # paste both values in
# IMPORTANT: single-quote the bcrypt hash — it contains $ characters:
# ADMIN_PASSWORD_HASH='$2b$12$...'
# 3. run
docker compose up -d # pulls ghcr.io/projomania/obm-ceOpen http://localhost:8300, sign in, then Customers → Add customer: give the customer a name, add the Odoo URL + its master password, tick the databases to protect, and set a schedule + retention on each database's page.
The container stores everything under ./data/ (SQLite DB + backup files).
- The instance must have
list_db = True. On Odoo 17/18/19 the backup endpoint itself checks the database against the listing, so an instance with listing disabled cannot be backed up over HTTP at all — and Odoo reports it with the same page as a wrong password. OBM detects and names this case. - The first backup can SET the master password. If the instance still has
Odoo's default (
admin), the first backup request silently changes it to whatever you typed. Always register the instance's real master password.
CE creates standard Odoo backups; restoring them is done with Odoo's own tooling:
- Download the
.zipfrom OBM. - Open the target instance's database manager
(
https://your-odoo/web/database/manager) → Restore Database → upload the zip, enter the master password, pick a name. - Large databases behind a proxy/Cloudflare may hit upload-size limits
(HTTP 413) — restore on the Odoo host itself in that case, or use
db-only .dumpfiles withpg_restore.
One-click restores back into any instance — plus automated restore drills that regularly prove your backups actually restore — are part of OBM Pro.
- Back up OBM itself: the config lives in
.env(keepFERNET_KEYin your password manager — losing it means re-entering every master password) and the state in./data/app.db. Copy those two; the backup artifacts under./data/backups/are the payload. - Locked out? Set
ADMIN_FORCE_RESET=truein.env, restart once (this re-applies the env password and revokes sessions), then unset it. - HTTPS: put your reverse proxy in front, set
COOKIE_SECURE=trueandFORWARDED_ALLOW_IPSto the proxy address. - Update check: once a day CE pings
obm.projomania.comwith only its edition + version string to learn about new releases.VERSION_CHECK=falsedisables it.
# backend — FastAPI + SQLAlchemy + APScheduler (SQLite)
cd backend
python3.12 -m venv .venv && .venv/bin/pip install -e ".[dev]"
.venv/bin/ruff check app/ tests/
.venv/bin/python -m pytest -q # 138 tests, incl. a fake-Odoo harness
# frontend — React 19 + Vite + Tailwind v4
cd frontend
npm install && npx tsc --noEmit && npm run dev
# full-loop smoke test against a THROWAWAY real Odoo 19 (docker required)
OBM_PASS=... scripts/e2e_manual.shDatabase migrations run automatically on container start (alembic upgrade head).
OBM CE is licensed under the GNU AGPL-3.0. Contributions are welcome — see CONTRIBUTING.md (contributions require the short CLA described there).
OBM is an independent product of ProjoMania and is not affiliated with or endorsed by Odoo S.A. "Odoo" is a trademark of Odoo S.A.