Your hosts, your margins
Stop paying a middle layer for every instance. Enroll Hetzner, GCP, DO, or bare metal and run density you choose.
Bring your fleet
odoobot ships a real migration pipeline for externally hosted Odoo — whether it lives on a hosting panel, a hand-rolled server, or a mix of both. Clone onto an enrolled host at a temporary hostname, validate, then cut over when you're ready. The source is never modified during the clone.
Why move
Stop paying a middle layer for every instance. Enroll Hetzner, GCP, DO, or bare metal and run density you choose.
Agents, drift, multi-tenant roles, Postgres clusters, and activity history — built for operators, not a single-box panel.
The same dump → provision → restore → surgery → adopt path becomes instance duplication for staging and QA later.
Pipeline
Runs on the target host. Each step is toggleable so you can resume after a failure — dumps and tars are cached when present.
pg_dump -Fc the source database over SSH into a staging path on the target host. Source stays online.
Tar the source filestore and extra-addons (enterprise, OCA, custom) so modules and attachments land intact.
POST to the control plane to build a fresh compose stack on the enrolled odoobot host — isolated user, container, proxy.
Restore the dump into the target Postgres, copy filestore in, fix ownership. PG version gaps are handled in the pipeline.
Set web.base.url, freeze it, disable mail servers and crons so the clone never emails customers or runs jobs.
Poll /web/login, then adopt the instance into odoobot so it appears in the console with credentials and Studio access.
What you need
INSTANCE_NAME='myinst'
SOURCE_SSH='user@source.example.com'
SOURCE_DB_HOST='10.0.0.5'
LB_SUFFIX='myhost.odoobot.net'
HTTP_PORT='8069'
API_TOKEN='<operator-jwt>'
AGENT_ID='<target-host-agent-id>'
# then on the target:
# migrate-instance.shSafety defaults
Read-only pull of DB, filestore, and addons. Cutover is a separate DNS decision.
ir_mail_server and ir_cron rows disabled so validation never emails clients.
Validate at <instance>.<host>.odoobot.net before pointing production domains.
Re-run with STEPS=restore,surgery,verify,register — cached artifacts are reused.
Migration access
Tell us how many instances you host and which clouds you run. We'll follow up with enrollment and migration options.
No spam. We'll reply with setup options for partners and operators.
Also exploring odoobot generally? Join the early access list.