Odoo hosting platform · CLI + Cloud

From zero to Odoo
in one click

Deploy and manage Odoo from our cloud dashboard, or run it locally with the open-source CLI. For businesses, agencies, and developers.

dashboard.dooservice.sh
5Instances
3Running
2Stopped
2Agents
production running
production.dooservice.sh · Odoo 17.0
staging running
staging.dooservice.sh · Odoo 17.0
dev-test stopped
dev-test.dooservice.sh · Odoo 18.0

Everything you need, in your browser

Manage your entire Odoo infrastructure from a modern web dashboard. Real-time updates, visual controls, team collaboration.

Visual Instance Management

Create, start, stop, restart, and delete Odoo instances from a clean UI. Real-time status updates via WebSocket. No commands to memorize.

WebSocketReal-timeOne-click

Real-time Logs

Stream container logs live in a terminal-style viewer. Configurable tail (100-1000 lines). Auto-scroll and auto-refresh every 5 seconds.

Live StreamTerminal UIAuto-refresh

Addon Manager

Install GitHub addons with branch selection. Track commits, one-click update or remove. Visual addon status with install progress.

GitHubCommitsOne-click

Backup & Restore

Full, database-only, or filestore-only backups. One-click restore with confirmation. Visual backup history with size, type, and status.

FullDatabaseFilestore

Cluster Monitoring

See all agents, instance health, and resource stats at a glance. Dashboard overview with running/stopped counts and agent status.

AgentsHealthStats

Multi-user & Auth

Email/password + OAuth (GitHub, Google). Role-based access control. Each user manages their own instances. PocketBase backend.

OAuthRolesPocketBase

Focus on your business, not infrastructure

We handle the servers, updates, backups, and SSL. You just manage your Odoo instances from a beautiful dashboard.

Starter

For individuals and small teams getting started.

$28/mo
  • Up to 2 instances
  • 5 GB storage per instance
  • Daily backups
  • SSL included
  • Community support
Get Started

Enterprise

For large organizations that need dedicated resources.

$240/mo
  • Up to 20 instances
  • 100 GB storage per instance
  • Automated backups
  • Custom domains + SSL
  • SLA guarantee
  • 24/7 support
Get Started

For developers & local environments

Run Odoo instances on your own machine for development, testing, and CI/CD. Free, open-source, and fully featured.

Install Specific version
$ curl -fsSL https://dooservice.sh/install.sh | sudo bash
$ DOOSERVICE_VERSION=v0.1.0 curl -fsSL https://dooservice.sh/install.sh | sudo bash

Local Development

Spin up Odoo instances locally in seconds. Test multiple versions, switch between projects, isolate environments.

Addons & CI/CD

Install custom modules from GitHub, pin to versions, auto-deploy with GitHub Actions. Built for dev workflows.

Backups, Proxy & DB

Backup and restore, reverse proxy with SSL, database management, health checks. Everything from your terminal.

Quick Examples
# Spin up a local Odoo 17.0 instance
$ dooservice instance create -n my-project -V 17.0
$ dooservice instance start my-project
 
# Add your custom module
$ dooservice addon add my-project -u https://github.com/user/my-module -b 17.0
 
# Clone for testing, backup before changes
$ dooservice instance clone -s my-project -n test-env --with-data
$ dooservice backup create my-project -d "Before migration"
View full CLI reference

Documentation

Everything you need to set up and use DooService.

Architecture

DooService uses a distributed architecture with three components that communicate in real-time.

Dashboard Web interface
Orchestrator Central hub
Agent Server node

What's included

Everything you get with the DooService Dashboard platform.

Instances Create, start, stop, restart, and delete Odoo instances. View details, configuration, and custom domain. Real-time status updates.
Addons Install custom modules from GitHub. Select branch, track commits, update or remove with one click.
Backups Full, database-only, or filestore-only backups. One-click restore. Visual history with size and status.
Logs Live log streaming in a terminal-style viewer. Auto-scroll, configurable tail, auto-refresh.
Monitoring Dashboard overview with instance counts, running/stopped stats, and server health at a glance.
SSL & DNS Automatic HTTPS with Let's Encrypt. Custom domains with wildcard SSL. DNS managed for you.
Auth Sign up with email or OAuth (GitHub, Google). Each user manages their own instances securely.

