Antigravity-awesome-skills odoo-docker-deployment
Production-ready Docker and docker-compose setup for Odoo with PostgreSQL, persistent volumes, environment-based configuration, and Nginx reverse proxy.
install
source · Clone the upstream repo
git clone https://github.com/sickn33/antigravity-awesome-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/sickn33/antigravity-awesome-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/plugins/antigravity-awesome-skills-claude/skills/odoo-docker-deployment" ~/.claude/skills/sickn33-antigravity-awesome-skills-odoo-docker-deployment && rm -rf "$T"
manifest:
plugins/antigravity-awesome-skills-claude/skills/odoo-docker-deployment/SKILL.mdsafety · automated scan (low risk)
This is a pattern-based risk scan, not a security review. Our crawler flagged:
- references .env files
Always read a skill's source content before installing. Patterns alone don't mean the skill is malicious — but they warrant attention.
source content
Odoo Docker Deployment
Overview
This 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.
When to Use This Skill
- Spinning up a local Odoo development environment with Docker.
- Deploying Odoo to a VPS or cloud server (AWS, DigitalOcean, etc.).
- Troubleshooting Odoo container startup failures or database connection errors.
- Adding a reverse proxy with SSL to an existing Odoo Docker setup.
How It Works
- Activate: Mention
and describe your deployment scenario.@odoo-docker-deployment - Generate: Receive a complete
anddocker-compose.yml
ready to run.odoo.conf - Debug: Describe your container error and get a diagnosis with a fix.
Examples
Example 1: Production docker-compose.yml
# Note: The top-level 'version' key is deprecated in Docker Compose v2+ # and can be safely omitted. Remove it to avoid warnings. services: db: image: postgres:15 restart: always environment: POSTGRES_DB: odoo POSTGRES_USER: odoo POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} volumes: - postgres-data:/var/lib/postgresql/data networks: - odoo-net odoo: image: odoo:17.0 restart: always depends_on: db: condition: service_healthy ports: - "8069:8069" - "8072:8072" # Longpolling for live chat / bus environment: HOST: db USER: odoo PASSWORD: ${POSTGRES_PASSWORD} volumes: - odoo-web-data:/var/lib/odoo - ./addons:/mnt/extra-addons # Custom modules - ./odoo.conf:/etc/odoo/odoo.conf networks: - odoo-net volumes: postgres-data: odoo-web-data: networks: odoo-net:
Example 2: odoo.conf
[options] admin_passwd = ${ODOO_MASTER_PASSWORD} ; set via env or .env file db_host = db db_port = 5432 db_user = odoo db_password = ${POSTGRES_PASSWORD} ; set via env or .env file ; addons_path inside the official Odoo Docker image (Debian-based) addons_path = /mnt/extra-addons,/usr/lib/python3/dist-packages/odoo/addons logfile = /var/log/odoo/odoo.log log_level = warn ; Worker tuning for a 4-core / 8GB server: workers = 9 ; (CPU cores × 2) + 1 max_cron_threads = 2 limit_memory_soft = 1610612736 ; 1.5 GB — soft kill threshold limit_memory_hard = 2147483648 ; 2.0 GB — hard kill threshold limit_time_cpu = 600 limit_time_real = 1200 limit_request = 8192
Example 3: Common Commands
# Start all services in background docker compose up -d # Stream Odoo logs in real time docker compose logs -f odoo # Restart Odoo only (not DB — avoids data risk) docker compose restart odoo # Stop all services docker compose down # Backup the database to a local SQL dump docker compose exec db pg_dump -U odoo odoo > backup_$(date +%Y%m%d).sql # Update a custom module without restarting the server docker compose exec odoo odoo -d odoo --update my_module --stop-after-init
Best Practices
- ✅ Do: Store all secrets in a
file and reference them with.env
— never hardcode passwords in${VAR}
.docker-compose.yml - ✅ Do: Use
with a PostgreSQL healthcheck to prevent Odoo starting before the DB is ready.depends_on: condition: service_healthy - ✅ Do: Put Nginx in front of Odoo for SSL termination (Let's Encrypt / Certbot) — never expose Odoo directly on port 80/443.
- ✅ Do: Set
inworkers = (CPU cores × 2) + 1
—odoo.conf
uses single-threaded mode and blocks all users.workers = 0 - ❌ Don't: Expose port 5432 (PostgreSQL) to the public internet — keep it on the internal Docker network only.
- ❌ Don't: Use the
orlatest
Docker image tags in production — always pin to a specific patch-level tag (e.g.,17
).odoo:17.0 - ❌ Don't: Mount
and rely on it for secrets in CI/CD — use Docker secrets or environment variables instead.odoo.conf
Limitations
- This skill covers self-hosted Docker deployments — Odoo.sh (cloud-managed hosting) has a completely different deployment model.
- Horizontal scaling (multiple Odoo containers behind a load balancer) requires shared filestore (NFS or S3-compatible storage) not covered here.
- Does not include an Nginx configuration template — consult the official Odoo Nginx docs for the full reverse proxy config.
- The
inside the Docker image may change with new base image versions — always verify after upgrading the Odoo image.addons_path