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.confsettings
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
- Go to the clone's instance page.
- Attach a domain (see
04-domains-and-ssl.md). You'll need a different domain than the source — DNS can only point one place. - Test that everything works — sign into Odoo, click around, make sure your modules loaded.
- 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
Thank you!
