Skip to content

Repository files navigation

OBM CE — Backup Manager for Odoo

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.

What CE does

  • Agentless — talks to Odoo's standard /web/database/backup endpoint 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_dump header) and its SHA-256 recorded before it is accepted.
  • Retentionkeep 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).

Quickstart (Docker, ~5 minutes)

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-ce

Open 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).

Two Odoo gotchas that will bite you

  1. 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.
  2. 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.

Restoring a backup

CE creates standard Odoo backups; restoring them is done with Odoo's own tooling:

  1. Download the .zip from OBM.
  2. 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.
  3. 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 .dump files with pg_restore.

One-click restores back into any instance — plus automated restore drills that regularly prove your backups actually restore — are part of OBM Pro.

Operating notes

  • Back up OBM itself: the config lives in .env (keep FERNET_KEY in 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=true in .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=true and FORWARDED_ALLOW_IPS to the proxy address.
  • Update check: once a day CE pings obm.projomania.com with only its edition + version string to learn about new releases. VERSION_CHECK=false disables it.

Development

# 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.sh

Database migrations run automatically on container start (alembic upgrade head).

License & trademark

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.

About

No description, website, or topics provided.

Resources

Contributing

Security policy

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages