Odoo Backups That Actually Restore: A Strategy for Self-Hosted Databases
Database plus filestore, schedules and retention, encrypted off-site copies, the 3-2-1 rule and a test-restore routine for self-hosted Odoo.
· 10 min read
Odoo security on your own server comes down to settings you can check one by one. This checklist covers TLS and proxy mode, the database manager and master password, updates, firewalls, two-factor authentication, least privilege, backups and log monitoring.
Key takeaways
When Odoo Enterprise runs on Odoo Online or Odoo.sh, Odoo looks after the servers, the network and the patches. When Odoo Enterprise or Community runs on your own server or a private cloud, all of that moves to your team. Odoo's own deployment guide puts it plainly: securing an information system is a continuous process, not a one-shot operation.
This guide turns Odoo security on a self-hosted Odoo 19 server into a checklist you can work through, verify and repeat. The configuration options it names are the ones documented in Odoo's 19.0 deployment guide, so your administrator can check each one against the source.
Start by being clear about what you have taken on. The split below is why a self-hosted server needs a written checklist, and why our hosting comparison treats security as part of the cost.
| Area | Odoo Online | Odoo.sh | Your own server |
|---|---|---|---|
| Servers, operating system and network | Odoo | Odoo | You |
| Odoo security fixes | Applied by Odoo | Applied by Odoo | You install updates |
| HTTPS and certificates | Odoo | Odoo | You |
| Backups | Daily, by Odoo | Daily for production | You |
| Custom code quality | No custom modules | You | You |
| Users, access rights and two-factor sign-in | You | You | You |
Odoo transmits authentication information in cleartext, whether people use the web client or the API, so Odoo's guide states that a secure deployment must use HTTPS. The usual pattern is a reverse proxy such as nginx in front of Odoo, terminating TLS and forwarding requests to Odoo on the same machine.
proxy_mode = True in the Odoo configuration file, and only when Odoo really is behind a proxy. Odoo then uses the X-Forwarded headers to see the real client address, hostname and scheme. It ignores them if X-Forwarded-Host is missing, so copy the headers from Odoo's sample configuration.Odoo's checklist also asks for multi-processing mode, with worker limits such as limit_memory_hard, limit_time_cpu and limit_time_real set to match your typical usage, so that one runaway request cannot take the whole server down.
If PostgreSQL runs on a different machine, encrypt that connection too. The db_sslmode option accepts disable, allow, prefer, require, verify-ca or verify-full.
The database manager at /web/database/manager can create, duplicate, back up, restore and delete databases. Odoo strongly recommends disabling it on any internet-facing system: it is a development and demo tool and may expose dangerous features to attackers.
db_name or a dbfilter such as ^%d$, so nobody needs to pick one.list_db = False to stop database listing and block the management screens. The command-line equivalent is --no-database-list.admin_passwd, the master password, to a long random value and store it in a password manager. Odoo generates a random master password for new on-premise databases and hashes the value once it is set through the interface.Odoo publishes security advisories for Community and Enterprise as issues marked [SEC] in its GitHub repository, and patches Odoo Online and Odoo.sh as soon as a fix is available. On your own server, a fix only arrives when you install it.
Many incidents start with an account rather than a server. Odoo's guide asks for unique logins and strong passwords for every administrator, no login called admin, no default passwords even on test databases, and administrator accounts kept for administration rather than daily work.
Server, hosting and domain credentials deserve the same care. Our free SBS Password Manager keeps them inside Odoo, encrypted with a key held outside the database, revealed only after an identity check to people named on each record, and logged every time someone looks. It is built and tested on Odoo 19 Community and listed for Odoo.sh and on-premise installations, not Odoo Online. Its Copy button needs HTTPS, one more reason to finish the proxy step.
Odoo writes a log entry for every login attempt, with the result, the login and the source IP address, in a line that reads "Login failed for db:... login:... from ...". That makes failed logins easy to watch:
Tip: After every change, test from outside your network. Plain HTTP should redirect to HTTPS, /web/database/manager should be blocked, and ports 8069, 8072 and 5432 should not answer at all.
proxy_mode = True behind the proxy, with Odoo's ports closed to the internet.list_db = False, with db_name or dbfilter matching one database per hostname.admin_passwd, kept in a password manager.limit_memory_hard, limit_time_cpu and limit_time_real.Through OdooStar, we implement Odoo Enterprise on Odoo Online, Odoo.sh and your own servers, and Odoo Community where it fits. With your own servers, the servers, security patches and backups stay with your IT team, and we can agree a support arrangement around them: a review against this checklist before go-live, then issue resolution, monitoring and backups. If running servers is not where you want to spend your time, we can help you weigh a move to Odoo.sh or Odoo Online.
Ask for a review of your set-up: contact us, call +971 55 973 4524 or email [email protected].
Send us a summary of your hosting set-up. Our engineers will check it against this list and tell you what to fix first.