Why DooService?

Zero server management

No SSH, no Docker, no Linux knowledge needed. We handle everything.

Instant deployment

Create a new Odoo instance in seconds. Pick a version, name it, done.

Automatic backups

Your data is safe. Scheduled backups with one-click restore.

Scale as you grow

Start small, upgrade anytime. From 3 instances to unlimited.

Global Options

These flags apply to all commands.

--db-path <PATH>Path to the database file (env: DOOSERVICE_DB_PATH)
--instances-dir <PATH>Path to instances directory. Default: ~/.dooservice (env: DOOSERVICE_INSTANCES_DIR)
--docker-socket <PATH>Path to Docker socket (env: DOCKER_HOST)
-v, --verboseIncrease verbosity: -v (info), -vv (debug), -vvv (trace)
-q, --quietSuppress all output
-o, --output <FORMAT>Output format: table (default) or json

Create, manage, and monitor Odoo instances. Each instance runs in an isolated Docker container with a shared PostgreSQL server (per-instance database and user isolation).

instance create

Create a new Odoo instance. Uses a shared PostgreSQL server with per-instance database isolation.

dooservice instance create -n <NAME> [OPTIONS]
-n, --name <NAME>Required. Unique instance name
-V, --version <VERSION>Odoo version. Default: 17.0
-p, --port <PORT>HTTP port. Default: 8069
--db-host <HOST>Database host (if omitted, uses shared PostgreSQL)
--db-port <PORT>Database port. Default: 5432
--db-user <USER>Database user. Default: odoo
--db-password <PASS>Database password. Default: odoo
--no-postgresDon't provision in shared PostgreSQL
--no-proxyDon't expose via reverse proxy (access directly via port)
--subdomain <SUB>Custom subdomain. Default: instance name
--user <USER>Container user (e.g., odoo, root, 1000:1000). Default: odoo
--timezone <TZ>Timezone. Default: America/Lima
--language <LANG>Default language. Default: es_PE
--profile <PROFILE>Resource profile (starter, professional, enterprise)
--memory <MB>Memory limit in MB (overrides profile)
--cpu <CORES>CPU cores (e.g., 1.5, overrides profile)
--workers <N>Number of web workers (calculated from CPU if not specified)
--disk <MB>Disk quota in MB
--pg-memory <MB>PostgreSQL memory in MB (default: half of Odoo memory)
--pg-cpu <CORES>PostgreSQL CPU cores (default: half of Odoo CPU)
--no-db-initSkip automatic database initialization
# Basic instance
$ dooservice instance create -n my-odoo -V 17.0
 
# Production with resource profile
$ dooservice instance create -n production -V 17.0 --profile professional --subdomain erp
 
# Custom resources
$ dooservice instance create -n heavy -V 17.0 --memory 4096 --cpu 4 --workers 8

instance list

List all instances with their status.

dooservice instance list [OPTIONS]
-s, --state <STATE>Filter by state: created, running, stopped, failed
$ dooservice instance list
$ dooservice instance list -s running
$ dooservice instance list -o json

instance show

Show detailed information about an instance.

dooservice instance show <INSTANCE>
$ dooservice instance show my-odoo
$ dooservice instance show my-odoo -o json

instance start / stop / restart

Control the instance lifecycle.

dooservice instance start|stop|restart <INSTANCE>
-f, --force(stop only) Force stop without graceful shutdown
$ dooservice instance start my-odoo
$ dooservice instance stop my-odoo
$ dooservice instance restart my-odoo
$ dooservice instance stop my-odoo --force

instance delete

Delete an instance and optionally its volumes.

dooservice instance delete <INSTANCE> [OPTIONS]
--volumesAlso remove associated Docker volumes
-y, --yesSkip confirmation prompt
$ dooservice instance delete my-odoo
$ dooservice instance delete my-odoo --volumes -y

instance logs

View Odoo container logs.

dooservice instance logs <INSTANCE> [OPTIONS]
-n, --tail <COUNT>Number of lines. Default: 100
$ dooservice instance logs my-odoo
$ dooservice instance logs my-odoo -n 500

instance exec

Execute a command inside the Odoo container.

