Documentation / Moving to calmo.cloud
Migrating from another host
Move a self-hosted or third-party-hosted Odoo to calmo.cloud: export a backup, connect your addons, set up server and service, restore, switch the domain.
This guide covers every Odoo that is not on Odoo.sh or Odoo Online: a server you run yourself, a managed hosting provider, or a Docker setup somewhere. The move is always the same shape: a backup out, a backup in, addons deployed from Git, and a domain change.
For the two Odoo-run platforms there are dedicated guides: Odoo.sh and Odoo Online.
Before you start #
Make sure you have:
- A way to export a backup from the current host (see step 1)
- Your custom addons in a GitHub repository, or the time to put them there
- S3-compatible storage (e.g. AWS S3, Backblaze B2, MinIO) for a backup destination
- A server to migrate to, or a cloud provider connected so calmo.cloud can order one
- An SSH key registered with your team, so you can push the backup archive to the server
calmo.cloud runs Odoo Enterprise 18.0, 19.0 and 20.0. A Community database or an older version has to be upgraded first, for example with Odoo's upgrade service, and the upgraded database is what you migrate. A backup can only be restored into a service running the same Odoo version.
Step 1: Export a backup #
calmo.cloud imports the standard Odoo backup archive: a .zip containing dump.sql, the filestore/ folder and a manifest.json. Two ways to get one:
- Database manager — open
https://your-odoo.example/web/database/manager, choose Backup, enter the master password and pick the zip (includes filestore) format. Many hosts disable the database manager in production; if yours does, use the next option. - Odoo's own dump — on the current server, run Odoo's
db dumpfor your database, or ask your host for a backup that includes the filestore. A plainpg_dumpis not enough, because the filestore lives outside the database.
Take the backup right before the switch, and ask your users to stop working in the old Odoo between the export and the go-live.
Step 2: Connect your addon repository #
calmo.cloud deploys custom addons from GitHub. Follow Addon Repositories to install the calmo.cloud GitHub App and add the repository. By default calmo.cloud looks for a branch named after the Odoo version (18.0); if your branches are named differently, set the branch in the Branch names per Odoo version section of the repository.
If your addons are not in Git yet, this is the moment: create a repository, commit the addon folders, push. Third-party addons from the Odoo app store or the OCA go into a repository as well, each OCA repository as its own connection.
Step 3: Set up your backup storage #
Under Infrastructure Settings → Backup Destinations, create a destination pointing at your S3-compatible storage. See Multiple Backup Destinations.
The import in step 6 stores the archive at the service's backup destination. Without one configured, you cannot import your backup.
Step 4: Add a server and create the Odoo service #
- Add a server: register it under Servers, check reachability, install Docker, and enable Postgres and Traefik. The server should be a fresh Ubuntu machine; do not reuse the server your old Odoo still runs on.
- Create the Odoo service: under Projects → Odoos, create a new Odoo on that server, in the version of your database.
- In the service's Backup Settings, add the backup destination from step 3 and mark it as Primary.
A provisioning template does all of this in one click.
Step 5: Deploy your addons #
A restored database expects every module it has installed to be present on the service. Open the service's Addons tab and deploy all custom addons your database uses before you restore. Python dependencies your addons declare in their manifest are installed with them.
Step 6: Import and restore the backup #
Push the archive from step 1 to your new server and import it. Importing Backups describes the full flow:
- Copy the archive to the server, e.g.
scp backup.zip root@203.0.113.10:/tmp/import_backup.zip. The Import Backup dialog shows this command prefilled for your server. - On the service, open the Backups tab and click Import Backup.
- Enter the path and choose Restore into this service after import. The freshly created service holds no data yet, so you can enable skip safety backup.
calmo.cloud stops the service, replaces the database and filestore with your data, starts the service again and stores the archive at your backup destination. web.base.url is set to the service's URL automatically. To script the migration, use the API, which offers the same flow.
Step 7: Verify and go live #
- Log in via the service's platform domain with your existing Odoo users.
- Open Settings → Apps and verify your custom modules are active and up to date.
- Check settings that referred to the old server: outgoing and incoming mail servers, scheduled actions that call external systems, integrations with a fixed IP address.
- Add your custom domain and update its DNS record. calmo.cloud issues the SSL certificate automatically.
- Set up an automatic backup schedule so the new instance is backed up from the start.
Keep the old Odoo running, but stopped for users, until the migrated instance has run without problems for a few days. Then take a final backup of the old host and switch it off.