Create, deploy, backup, and scale Odoo instances with a single command. Designed for production servers running Ubuntu.
One command to install. Requires Ubuntu 20.04+ and root access. Docker is installed automatically if missing.
dooservice in /usr/local/bin From single instances to multi-server deployments, DooService handles the entire lifecycle.
Create, start, stop, restart, clone, and delete Odoo instances. Each runs in isolated Docker containers with dedicated PostgreSQL.
Install addons from GitHub with auto-detection. Pin to tags or commits. Deploy across all instances with one command. CI/CD integration included.
Built-in Traefik integration with automatic SSL via Let's Encrypt. Supports Cloudflare, Route53, and DigitalOcean DNS for wildcard certs.
Full, database-only, or filestore-only backups with SHA256 verification. Automatic cleanup of old backups. Restore to any instance.
Real-time container health checks. CPU, memory, and network statistics per instance. Filter by health state across all instances.
Predefined resource profiles (starter, professional, enterprise) or custom limits. Control CPU, memory, workers, and disk per instance.
Complete documentation for every command. Use dooservice --help or dooservice <command> --help for inline help.
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 jsonCreate, manage, and monitor Odoo instances. Each instance runs in isolated Docker containers with its own PostgreSQL database.
Create a new Odoo instance with dedicated containers.
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-user <USER>Database user. Default: odoo--db-password <PASS>Database password. Default: odoo--no-postgresDon't create a dedicated PostgreSQL container--no-proxyDon't expose via reverse proxy--subdomain <SUB>Custom subdomain. Default: instance name--user <USER>Container user. 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--disk <MB>Disk quota in MB--pg-memory <MB>PostgreSQL memory in MB--pg-cpu <CORES>PostgreSQL CPU cores--no-db-initSkip automatic database initializationList all instances with their status.
dooservice instance list [OPTIONS]-s, --state <STATE>Filter by state: created, running, stopped, failedShow detailed information about an instance.
dooservice instance show <INSTANCE>Control the instance lifecycle.
dooservice instance start|stop|restart <INSTANCE>-f, --force(stop only) Force stop without graceful shutdownDelete an instance and optionally its volumes.
dooservice instance delete <INSTANCE> [OPTIONS]--volumesAlso remove associated Docker volumes-y, --yesSkip confirmation promptView Odoo container logs.
dooservice instance logs <INSTANCE> [OPTIONS]-n, --tail <COUNT>Number of lines. Default: 100Execute a command inside the Odoo container.
dooservice instance exec <INSTANCE> -- <COMMAND>Open an interactive shell in the Odoo container.
dooservice instance shell <INSTANCE>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)Show container resource statistics (CPU, memory, network I/O).
dooservice instance stats <INSTANCE>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 addonsUpdate 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 changesManage Odoo addons from GitHub repositories. Auto-detects repository type and modules. Supports pinning, CI/CD, and multi-instance deploys.
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: mainList all addons, optionally filtered by instance.
dooservice addon list [-i <INSTANCE>]Show detailed information about an addon (modules, commit, state).
dooservice addon show <ADDON_ID>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 allRemove an addon from an instance.
dooservice addon remove <ADDON_ID> -i <INSTANCE>Delete an addon completely.
dooservice addon delete <ADDON_ID> [-y]Pin an addon to a specific tag or commit, or unpin to follow branch HEAD.
dooservice addon pin <ADDON_ID> --tag <TAG> | --commit <HASH>Clean up orphan addons (failed or removed state).
dooservice addon cleanup [-y]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)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 hostnameRemove 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 hostnameCreate, restore, verify, and manage backups. Supports full, database-only, and filestore-only backup types.
Create a backup of an instance.
dooservice backup create <INSTANCE> [OPTIONS]-t, --type <TYPE>Backup type: full (default), database, filestore-d, --description <DESC>Optional descriptionList all backups, optionally filtered by instance.
dooservice backup list [-i <INSTANCE>]Show backup details (size, type, checksum, date).
dooservice backup show <BACKUP_ID>Restore a backup to an instance.
dooservice backup restore <INSTANCE> -b <BACKUP_ID> [-y]Delete a specific backup.
dooservice backup delete <BACKUP_ID> [-y]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 confirmationVerify a backup's integrity by checking its SHA256 checksum.
dooservice backup verify <BACKUP_ID>Manage PostgreSQL databases within an instance's container.
List all databases in an instance.
dooservice db list <INSTANCE>Create a new database.
dooservice db create <INSTANCE> -n <NAME>Delete a database.
dooservice db delete <INSTANCE> -n <NAME> [-y]Duplicate a database within the same instance.
dooservice db duplicate <INSTANCE> --source <DB> --target <DB>Manage the Traefik reverse proxy for automatic HTTPS routing with Let's Encrypt certificates.
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--http-challengeUse HTTP challenge (no wildcard)--stagingUse Let's Encrypt staging (for testing)--dashboardEnable Traefik dashboard--http-port <PORT>HTTP port. Default: 80--https-port <PORT>HTTPS port. Default: 443Control the proxy container lifecycle and view status.
dooservice proxy status|start|stop|restartView active proxy routes (domain-to-instance mappings).
dooservice proxy routesView proxy container logs.
dooservice proxy logs [-n <COUNT>]Destroy the proxy, removing the container and network.
dooservice proxy destroy [-y]Monitor instance health and container status.
Check health of a specific instance.
dooservice health check <INSTANCE> [-d]-d, --detailsShow detailed component statusShow health status of all instances at a glance.
dooservice health status [-f <STATE>]-f, --filter <STATE>Filter: healthy, degraded, unhealthy, unknownManage resource profiles for instances. Profiles define CPU, memory, workers, and disk limits.
List all profiles or show details of a specific profile.
dooservice profile list [--all]dooservice profile show <PROFILE>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: 0Update, delete, or initialize default profiles.
dooservice profile update <PROFILE> [OPTIONS]dooservice profile delete <PROFILE> [-y]dooservice profile initInspect the internal database for troubleshooting.
Dump database contents or inspect specific tables.
dooservice debug dump-db [--full]dooservice debug tablesdooservice debug table <NAME>