dooservice instance exec <INSTANCE> -- <COMMAND>
$ dooservice instance exec my-odoo -- ls /mnt/extra-addons
$ dooservice instance exec my-odoo -- odoo scaffold my_module /mnt/extra-addons

instance shell

Open an interactive shell in the Odoo container.

dooservice instance shell <INSTANCE>

instance update

Update instance configuration (instance must be stopped first).

dooservice instance update <INSTANCE> [OPTIONS]
--http-port <PORT>New HTTP port
--db-host <HOST>New database host
--db-port <PORT>New database port
--db-user <USER>New database user
--db-password <PASS>New database password
--db-name <NAME>New database name
--timezone <TZ>New timezone
--postgres-version <VER>New PostgreSQL version (manual migration required)
$ dooservice instance stop my-odoo
$ dooservice instance update my-odoo --http-port 8070 --timezone UTC
$ dooservice instance start my-odoo

instance stats

Show container resource statistics (CPU, memory, network I/O, storage quota).

dooservice instance stats <INSTANCE>

instance storage

Manage the storage quota for an instance.

dooservice instance storage <INSTANCE> [OPTIONS]
--increaseIncrease quota by 1 GB
--set <MB>Set quota to a specific value in MB
# View current storage usage
$ dooservice instance storage my-odoo
 
# Increase by 1 GB
$ dooservice instance storage my-odoo --increase
 
# Set to 10 GB
$ dooservice instance storage my-odoo --set 10240

instance clone

Clone an existing instance with its configuration and optionally data.

dooservice instance clone -s <SOURCE> -n <NAME> [OPTIONS]
-s, --source <SOURCE>Required. Source instance name or ID
-n, --name <NAME>Required. Name for the new instance
--with-dataClone with data (backup + restore)
--no-addonsDon't clone addons
# Clone structure only
$ dooservice instance clone -s production -n staging
 
# Clone with data and addons
$ dooservice instance clone -s production -n staging --with-data

instance update-resources

Update resource limits for an instance.

dooservice instance update-resources <INSTANCE> [OPTIONS]
--profile <PROFILE>New resource profile
--memory <MB>New memory limit for Odoo
--cpu <CORES>New CPU cores for Odoo
--workers <N>New worker count
--disk <MB>New disk quota in MB
--pg-memory <MB>PostgreSQL memory in MB
--pg-cpu <CORES>PostgreSQL CPU cores
--restartRestart immediately to apply changes
$ dooservice instance update-resources my-odoo --memory 4096 --cpu 4 --restart
$ dooservice instance update-resources my-odoo --profile enterprise --restart

Manage Odoo addons from GitHub repositories. Auto-detects repository type and modules. Supports pinning, CI/CD, and multi-instance deploys.

addon add

Add a GitHub addon to an instance. Clones the repository and configures the Odoo addons path.

dooservice addon add <INSTANCE> -u <URL> [OPTIONS]
-u, --url <URL>Required. GitHub repository URL (HTTPS or SSH)
-b, --branch <BRANCH>Branch to use. Default: main
$ dooservice addon add my-odoo -u https://github.com/OCA/web -b 17.0
$ dooservice addon add my-odoo -u git@github.com:user/custom-addon.git -b main

addon list

List all addons, optionally filtered by instance.

dooservice addon list [-i <INSTANCE>]

addon show

Show detailed information about an addon (modules, commit, state).

dooservice addon show <ADDON_ID>

addon update

Pull latest changes for one or all addons.

dooservice addon update <TARGET> [OPTIONS]
TARGETAddon ID, or all to update all addons for an instance
-i, --instance <INSTANCE>Required when target is all
$ dooservice addon update <addon-id>
$ dooservice addon update all -i my-odoo

addon remove

Remove an addon from an instance.

dooservice addon remove <ADDON_ID> -i <INSTANCE>

addon delete

Delete an addon completely.

dooservice addon delete <ADDON_ID> [-y]

addon pin / unpin

Pin an addon to a specific tag or commit, or unpin to follow branch HEAD.

dooservice addon pin <ADDON_ID> --tag <TAG> | --commit <HASH>
$ dooservice addon pin <addon-id> --tag v2.1.0
$ dooservice addon pin <addon-id> --commit a1b2c3d
$ dooservice addon unpin <addon-id>

addon cleanup

Clean up orphan addons (failed or removed state).

dooservice addon cleanup [-y]

addon deploy

Pull latest changes and restart all instances that use the addon. Designed for CI/CD pipelines.

dooservice addon deploy <ADDON> -b <BRANCH>
ADDONAddon name or ID
-b, --branch <BRANCH>Required. Branch (e.g., 19.0, 19.0-dev)
$ dooservice addon deploy my-addon -b 17.0

addon setup-ci

Set up GitHub Actions CI/CD. Generates an SSH deploy key, pushes a workflow file to the repo, and prints the secrets to configure.

dooservice addon setup-ci <ADDON> -b <BRANCH> [-s <SERVER>]
ADDONAddon name or ID
-b, --branch <BRANCH>Required. Branch
-s, --server <SERVER>Server label. Default: system hostname
# Auto-configure CI/CD for production server
$ dooservice addon setup-ci my-addon -b 17.0 -s production
 
# Then configure these GitHub Secrets:
# PRODUCTION_HOST = your-server-ip
# PRODUCTION_USER = root
# PRODUCTION_KEY = (printed SSH private key)

addon remove-ci

Remove the GitHub Actions workflow from an addon repository.

dooservice addon remove-ci <ADDON> [-b <BRANCH>] [-s <SERVER>]
-b, --branch <BRANCH>Branch filter. If omitted, removes from all branches
-s, --server <SERVER>Server label. Default: system hostname
$ dooservice addon remove-ci my-addon -b 17.0 -s production
$ dooservice addon remove-ci my-addon # removes from all branches

Create, restore, verify, and manage backups. Supports full, database-only, and filestore-only backup types.

backup create

Create a backup of an instance.

dooservice backup create <INSTANCE> [OPTIONS]
-t, --type <TYPE>Backup type: full (default), database, filestore
-d, --description <DESC>Optional description
$ dooservice backup create my-odoo
$ dooservice backup create my-odoo -t database -d "Before migration"

backup list

List all backups, optionally filtered by instance.

dooservice backup list [-i <INSTANCE>]

backup show

Show backup details (size, type, checksum, date).

dooservice backup show <BACKUP_ID>

backup restore

Restore a backup to an instance.

dooservice backup restore <INSTANCE> -b <BACKUP_ID> [-y]
$ dooservice backup restore my-odoo -b <backup-id>
$ dooservice backup restore staging -b <backup-id> -y

backup delete

Delete a specific backup.

dooservice backup delete <BACKUP_ID> [-y]

backup cleanup

Delete backups older than a specified number of days.

dooservice backup cleanup [OPTIONS]
--older-than <DAYS>Delete backups older than N days. Default: 30
-i, --instance <INSTANCE>Filter by instance
-y, --yesSkip confirmation
$ dooservice backup cleanup --older-than 7 -y
$ dooservice backup cleanup --older-than 30 -i production

backup verify

Verify a backup's integrity by checking its SHA256 checksum.

dooservice backup verify <BACKUP_ID>

Manage PostgreSQL databases within the shared PostgreSQL server.

db list

List all databases in an instance.

dooservice db list <INSTANCE>

db create

Create a new database.

dooservice db create <INSTANCE> -n <NAME>

db delete

Delete a database.

dooservice db delete <INSTANCE> -n <NAME> [-y]

db duplicate

Duplicate a database within the same instance.

dooservice db duplicate <INSTANCE> --source <DB> --target <DB>
$ dooservice db duplicate my-odoo --source production --target test_copy

Manage the Traefik reverse proxy for automatic HTTPS routing with Let's Encrypt certificates.

proxy init

Initialize the reverse proxy with Traefik. Supports DNS challenge (wildcard certs) and HTTP challenge.

