Articles on: Odoo

Cloning an Instance

Cloning an Instance


Cloning makes an exact copy of an existing Odoo instance — same database, same filestore, same custom modules — under a new name. Useful for:


  • Standing up a staging instance from production to test changes safely
  • Making a point-in-time backup before a risky change
  • Forking a working instance for a different customer


Two clone modes


Mode

What it does

When to use

Pause source briefly (default)

Stops the source Odoo + database for ~10–15 s, copies the data volumes byte-for-byte, restarts the source. Identical-byte fidelity.

The right choice for almost all clones. Brief downtime is a fair trade for a guaranteed-working copy.

Keep source online

Source stays up the whole time. The database files are copied while postgres is actively writing to them, so the clone may refuse to start. Requires a "yes I understand the risk" checkbox before submission.

Only when you can't afford even ~15 s of downtime AND the source is mostly idle. Test the clone before relying on it — it might be unbootable or subtly corrupted.


Heads-up: both modes copy the source verbatim. The clone shares the same scheduled actions, mail servers, OAuth providers and payment credentials as the source — so if the clone runs against the live internet it can email real customers or charge real cards. Either point the clone at a sandboxed environment, or disable cron/mail/payments by hand inside Odoo before opening it up.


How to clone


From the source instance's page → Actions card → click Clone This Instance.


You'll see a small form:




New instance name


Same naming rules as the original Create Instance form — 3–30 chars, lowercase + digits + dashes, must not already exist.


Pick something memorable: production-clone-2026-05, staging, etc.


Mode


Pick Production or Staging based on the table above.


Click Start Clone


The panel kicks off a background job and redirects you to a progress page that auto-refreshes every 3 seconds.



What you'll see


The progress log shows step-by-step what's happening:


[12:34:56] clone start: production -> staging (mode=pause)
[12:34:56] 1/7 pre-flight checks
[12:34:57] 2/7 snapshotting source data (mode=pause)
[12:34:57] pausing source Odoo production
[12:35:03] pausing source DB production-db
[12:35:09] tar source volume db-data
[12:35:14] tar source volume odoo-web-data
[12:35:18] restarting source DB production-db
[12:35:18] restarting source Odoo production
[12:35:21] 3/7 register+update+deploy target DB (staging-db) at scale 0
[12:35:30] 4/7 register+update+deploy target Odoo (staging) at scale 0
...
[12:36:14] DONE


When it reaches DONE, you're auto-redirected to the new instance's management page.


Total time: typically 30–90 seconds depending on filestore size.


What gets copied vs not


Copied:

  • Postgres database (every row)
  • Filestore (every file)
  • Custom modules in addons/
  • odoo.conf settings


Fresh on the clone:

  • A new SFTP password (different from the source's)
  • A new SFTP port (different from the source's)
  • Empty domain list — you have to attach domains separately


The clone has its own containers and own volumes. It's a fully independent instance — changes you make on the clone don't affect the source.


After the clone


  1. Go to the clone's instance page.
  2. Attach a domain (see 04-domains-and-ssl.md). You'll need a different domain than the source — DNS can only point one place.
  3. Test that everything works — sign into Odoo, click around, make sure your modules loaded.
  4. If you're using the clone as a sandbox, disable side-effecting features by hand before anyone uses it:
  • Cron jobs (Settings → Technical → Scheduled Actions)
  • Outgoing mail servers (Settings → Technical → Outgoing Mail Servers)
  • Payment providers (set to test mode, or disable)
  • Any OAuth providers you don't want the clone authenticating against


Failed clone — what happens


If the clone fails partway through, the panel auto-cleans up:


  • The partial target instance gets deleted
  • The source is restored to its previous running state (if pause-mode stopped it — DB first, then Odoo)
  • You see "failed" on the progress page with the log details
  • You can retry safely under the same target name


If you need help interpreting a failure, share the clone ID (visible on the progress page) with support — they can look up the full server-side log.


Pause-mode clones cause brief downtime


In pause mode, the source Odoo and database briefly stop (about 10–15 seconds) for an atomic snapshot. The DB is shut down cleanly during this window so postgres has flushed everything to disk before we copy.


If you can't afford even that downtime, switch to "Keep source online" and tick the acknowledgment. The clone will copy postgres's data files while they're actively being written to — it'll usually still boot if the source is idle, and it usually won't if the source is busy. Always test an online clone before using it for anything important.


Updated on: 13/05/2026

Was this article helpful?

Share your feedback

Cancel

Thank you!