Skip to content

Migrate from Odoo.sh

Migrating from Odoo.sh to Sadeem SaaS typically takes under a day per instance. The approach: export from Odoo.sh, import as a Sadeem subscription, cut over DNS.


Pre-Migration Checklist

Do this before touching anything

  • Custom modules — modules not in the standard Odoo addons must be available in your Sadeem Docker image or installed on the DBFilter server. List every non-standard app from Settings → Apps on the source.
  • Odoo version — your Sadeem environment must match the Odoo.sh version exactly. Check Settings → About on the source. A version mismatch requires a full upgrade before or after migration.
  • External integrations — payment providers, outgoing mail servers, SMS gateways, and API keys will need to be reconfigured on the new instance. List them now.
  • Maintenance window — DNS cutover causes a brief interruption. Agree on a time with the customer before proceeding.
  • Filestore size — large filestores (>1 GB) should be migrated via URL download rather than browser upload to avoid timeout issues.

Step 1: Export the Database Backup from Odoo.sh

  1. Navigate to your project in the Odoo.sh dashboard
  2. Click Branches and select your production branch
  3. Click the Backups tab
  4. Click Create to generate a fresh backup, or use the most recent existing one
  5. Click Download — select the ZIP format
  6. Save the file locally

Note

Odoo.sh backup files are ZIP archives containing a PostgreSQL dump (dump.sql) and a filestore/ directory. This format is directly compatible with Sadeem's Restore Local wizard — no conversion needed.


Step 2: Create the Customer Record in Sadeem

  1. Navigate to Contacts → New (or search for an existing partner)
  2. Ensure the partner has a valid Email address — it is required for portal access and backup notifications
  3. Note the partner name — it will be used as the Customer on the subscription

Step 3: Choose Docker or DBFilter

Docker DBFilter
Isolation Full — each customer has its own container Shared — all customers use the same Odoo process
Custom modules Per-customer, included in the Docker image Same set for all customers on the server
Similarity to Odoo.sh High — closest model to Odoo.sh containers Lower — shared process, different behaviour
Best for Customers with unique addons or versions Uniform deployments at scale

For most Odoo.sh migrations, Docker is the natural choice. See Docker vs DBFilter for detailed guidance.


Step 4: Create the Subscription

  1. Navigate to SAAS Management → Subscriptions → New
  2. Set Customer to the partner created in Step 2
  3. Set Package to the appropriate plan
  4. Set SAAS Type to Docker or DBFilter
  5. For Docker: select a Docker Image that matches the Odoo.sh Odoo version
  6. Set a temporary domain (e.g. customer-new.sadeem.cloud) — do not use the customer's production domain yet
  7. Configure domain, Nginx, and Cloudflare settings as usual
  8. Click Confirm

Tip

Using a temporary domain during migration lets the customer's production domain keep pointing at the old Odoo.sh instance until you are ready to cut over.


Step 5: Build the Subscription

Click Build on the subscription form. Sadeem provisions:

  1. Cloudflare A record (if auto-create is enabled)
  2. Nginx proxy host with SSL
  3. Customer Odoo instance (Docker stack or DBFilter database)

Wait for the subscription to reach Running state. The clean database is just a placeholder — you will replace it in the next step.


Step 6: Restore the Backup

  1. On the subscription form, ensure SaaS Slave (a feature that gives the customer instance self-service control over module installation and management) is enabled
  2. Go to the Backup tab
  3. Click Restore Local
  4. In the wizard, choose an input method:
  5. File — upload the ZIP directly from your computer. Use this for backups under ~1 GB.
  6. URL — paste a direct download link. Sadeem downloads the file server-side. Use this for large backups to avoid browser upload timeouts.
  7. Click Confirm Restore

Sadeem uploads the file, drops the placeholder database, and restores the backup. The database name is handled automatically.

Note

Restore Local is only visible when SAAS Slave is enabled on the subscription. If you do not see the button, enable SAAS Slave on the subscription form first.

Option B — Database Template (for bulk migrations)

If you are migrating multiple customers who share the same base database:

  1. Navigate to SAAS Management → Subscriptions → Database Templates → New
  2. Upload the ZIP file or provide a server-side file path
  3. On each subscription form, set Database Template before building
  4. When Sadeem builds the subscription, it restores the template instead of creating a blank database

Tip

Option B (Database Template) is more efficient for bulk migrations — create one template and reuse it across many subscriptions.


Step 7: Verify the Restored Instance

Before switching DNS, open the instance on its temporary domain and check:

  1. Log in with the customer's existing credentials
  2. Verify data integrity — customers, products, transactions, settings
  3. Confirm all installed modules match the source
  4. Check that file attachments open correctly (filestore restored successfully)
  5. Reconfigure the outgoing mail server under Settings → Technical → Email → Outgoing Mail Servers
  6. Reconfigure payment providers, SMS gateways, and any external API credentials
  7. Test all custom modules

Step 8: Cut Over DNS

Once the instance is verified:

  1. Update the DNS record to point to your Sadeem server:
  2. Cloudflare auto-create: update the Domain field on the subscription to the customer's real domain — Sadeem updates the Cloudflare A record and Nginx proxy host automatically
  3. Manual / wildcard DNS: update the A record in Cloudflare or your registrar directly to your server's IP
  4. Verify propagation:
    dig A yourdomain.com @1.1.1.1
    
  5. Wait for DNS propagation — typically 1–2 minutes with Cloudflare, up to 48 hours for other registrars
  6. Confirm the domain resolves to the Sadeem instance and SSL is active

Step 9: Decommission the Old Environment

Once the customer is running on Sadeem:

  1. Keep the old Odoo.sh branch suspended (not deleted) for a few days as a fallback
  2. Export a final archive backup from Odoo.sh for your records
  3. Delete or archive the old branch once the customer confirms everything is working

Common Gotchas

Warning

Filestore paths: Odoo stores attachments under filestore/<database_name>/. If the database name changes after restore (e.g., from company-name to customer.domain.com), attachments may return 404 errors. Ensure the database name is consistent, or run Odoo's filestore migration script.

Custom modules: Any module installed on the source but not present in the Docker image will cause startup errors. Add missing modules to the image before building, or install them via Manage Modules after restore.

Mail server: Odoo.sh provides a managed SMTP. After migration this is gone — the instance will fail to send email until you configure an outgoing mail server under Settings → Technical → Email → Outgoing Mail Servers.

IP allowlists: If the source database has IP-based restrictions (e.g., payment provider dashboards limited to Odoo.sh's IP range), update those allowlists to your Sadeem server's IP.

Session cookies: Existing customer browser sessions will be invalidated after the database restore. Customers will need to log in again.