dooservice proxy init --base-domain <DOMAIN> --email <EMAIL> [OPTIONS]
--base-domain <DOMAIN>Required. Base domain (e.g., example.com)
--email <EMAIL>Required. Email for Let's Encrypt
--dns-provider <PROVIDER>DNS provider: cloudflare, route53, digitalocean
--cf-token <TOKEN>Cloudflare API Token (Zone:DNS:Edit, recommended)
--cf-email <EMAIL>Cloudflare email (Global API Key method only)
--cf-api-key <KEY>Cloudflare Global API Key
--aws-access-key <KEY>AWS access key (required for Route53)
--aws-secret-key <KEY>AWS secret key (required for Route53)
--aws-region <REGION>AWS region (optional for Route53)
--do-token <TOKEN>DigitalOcean API token
--http-challengeUse HTTP challenge instead of DNS (no wildcard support)
--stagingUse Let's Encrypt staging server (for testing)
--dashboardEnable Traefik dashboard
--http-port <PORT>HTTP port. Default: 80
--https-port <PORT>HTTPS port. Default: 443
# Cloudflare DNS with wildcard SSL (API Token)
$ dooservice proxy init --base-domain example.com --email admin@example.com \
--dns-provider cloudflare --cf-token <your-token>
 
# AWS Route53
$ dooservice proxy init --base-domain example.com --email admin@example.com \
--dns-provider route53 --aws-access-key <key> --aws-secret-key <secret>
 
# DigitalOcean DNS
$ dooservice proxy init --base-domain example.com --email admin@example.com \
--dns-provider digitalocean --do-token <token>
 
# HTTP challenge (simpler, no wildcard)
$ dooservice proxy init --base-domain example.com --email admin@example.com --http-challenge

proxy status / start / stop / restart

Control the proxy container lifecycle and view status.

dooservice proxy status|start|stop|restart

proxy routes

View active proxy routes (domain-to-instance mappings).

dooservice proxy routes

proxy logs

View proxy container logs.

dooservice proxy logs [-n <COUNT>]

proxy destroy

Destroy the proxy, removing the container and network.

dooservice proxy destroy [-y]

proxy set-server-ip

Set the server IP for automatic DNS record management. When configured, DooService creates A records for each instance subdomain via Cloudflare.

dooservice proxy set-server-ip <IP>
# Set a specific IP
$ dooservice proxy set-server-ip 78.46.176.246
 
# Auto-detect public IP
$ dooservice proxy set-server-ip auto

proxy sync-dns

Create DNS records for all existing instances. Useful after configuring set-server-ip or migrating servers.

dooservice proxy sync-dns

Monitor instance health and container status.

health check

Check health of a specific instance.

dooservice health check <INSTANCE> [-d]
-d, --detailsShow detailed component status

health status

Show health status of all instances at a glance.

dooservice health status [-f <STATE>]
-f, --filter <STATE>Filter: healthy, degraded, unhealthy, unknown

Manage resource profiles for instances. Profiles define CPU, memory, workers, and disk limits.

profile list / show

List all profiles or show details of a specific profile.

dooservice profile list [--all]
dooservice profile show <PROFILE>

profile create

Create a custom resource profile.

dooservice profile create -n <NAME> -d <DESC> --memory <MB> --cpu <CORES> [OPTIONS]
-n, --name <NAME>Required. Profile name
-d, --description <DESC>Required. Description
--memory <MB>Required. Memory limit in MB
--cpu <CORES>Required. CPU cores
--workers <N>Web workers (auto-calculated if omitted)
--disk <MB>Disk quota in MB
--pg-memory <MB>PostgreSQL memory
--pg-cpu <CORES>PostgreSQL CPU
--price <CENTS>Monthly price in cents. Default: 0
$ dooservice profile create -n custom-large -d "Large instances" --memory 8192 --cpu 8 --workers 16

profile update

Update an existing profile (system profiles cannot be modified).

dooservice profile update <PROFILE> [OPTIONS]
--memory <MB>New memory limit in MB
--cpu <CORES>New CPU cores
--workers <N>New worker count
--disk <MB>New disk quota in MB
--price <CENTS>New price in cents
--active <BOOL>Activate or deactivate the profile

profile delete

Delete a custom profile (system profiles cannot be deleted).

dooservice profile delete <PROFILE> [-y]

profile init

Initialize the default system profiles (starter, professional, enterprise).

dooservice profile init

Inspect the internal database for troubleshooting.

debug dump-db / tables / table

Dump database contents or inspect specific tables.

dooservice debug dump-db [--full]
dooservice debug tables
dooservice debug table <NAME>
$ dooservice debug tables
$ dooservice debug table instances
$ dooservice debug dump-db --full