mcpField
O
odoo-docker-deployment

odoo-docker-deployment

github.com/sickn33云与 DevOps48.7k67 次安装今天更新
代码仓库

关于 odoo-docker-deployment

面向 Odoo 自托管部署的技能,可生成 Docker Compose 与 Odoo 配置,并协助排查容器和数据库连接问题。覆盖开发与生产场景,但配置仍需按环境验证。

主要功能

  1. 01生成 Docker Compose 与 Odoo 配置
  2. 02配置 PostgreSQL 与持久化存储
  3. 03提供环境变量和密钥处理建议
  4. 04排查容器启动及数据库连接问题
  5. 05涵盖开发和生产部署

适用场景

  1. 01用 Docker 搭建本地 Odoo 开发环境
  2. 02将 Odoo 部署到 VPS 或云服务器
  3. 03诊断容器启动或数据库连接故障
  4. 04为现有部署添加 SSL 反向代理

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/sickn33/agentic-awesome-skills --skill odoo-docker-deployment

安装后在 Claude Code 中输入/odoo-docker-deployment确认已加载。

详细介绍

Odoo Docker 部署

概述

此技能提供一份 Docker 配置起始模板,适用于 Odoo,但需要根据具体环境进行验证。配置涵盖 PostgreSQL、持久化文件存储、环境变量配置,以及可选的带 SSL 的 Nginx 反向代理,并介绍开发和生产环境配置。

何时使用此技能

  • 使用 Docker 启动本地 Odoo 开发环境。
  • 将 Odoo 部署到 VPS 或云服务器(AWS、DigitalOcean 等)。
  • 排查 Odoo 容器启动失败或数据库连接错误。
  • 为现有的 Odoo Docker 部署添加带 SSL 的反向代理。

工作原理

  1. 激活:提及 @odoo-docker-deployment 并描述你的部署场景。
  2. 生成:获取可直接运行的完整 docker-compose.yml 和 odoo.conf。
  3. 调试:描述容器错误并获取诊断结果和修复方法。

示例

示例 1:生产环境 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}
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U odoo -d odoo"]
      interval: 10s
      timeout: 5s
      retries: 5
    volumes:
      - postgres-data:/var/lib/postgresql/data
    networks:
      - odoo-net

  odoo:
    image: odoo:17.0
    restart: always
    depends_on:
      db:
        condition: service_healthy
    ports:
      - "127.0.0.1:8069:8069"
      - "127.0.0.1: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:
示例 2:odoo.conf
[options]
admin_passwd = REPLACE_WITH_PRIVATELY_RENDERED_VALUE
db_host = db
db_port = 5432
db_user = odoo
; Official container entrypoint receives database password through PASSWORD.
; Plain odoo.conf does not expand Compose-style environment placeholders.

; addons_path inside the official Odoo Docker image (Debian-based)
addons_path = /mnt/extra-addons,/usr/lib/python3/dist-packages/odoo/addons

; Use container stdout/stderr unless a writable private log volume is configured.
log_level = warn

; Illustrative worker count; size HTTP+cron+PostgreSQL+OS within measured RAM:
workers = 4
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
示例 3:常用命令
# 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

# Module updates change schema/data: stop normal Odoo workers first and back up DB+filestore.
# Run a single maintenance instance with the same reviewed DB/config; verify then restart.

Compose 会在 Compose 文件中展开 ${VAR},但不会展开任意挂载的应用配置。请通过经批准的私密密钥机制生成所需配置,并在不打印密钥的情况下进行验证。单独的 SQL 转储不包含 Odoo 的文件存储;请协调一致的数据库与文件存储备份,并在预发布环境中验证恢复流程。这些示例未涵盖 TLS/代理/数据库选择方面的加固,也未包含生产就绪性测试。

最佳实践

  • ✅ 建议: 将所有密钥存储在 .env 文件中,并通过 ${VAR} 引用——切勿在 docker-compose.yml 中硬编码密码。
  • ✅ 建议: 配置 depends_on: condition: service_healthy,并为 PostgreSQL 设置健康检查,以防 Odoo 在数据库就绪前启动。
  • ✅ 建议: 在 Odoo 前部署 Nginx 以终止 SSL(Let's Encrypt / Certbot)——切勿直接通过 80/443 端口暴露 Odoo。
  • ✅ 建议: 测量工作进程的内存占用和并发量;仅凭 CPU 启发式规则无法保证安全的 RAM 预算。
  • ❌ 不建议: 将端口 5432(PostgreSQL)暴露到公共互联网——仅在内部 Docker 网络中使用。
  • ❌ 不建议: 在生产环境中使用 latest 或 17 Docker 镜像标签——应固定为经过审核的镜像摘要;odoo:17.0 是可变的系列标签,并非不可变的补丁版本标识。
  • ❌ 不建议: 挂载 odoo.conf 并在 CI/CD 中依赖它存储密钥——请改用 Docker secrets 或环境变量。

局限性

  • 此技能涵盖自托管 Docker 部署——Odoo.sh(云托管服务)采用完全不同的部署模式。
  • 水平扩展(在负载均衡器后运行多个 Odoo 容器)需要共享文件存储(NFS 或兼容 S3 的存储),此处不作介绍。
  • 不包含 Nginx 配置模板——完整的反向代理配置请参阅 Odoo 官方 Nginx 文档。
  • Docker 镜像中的 addons_path 可能会随着基础镜像版本更新而变化——升级 Odoo 镜像后务必验证。

评论

支持 Markdown