{"id":"e8f6a78d-0cb4-4887-a436-452886e0df14","shortId":"SPQwhD","kind":"skill","title":"odoo-docker-deployment","tagline":"Production-ready Docker and docker-compose setup for Odoo with PostgreSQL, persistent volumes, environment-based configuration, and Nginx reverse proxy.","description":"# Odoo Docker Deployment\n\n## Overview\n\nThis skill provides a complete, production-ready Docker setup for Odoo, including PostgreSQL, persistent file storage, environment variable configuration, and an optional Nginx reverse proxy with SSL. It covers both development and production configurations.\n\n## When to Use This Skill\n\n- Spinning up a local Odoo development environment with Docker.\n- Deploying Odoo to a VPS or cloud server (AWS, DigitalOcean, etc.).\n- Troubleshooting Odoo container startup failures or database connection errors.\n- Adding a reverse proxy with SSL to an existing Odoo Docker setup.\n\n## How It Works\n\n1. **Activate**: Mention `@odoo-docker-deployment` and describe your deployment scenario.\n2. **Generate**: Receive a complete `docker-compose.yml` and `odoo.conf` ready to run.\n3. **Debug**: Describe your container error and get a diagnosis with a fix.\n\n## Examples\n\n### Example 1: Production docker-compose.yml\n\n```yaml\n# Note: The top-level 'version' key is deprecated in Docker Compose v2+\n# and can be safely omitted. Remove it to avoid warnings.\n\nservices:\n  db:\n    image: postgres:15\n    restart: always\n    environment:\n      POSTGRES_DB: odoo\n      POSTGRES_USER: odoo\n      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}\n    volumes:\n      - postgres-data:/var/lib/postgresql/data\n    networks:\n      - odoo-net\n\n  odoo:\n    image: odoo:17.0\n    restart: always\n    depends_on:\n      db:\n        condition: service_healthy\n    ports:\n      - \"8069:8069\"\n      - \"8072:8072\"   # Longpolling for live chat / bus\n    environment:\n      HOST: db\n      USER: odoo\n      PASSWORD: ${POSTGRES_PASSWORD}\n    volumes:\n      - odoo-web-data:/var/lib/odoo\n      - ./addons:/mnt/extra-addons   # Custom modules\n      - ./odoo.conf:/etc/odoo/odoo.conf\n    networks:\n      - odoo-net\n\nvolumes:\n  postgres-data:\n  odoo-web-data:\n\nnetworks:\n  odoo-net:\n```\n\n### Example 2: odoo.conf\n\n```ini\n[options]\nadmin_passwd = ${ODOO_MASTER_PASSWORD}    ; set via env or .env file\ndb_host = db\ndb_port = 5432\ndb_user = odoo\ndb_password = ${POSTGRES_PASSWORD}        ; set via env or .env file\n\n; addons_path inside the official Odoo Docker image (Debian-based)\naddons_path = /mnt/extra-addons,/usr/lib/python3/dist-packages/odoo/addons\n\nlogfile = /var/log/odoo/odoo.log\nlog_level = warn\n\n; Worker tuning for a 4-core / 8GB server:\nworkers = 9                ; (CPU cores × 2) + 1\nmax_cron_threads = 2\nlimit_memory_soft = 1610612736   ; 1.5 GB — soft kill threshold\nlimit_memory_hard = 2147483648   ; 2.0 GB — hard kill threshold\nlimit_time_cpu = 600\nlimit_time_real = 1200\nlimit_request = 8192\n```\n\n### Example 3: Common Commands\n\n```bash\n# Start all services in background\ndocker compose up -d\n\n# Stream Odoo logs in real time\ndocker compose logs -f odoo\n\n# Restart Odoo only (not DB — avoids data risk)\ndocker compose restart odoo\n\n# Stop all services\ndocker compose down\n\n# Backup the database to a local SQL dump\ndocker compose exec db pg_dump -U odoo odoo > backup_$(date +%Y%m%d).sql\n\n# Update a custom module without restarting the server\ndocker compose exec odoo odoo -d odoo --update my_module --stop-after-init\n```\n\n## Best Practices\n\n- ✅ **Do:** Store all secrets in a `.env` file and reference them with `${VAR}` — never hardcode passwords in `docker-compose.yml`.\n- ✅ **Do:** Use `depends_on: condition: service_healthy` with a PostgreSQL healthcheck to prevent Odoo starting before the DB is ready.\n- ✅ **Do:** Put Nginx in front of Odoo for SSL termination (Let's Encrypt / Certbot) — never expose Odoo directly on port 80/443.\n- ✅ **Do:** Set `workers = (CPU cores × 2) + 1` in `odoo.conf` — `workers = 0` uses single-threaded mode and blocks all users.\n- ❌ **Don't:** Expose port 5432 (PostgreSQL) to the public internet — keep it on the internal Docker network only.\n- ❌ **Don't:** Use the `latest` or `17` Docker image tags in production — always pin to a specific patch-level tag (e.g., `odoo:17.0`).\n- ❌ **Don't:** Mount `odoo.conf` and rely on it for secrets in CI/CD — use Docker secrets or environment variables instead.\n\n## Limitations\n\n- This skill covers **self-hosted Docker deployments** — Odoo.sh (cloud-managed hosting) has a completely different deployment model.\n- **Horizontal scaling** (multiple Odoo containers behind a load balancer) requires shared filestore (NFS or S3-compatible storage) not covered here.\n- Does not include an Nginx configuration template — consult the [official Odoo Nginx docs](https://www.odoo.com/documentation/17.0/administration/install/deploy.html) for the full reverse proxy config.\n- The `addons_path` inside the Docker image may change with new base image versions — always verify after upgrading the Odoo image.","tags":["odoo","docker","deployment","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding"],"capabilities":["skill","source-sickn33","skill-odoo-docker-deployment","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/odoo-docker-deployment","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 34666 github stars · SKILL.md body (4,682 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-23T06:51:40.534Z","embedding":null,"createdAt":"2026-04-18T21:41:42.574Z","updatedAt":"2026-04-23T06:51:40.534Z","lastSeenAt":"2026-04-23T06:51:40.534Z","tsv":"'/addons':244 '/documentation/17.0/administration/install/deploy.html)':654 '/etc/odoo/odoo.conf':249 '/mnt/extra-addons':245,314 '/odoo.conf':248 '/usr/lib/python3/dist-packages/odoo/addons':315 '/var/lib/odoo':243 '/var/lib/postgresql/data':203 '/var/log/odoo/odoo.log':317 '0':527 '1':116,154,334,523 '1.5':343 '1200':364 '15':185 '1610612736':342 '17':561 '17.0':211,578 '2':128,267,333,338,522 '2.0':352 '2147483648':351 '3':139,369 '4':325 '5432':287,541 '600':360 '80/443':516 '8069':221,222 '8072':223,224 '8192':367 '8gb':327 '9':330 'activ':117 'ad':101 'addon':301,312,662 'admin':271 'alway':187,213,567,675 'avoid':179,398 'aw':89 'background':377 'backup':411,428 'balanc':626 'base':22,311,672 'bash':372 'behind':623 'best':456 'block':534 'bus':229 'certbot':509 'chang':669 'chat':228 'ci/cd':590 'cloud':87,609 'cloud-manag':608 'command':371 'common':370 'compat':634 'complet':36,132,614 'compos':12,169,379,389,402,409,420,443 'condit':217,480 'config':660 'configur':23,51,66,644 'connect':99 'consult':646 'contain':94,143,622 'core':326,332,521 'cover':61,601,637 'cpu':331,359,520 'cron':336 'custom':246,436 'd':381,432,447 'data':202,242,257,261,399 'databas':98,413 'date':429 'db':182,190,216,232,282,284,285,288,291,397,422,493 'debian':310 'debian-bas':309 'debug':140 'depend':214,478 'deploy':4,30,81,122,126,606,616 'deprec':166 'describ':124,141 'develop':63,77 'diagnosi':148 'differ':615 'digitalocean':90 'direct':513 'doc':651 'docker':3,8,11,29,40,80,111,121,168,307,378,388,401,408,419,442,552,562,592,605,666 'docker-compos':10 'docker-compose.yml':133,156,475 'dump':418,424 'e.g':576 'encrypt':508 'env':278,280,297,299,464 'environ':21,49,78,188,230,595 'environment-bas':20 'error':100,144 'etc':91 'exampl':152,153,266,368 'exec':421,444 'exist':109 'expos':511,539 'f':391 'failur':96 'file':47,281,300,465 'filestor':629 'fix':151 'front':500 'full':657 'gb':344,353 'generat':129 'get':146 'hard':350,354 'hardcod':472 'healthcheck':486 'healthi':219,482 'horizont':618 'host':231,283,604,611 'imag':183,209,308,563,667,673,681 'includ':44,641 'ini':269 'init':455 'insid':303,664 'instead':597 'intern':551 'internet':546 'keep':547 'key':164 'kill':346,355 'latest':559 'let':506 'level':162,319,574 'limit':339,348,357,361,365,598 'live':227 'load':625 'local':75,416 'log':318,384,390 'logfil':316 'longpol':225 'm':431 'manag':610 'master':274 'max':335 'may':668 'memori':340,349 'mention':118 'mode':532 'model':617 'modul':247,437,451 'mount':581 'multipl':620 'net':207,253,265 'network':204,250,262,553 'never':471,510 'new':671 'nfs':630 'nginx':25,55,498,643,650 'note':158 'odoo':2,15,28,43,76,82,93,110,120,191,194,206,208,210,234,240,252,259,264,273,290,306,383,392,394,404,426,427,445,446,448,489,502,512,577,621,649,680 'odoo-docker-deploy':1,119 'odoo-net':205,251,263 'odoo-web-data':239,258 'odoo.conf':135,268,525,582 'odoo.sh':607 'offici':305,648 'omit':175 'option':54,270 'overview':31 'passwd':272 'password':196,198,235,237,275,292,294,473 'patch':573 'patch-level':572 'path':302,313,663 'persist':18,46 'pg':423 'pin':568 'port':220,286,515,540 'postgr':184,189,192,195,197,201,236,256,293 'postgres-data':200,255 'postgresql':17,45,485,542 'practic':457 'prevent':488 'product':6,38,65,155,566 'production-readi':5,37 'provid':34 'proxi':27,57,104,659 'public':545 'put':497 'readi':7,39,136,495 'real':363,386 'receiv':130 'refer':467 'reli':584 'remov':176 'request':366 'requir':627 'restart':186,212,393,403,439 'revers':26,56,103,658 'risk':400 'run':138 's3':633 's3-compatible':632 'safe':174 'scale':619 'scenario':127 'secret':461,588,593 'self':603 'self-host':602 'server':88,328,441 'servic':181,218,375,407,481 'set':276,295,518 'setup':13,41,112 'share':628 'singl':530 'single-thread':529 'skill':33,71,600 'skill-odoo-docker-deployment' 'soft':341,345 'source-sickn33' 'specif':571 'spin':72 'sql':417,433 'ssl':59,106,504 'start':373,490 'startup':95 'stop':405,453 'stop-after-init':452 'storag':48,635 'store':459 'stream':382 'tag':564,575 'templat':645 'termin':505 'thread':337,531 'threshold':347,356 'time':358,362,387 'top':161 'top-level':160 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'troubleshoot':92 'tune':322 'u':425 'updat':434,449 'upgrad':678 'use':69,477,528,557,591 'user':193,233,289,536 'v2':170 'var':470 'variabl':50,596 'verifi':676 'version':163,674 'via':277,296 'volum':19,199,238,254 'vps':85 'warn':180,320 'web':241,260 'without':438 'work':115 'worker':321,329,519,526 'www.odoo.com':653 'www.odoo.com/documentation/17.0/administration/install/deploy.html)':652 'y':430 'yaml':157","prices":[{"id":"8c7aa468-8542-466f-ae4d-32585a7ced0b","listingId":"e8f6a78d-0cb4-4887-a436-452886e0df14","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:41:42.574Z"}],"sources":[{"listingId":"e8f6a78d-0cb4-4887-a436-452886e0df14","source":"github","sourceId":"sickn33/antigravity-awesome-skills/odoo-docker-deployment","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/odoo-docker-deployment","isPrimary":false,"firstSeenAt":"2026-04-18T21:41:42.574Z","lastSeenAt":"2026-04-23T06:51:40.534Z"}],"details":{"listingId":"e8f6a78d-0cb4-4887-a436-452886e0df14","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"odoo-docker-deployment","github":{"repo":"sickn33/antigravity-awesome-skills","stars":34666,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-04-23T06:41:03Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"77ee469570f2d3151d35acaf5a2b2f819f9998b2","skill_md_path":"skills/odoo-docker-deployment/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/odoo-docker-deployment"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"odoo-docker-deployment","description":"Production-ready Docker and docker-compose setup for Odoo with PostgreSQL, persistent volumes, environment-based configuration, and Nginx reverse proxy."},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/odoo-docker-deployment"},"updatedAt":"2026-04-23T06:51:40.534Z"}}