Deploy your first instance¶
This guide walks you through deploying your first Odoo instance: picking a host, an Odoo version, the modules, and watching the deployment log in real time.
Prerequisites
- A project (create one).
- A host: either your own VPS or a Hetzner VPS.
1. Open the project and click Deploy instance¶
A side panel opens with the deployment form. The same form is reused later for re-deploys, so it's worth getting comfortable with each field.
2. Pick the environment¶
- Production — the customer-facing instance. Re-deploys go through the safe-rebuild flow: if the new image fails its boot test, the previous version keeps serving.
- Staging — test copy. You can have many. Re-deploys are direct.
3. Pick the host¶
Select one of your registered hosts. The platform checks capacity automatically and prevents over-provisioning. If your hosts are all full, hire a new one or connect another.
4. Pick an Odoo version¶
Versions 7.0 to 19.0 are supported. The version influences which modules are available and which Postgres major version we use.
If your project has a connected repo with .copier-answers.yml, we pre-fill the version
from there. You can still override.
5. Pick modules¶
Either:
- Pick from the catalog — the official Odoo modules for the chosen version, plus the OCA modules in our default repo set.
- Use your own — modules from your project's repo. The repo URL was set when you
created the project; you can override per-instance under
Settings → Repository.
Both modes can be mixed. Our deployer composes a Docker image with everything you selected.
6. Optional: custom domain¶
Add app.example.com (or any domain you control). The deployer requests a
Let's Encrypt certificate automatically and wires up HTTPS.
DNS must be in place
The domain's A or AAAA record must already point to the host's IP at the moment of deployment, otherwise Let's Encrypt will fail to validate. Set the DNS first.
If you skip the domain, we generate a subdomain <random>.incubacloud.host for testing.
7. Hit Deploy¶
A job starts. The job log opens automatically. You'll see the steps in order:
- Build image (1–3 min depending on dependencies).
- Boot test (production only) — clone the database to
__ic_boot_test, runclick-odoo-update, drop. If this fails, the deploy aborts before touching the live instance. - Update modules in the live database.
- Bring up the new container.
- Cleanup.
When the job ends in green, your instance is up.
Verify it worked¶
- The job shows
Donein green. - The instance card shows
Running. - Clicking
Opentakes you to the Odoo login. - If you set a custom domain, browsing to it shows the same Odoo with HTTPS.
What happens next¶
- Set up a backup backend so your data is safe.
- Add the rest of your team via
Settings → Users. - Read about environments if you'll use stagings.
Troubleshooting¶
Build failed: pip install error
Usually a Python dependency missing for the Odoo version you picked.
Check the build log; the failing line tells you which package. Add it
to your repo's requirements.txt and redeploy.
Boot test failed
A migration script in your custom modules raised an error. Check the boot test log section. Fix the migration, push, redeploy. Production stays untouched.
HTTPS certificate not issued
Re-check DNS resolution: dig +short app.example.com should return the
host's IP. Let's Encrypt has rate limits — retry after 1 hour if you
hit them.
Instance running but Odoo errors on login
Open Logs from the instance detail. Most first-time issues are missing
Postgres extensions or wrong Odoo version vs database version.