- Inicio
- Apps
- SaaS Tools
- Maintenance Mode for Odoo
Vista previa ilustrativaA build-to-order Odoo module that puts your website and/or backend into a controlled maintenance mode during
deploys, migrations, and cutovers — with an allowlisted admin bypass, a branded holding page, and scheduled windows. ECOSIRE builds, installs, and supports it for Odoo 17.0, 18.0, and 19.0.
¿Qué es Maintenance Mode for Odoo?
A build-to-order Odoo module that puts your website and/or backend into a controlled maintenance mode during deploys, migrations, and cutovers — with an allowlisted admin bypass, a branded holding page, and scheduled windows. ECOSIRE builds, installs, and supports it for Odoo 17.0, 18.0, and 19.0. Built to order by ECOSIRE for Odoo 17, 18, 19 — indicative price from $999.00 USD; request a quote for a scoped proposal.
Características clave
Hecho a medida, listo para ti
Sin configuración por tu cuenta: una app funcional creada, instalada y con soporte de ECOSIRE.
- 1
Haces el pedido
Empieza con un precio único de desarrollo. Definimos el alcance contigo en el arranque.
- 2
Creamos e instalamos
ECOSIRE la crea, la configura y la instala en tu Odoo.
- 3
En marcha + soporte
Sales en vivo en aproximadamente una semana laboral, con dos semanas de soporte tras la puesta en marcha. Los defectos en el código que entregamos se corrigen sin coste.
Especificaciones técnicas
- Compatibilidad con Odoo
- Odoo 17, Odoo 18, Odoo 19
- Ediciones
- Enterprise y Community
- Licencia
- La licencia requiere confirmación
- Requisito de Python
- Python 3.10+
- Base de datos
- PostgreSQL 12+
Sobre este producto
Every Odoo team hits the same awkward moment: you need to run a database migration, deploy a risky change, reconcile inventory, or cut over to a new fiscal year — and users keep transacting against a system that is mid-surgery. Odoo core has no first-class "close the shop for thirty minutes" switch. The nearest options are all blunt: take the server process down (which returns raw HTTP errors and looks like a real outage), unpublish the website (which does nothing for the backend, the portal, or the /web login), or drop an Nginx maintenance page in front (which locks out your own admins along with everyone else and can't be toggled from inside Odoo). The result is either data written during an unsafe window, or a self-inflicted outage with no branding, no messaging, and no controlled way back in for the person actually doing the work.
Maintenance Mode is a build-to-order Odoo module that gives you a real, application-level maintenance switch scoped to exactly what you choose: the public website, the backend /web client, the customer portal, or all of them. Technically it is implemented as a small config model (an res.config.settings extension plus a dedicated maintenance.window model built on models.Model) that a request-level hook consults on every inbound request. When the mode is active, an override of ir.http._dispatch (the pre-handler in 17.0/18.0/19.0) intercepts the request and serves a branded QWeb template with an HTTP 503 Service Unavailable status and a correct Retry-After header, so search crawlers back off cleanly instead of de-indexing your pages. Nothing reaches the controllers or the ORM write path while the gate is closed.
The behaviour is designed for the people who run the deploy, not just the people locked out by it. An allowlist — driven by ir.model.access.csv plus record rules on the window model — lets nominated users, specific groups, or requests carrying a secret bypass token or an IP on an allowlist continue to log in and work normally while everyone else sees the holding page. That means your admin, your integrator, and your QA tester can verify the release on the live database before you re-open the doors. You get a compute field showing current state, an activation reason and ETA that render into the holding-page copy, optional scheduled windows (start/stop timestamps enforced by an ir.cron automated action so a window opens and closes itself overnight), and an audit trail of who toggled the mode and when. XML-RPC/JSON-RPC traffic can be independently gated or exempted, so a scheduled integration doesn't hammer a closed instance — or, if you prefer, keeps syncing while human traffic is held.
Because this is built to order, we start from your actual topology — single company or multi-company, Community or Enterprise, self-hosted or Odoo.sh, behind Cloudflare/Nginx or not — and tailor the scope: which surfaces are gated, what the bypass mechanism is, how the holding page is branded and localized, and whether windows are manual, scheduled, or triggered by your deploy pipeline over the RPC API. You review the working module on a staging copy of your database during UAT, we hand over the source and the git repository, and only then do we deploy to production with a rollback plan in hand.
Delivery is typically one working week from confirmed scope, depending on how many surfaces and integrations are in play. Pricing starts from $999 (indicative, single-company base scope); multi-company gating, per-website scoping, deploy-pipeline integration over XML-RPC/JSON-RPC, and bespoke branding/localization of the holding page increase the quoted scope. You get a firm fixed quote after a short scoping call — never a surprise.
lo que obtienes
- Installable, version-pinned source code for your Odoo edition (17.0, 18.0, or 19.0) with a clean `__manifest__.py` and dependency declarations
- On-instance installation and configuration on your production environment (self-hosted, Odoo.sh, or your managed host)
- Technical documentation: model/field reference, the `ir.http` dispatch override, security rules, and how the bypass mechanism is wired
- End-user and admin guide plus a live training session for the team who will trigger and lift maintenance windows
- UAT on a staging copy of your database with a documented sign-off checklist, plus a tested rollback plan before production deploy
- Post-go-live support window for defect fixes and configuration adjustments after launch
- Git repository handover with full commit history so you own and can extend the code
- Handover notes covering upgrade considerations across Odoo 17.0/18.0/19.0 and Community vs Enterprise differences
¿Para quién es esto?
Odoo Administrator / DevOps Lead
Runs deploys, migrations, and fiscal-year cutovers and needs a safe, application-level way to freeze user transactions for a controlled window without taking the server down or returning raw error pages. Wants a bypass so they can validate the release on production before re-opening.
Implementation Partner / Odoo Integrator
Delivers projects for multiple clients and needs a reliable maintenance gate that scopes to website, backend, and portal independently, keeps their own team's access open, and holds back scheduled RPC integrations during risky changes.
E-commerce Operations Manager
Runs an Odoo website/eCommerce storefront and wants planned maintenance windows with a branded, honestly-messaged holding page (reason + ETA) that protects SEO with a proper 503, instead of an ugly outage that hurts rankings and trust.
Multi-company Finance/ERP Owner
Operates several companies on one Odoo database and needs to gate a specific company or website for a period-close or data reconciliation while the rest of the group keeps trading, with an audit trail of who closed and re-opened the gate.
Cómo se compara Maintenance Mode for Odoo
| Criterio | ECOSIRE | Construcción personalizada | Competidor | Nativo de Odoo |
|---|---|---|---|---|
| Scope of the gate | Website, backend `/web`, and portal gated independently; per-website and multi-company aware | Whatever you build — usually starts narrow and grows over time | Often website-only; backend and portal left exposed | No real gate — unpublish website or stop the server process |
| Admin / integrator bypass | User/group allowlist plus secret token or IP allowlist, enforced via record rules | Possible but you design and secure it yourself | Sometimes a single hard-coded bypass; rarely group-based | None — a server shutdown locks everyone out equally |
| SEO-safe status codes | HTTP 503 with `Retry-After` so crawlers back off cleanly | Depends entirely on how carefully it's coded | Varies; many return a 200 holding page that risks de-indexing | Raw 5xx errors or an unpublished page — poor crawler signals |
| Scheduling | Start/stop windows auto-enforced by an `ir.cron` job | Add-on work you'd have to spec and build | Usually manual toggle only | None |
| Branding & messaging | Branded, localized QWeb page with activation reason and ETA | You build and translate the template yourself | Basic template, limited localization | Generic error page, no messaging |
| Audit trail | Records who toggled the mode and when; optional chatter log | Only if you build logging in | Rarely included | None |
| Fit to your environment | Built to your topology (Community/Enterprise, Odoo.sh, multi-company) with UAT and rollback | Fully bespoke but you own all the risk and effort | Generic; you adapt your process to the module | Whatever core happens to do |
| Ownership & support | Full source + git handover, training, post-go-live support window | You own it but also maintain it entirely alone | Vendor-controlled; support quality varies | Community support only |
Preguntas frecuentes sobre Maintenance Mode
How long does delivery take?
This is a build-to-order module, not an instant download. Typical delivery is one working week from confirmed scope, depending on how many surfaces (website, backend, portal) and integrations you need gated. After a short scoping call we agree the scope, build it, hand it to you for UAT on a staging copy of your database, then deploy to production with a rollback plan.
How does pricing and scoping work?
Pricing starts from $999 as an indicative from-price for a single-company base scope. The final number depends on drivers like multi-company gating, per-website scoping, deploy-pipeline integration over the RPC API, and how much bespoke branding/localization the holding page needs. You get a firm fixed quote after the scoping call — no open-ended hourly billing and no surprise fixed price before we understand your setup.
Does it work on Odoo Community or only Enterprise?
It works on both. The module is built on standard framework primitives — an `ir.http` dispatch override, a config model, `ir.model.access.csv`, record rules, QWeb, and `ir.cron` — that exist in Community and Enterprise alike. We target Odoo 17.0, 18.0, or 19.0 and confirm your exact edition and version during scoping so the delivered code is pinned to your environment.
Can our admins and integrators still get in while maintenance mode is on?
Yes — that's a core design point. An allowlist of users or groups, plus an optional secret bypass token or IP allowlist, lets nominated staff log in and work normally on the live database while everyone else sees the branded holding page. This is what lets you validate a release in production before you re-open to users.
Will putting the site into maintenance hurt our SEO?
No. The holding page is served with an HTTP `503 Service Unavailable` status and a `Retry-After` header — the correct signals that tell search crawlers the outage is temporary, so they back off and return later instead of de-indexing your pages. A plain server shutdown or a generic error page doesn't send those signals; this does.
What about support and updates after go-live?
Every build includes a post-go-live support window for defect fixes and configuration adjustments. Because you receive the full source and git repository, you can extend it yourself or ask us for changes. When you later upgrade Odoo (for example 18.0 to 19.0), we can quote a compatibility pass — the dispatch hooks and model APIs shift slightly between majors, so a version bump is a small scoped task rather than a rebuild.
Can it trigger automatically from our deploy pipeline?
Yes, if you want it. We can wire the mode to be flipped on and off over the JSON-RPC/XML-RPC API so your CI/CD closes the gate before a release and re-opens it after, and you can also use scheduled windows driven by `ir.cron` so a maintenance window opens and closes itself at set times without anyone logging in.
Módulos relacionados

Lost Messages Routing
A build-to-order Odoo module that catches incoming emails and messages Odoo could not match to a record, then routes them to the right partner, lead, ticket, or document. ECOSIRE designs, builds, installs, and supports it for your database.

Loyalty Points & Rewards Program
Build-to-order Odoo loyalty program: points by spend/product, reward catalog, tiers, expiry, and unified Website + POS wallet.

Manual Currency Exchange Rate
A build-to-order Odoo module that lets finance teams manually set the currency exchange rate directly on individual sales orders, purchase orders, and invoices — overriding the daily company rate per document when the deal was struck at a negotiated or contractual rate. ECOSIRE builds, installs, and supports it for your Odoo 17, 18, or 19 database.

Many2x Widget Options
A build-to-order Odoo module that gives you fine-grained control over the create, edit, and search options on many2one and many2many relational fields — configured per field, per view, without patching core. ECOSIRE scopes, builds, installs, and supports it for your database.
Maintenance Mode
A build-to-order Odoo module that puts your website and/or backend into a controlled maintenance mode during deploys, migrations, and cutovers — with an allowlisted admin bypass, a branded holding page, and scheduled windows. ECOSIRE builds, installs, and supports it for Odoo 17.0, 18.0, and 19.0.
- Application-level maintenance switch scoped independently to the public website, the backend `/web` client, and the customer portal — not an all-or-nothing server shutdown
- Request interception via an override of `ir.http._dispatch`, so gated requests never reach controllers or the ORM write path
- Serves a branded QWeb holding page with a correct HTTP `503 Service Unavailable` status and `Retry-After` header so search crawlers back off instead of de-indexing
- Admin/integrator bypass via an allowlist of users or `res.groups`, enforced through `ir.model.access.csv` and record rules on the `maintenance.window` model