Instances
Create and manage Odoo instances with full lifecycle control, module management, and terminal access.
An instance is a running Odoo application deployed as a Docker container on one of your managed servers. oCore supports Odoo versions 14.0 through 19.0 in Community (CE), Enterprise (EE), and OCA (OCB) editions. This page covers the entire instance lifecycle: creation, management, module installation, file editing, terminal access, and deletion.
Instance Management
View and manage all your Odoo instances.
Creating an Instance
Navigate to Instances in the sidebar and click Create Instance.
Fill in the instance details:
| Field | Required | Description |
|---|---|---|
| Name | Yes | Display name (max 100 characters) |
| Slug | Yes | URL-safe identifier (2-50 chars, lowercase alphanumeric + hyphens) |
| Server | Yes | Target server to deploy on |
| Odoo Version | Yes | One of: 14.0, 15.0, 16.0, 17.0, 18.0, 19.0 |
| Odoo Edition | No | ce (Community), ee (Enterprise), or ocb (OCA) -- defaults to ce |
| Template | No | Create from an existing instance template |
| Addons Path | No | Custom addons directory path |
| Environment Vars | No | Key-value pairs for instance configuration |
Optionally link to a project by specifying:
- Project ID -- An existing project
- Branch -- Git branch to track
- Environment Type --
production,staging, ordevelopment
Click Create. oCore enqueues a provisioning job that pulls the Odoo Docker image, creates the container, allocates ports, and starts the instance.
curl -X POST https://ocore.example.com/api/instances \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "My Odoo 18",
"slug": "my-odoo-18",
"serverId": "SERVER_UUID",
"odooVersion": "18.0",
"odooEdition": "ce",
"envVars": {
"WORKERS": "4"
}
}'ocore instance create \
--name "My Odoo 18" \
--slug my-odoo-18 \
--server SERVER_UUID \
--version 18.0 \
--edition cePort Allocation
oCore automatically allocates ports for each instance:
| Port | Purpose |
|---|---|
| HTTP Port | Main Odoo web interface (base port) |
| Longpolling Port | Real-time bus for live chat, notifications (base + 1) |
Ports are allocated starting from a base of 10000 with a gap of 10 between instances. You can view the assigned ports on the instance detail page.
Auto-Subdomain
Each instance gets an automatically generated subdomain based on its slug (e.g., my-odoo-18.ocore.example.com) for quick access without custom domain configuration.
Instance Lifecycle
Control your instance state from the dashboard or API using lifecycle actions.
Available Actions
| Action | Description |
|---|---|
| Start | Start a stopped instance container |
| Stop | Gracefully stop the running container |
| Restart | Stop and start the container (useful after config changes) |
curl -X POST https://ocore.example.com/api/instances/{instanceId}/control \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"action": "restart"}'ocore instance restart <instance-id>Instance Statuses
| Status | Description |
|---|---|
pending | Created, provisioning not started |
provisioning | Container being set up |
running | Active and serving requests |
stopped | Container stopped |
error | Provisioning or runtime error |
removing | Deletion in progress |
The instance detail page shows the restart count and last restart timestamp for operational awareness.
Accessing the Instance
Once running, access your Odoo instance through:
- Web URL -- The auto-generated subdomain or a custom domain attached to the instance
- Admin Password -- The default Odoo admin password (set during creation or via environment variables)
- SSH Gateway -- Connect directly via
ssh -p 2222 slug@ocore.example.com(see SSH Access)
Instance Settings
Update instance configuration from the settings tab:
| Setting | Description |
|---|---|
| Name | Display name (max 100 chars) |
| Addons Path | Custom addons directory path |
| Environment Variables | Key-value pairs injected into the container |
| Workers | Number of Odoo worker processes |
| Active Color | Blue-green deployment color indicator |
curl -X PUT https://ocore.example.com/api/instances/{instanceId} \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "My Odoo 18 Production",
"envVars": {"WORKERS": "6", "LIMIT_MEMORY_HARD": "2684354560"}
}'ocore instance update <instance-id> --name "My Odoo 18 Production"Module Management
oCore provides built-in module management for installing, updating, and browsing Odoo modules directly from the dashboard.
Installing Modules
Browse the available modules list (sourced from the instance's addons path) and install them with a single click or via the API. The module installation runs inside the Odoo container and reports progress in real time.
Updating Modules
Trigger module updates after deploying new code. oCore runs odoo -u <module> inside the container and streams the output.
File Editor
The built-in file editor lets you browse and edit files inside the running instance container without SSH access.
Features
- File tree browser -- Navigate the instance filesystem
- Syntax-highlighted editor -- Edit Python, XML, CSV, and configuration files
- Save and apply -- Changes are written directly to the container volume
File Editor
Browse and edit files inside your Odoo instance.
Production Editing
Direct file edits bypass version control. For production instances, use the deployment pipeline instead. The file editor is best suited for development and debugging.
Web Terminal and Odoo Shell
Web Terminal
The web terminal provides a browser-based shell session inside the instance container. Use it for:
- Running Odoo commands (
odoo scaffold,odoo shell) - Checking logs (
tail -f /var/log/odoo/odoo.log) - Debugging issues interactively
Odoo Shell
The dedicated Odoo shell gives you a Python REPL connected to the running Odoo instance database. Use it for:
- Querying records:
env['res.partner'].search_count([]) - Running one-off scripts
- Debugging data issues
Web Terminal
Open a terminal session inside your Odoo instance.
Domains
Attach custom domains to your instance for production access. See the Domains and DNS page for detailed instructions.
Each instance can have multiple domains with one marked as primary. oCore manages SSL certificates automatically.
Deleting an Instance
Deleting an instance removes the Docker container and its associated data from the server.
curl -X DELETE https://ocore.example.com/api/instances/{instanceId} \
-H "Authorization: Bearer $TOKEN"ocore instance delete <instance-id>The instance status changes to removing and a background job handles cleanup. The API returns 202 Accepted.
Required Permissions
Instance management requires the manage:instances permission. Users with Owner, Admin, or a custom role with this permission can create, update, control, and delete instances.
Troubleshooting
Instance stuck in "provisioning"
- Check that the target server is in
activestatus - Review the provisioning logs on the server detail page
- Verify Docker is running on the server:
docker ps - Check for port conflicts on the server
Instance shows "error" after creation
- View the instance logs for specific error messages
- Common causes: Docker image pull failure (network issue), insufficient disk space, port already in use
- Try deleting and recreating the instance
Cannot access the Odoo web interface
- Verify the instance is in
runningstatus - Check that the server's firewall allows traffic on the assigned HTTP port
- If using a custom domain, verify DNS resolution (see Domains and DNS)
- Check the reverse proxy configuration on the server
Module installation hangs
- Open the web terminal and check for Odoo process locks
- Restart the instance and retry the module installation
- Check the Odoo log for dependency errors
wkhtmltopdf issues
- The instance detail shows
wkhtmltopdfStatusandwkhtmltopdfVersion - If wkhtmltopdf is not installed, PDF report generation will fail
- oCore installs wkhtmltopdf during provisioning; if missing, check provisioning logs