跳到主要内容
知仓学习社ZHICANG

odoo-docker-deployment

Production-ready Docker and docker-compose setup for Odoo with PostgreSQL, persistent volumes, environment-based configuration, and Nginx reverse pr…

读凭据严重 3 · 高危 0sickn33/agentic-awesome-skills

它会碰到什么

扫了多少1 个文本文件,5 KB
它会碰到什么读凭据
命中总数3 处
命中统计严重 3 · 高 0 · 中 0 · 低 0
逐条看命中(3 条严重或高危)
  • 严重 SKILL.md:82cred-paths
    admin_passwd = ${ODOO_MASTER_PASSWORD}    ; set via env or .env file
  • 严重 SKILL.md:86cred-paths
    db_password = ${POSTGRES_PASSWORD}        ; set via env or .env file
  • 严重 SKILL.md:128cred-paths
    - ✅ **Do:** Store all secrets in a `.env` file and reference them with `${VAR}` — never hardcode passwords in `docker-compose.yml`.

这一栏是扫描器报的事实,不是结论。命中多不等于有毒(安全工具、规则库、示例脚本本来就会包含危险写法),命中少也不等于干净。它和你手上的凭据、文件、网络有什么关系,需要你自己看。

技能内容

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

  1. Activate: Mention @odoo-docker-deployment and describe your deployment scenario.
  2. Generate: Receive a complete docker-compose.yml and odoo.conf ready to run.
  3. 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 .env file and reference them with ${VAR} — never hardcode passwords in docker-compose.yml.
  • Do: Use depends_on: condition: service_healthy with a PostgreSQL healthcheck to prevent Odoo starting before the DB is ready.
  • Do: Put Nginx in front of Odoo for SSL termination (Let's Encrypt / Certbot) — never expose Odoo directly on port 80/443.
  • Do: Set workers = (CPU cores × 2) + 1 in odoo.confworkers = 0 uses single-threaded mode and blocks all users.
  • Don't: Expose port 5432 (PostgreSQL) to the public internet — keep it on the internal Docker network only.
  • 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).
  • Don't: Mount odoo.conf and rely on it for secrets in CI/CD — use Docker secrets or environment variables instead.

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 addons_path inside the Docker image may change with new base image versions — always verify after upgrading the Odoo image.

想直接用这个技能?

本站把开放许可(MIT / Apache 等)的技能按仓库打包整理到网盘,点一下转存到你自己的网盘,不用一个个从 GitHub 拉。许可未声明的技能只给原始仓库链接,不打包。

同名技能的其他版本

有 4 个不同仓库或目录里都有叫 odoo-docker-deployment 的技能。它们内容并不相同,别混用: