关于 odoo-docker-deployment
面向 Odoo 自托管部署的技能,可生成 Docker Compose 与 Odoo 配置,并协助排查容器和数据库连接问题。覆盖开发与生产场景,但配置仍需按环境验证。
主要功能
- 01生成 Docker Compose 与 Odoo 配置
- 02配置 PostgreSQL 与持久化存储
- 03提供环境变量和密钥处理建议
- 04排查容器启动及数据库连接问题
- 05涵盖开发和生产部署
适用场景
- 01用 Docker 搭建本地 Odoo 开发环境
- 02将 Odoo 部署到 VPS 或云服务器
- 03诊断容器启动或数据库连接故障
- 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 的反向代理。
工作原理
- 激活:提及
@odoo-docker-deployment并描述你的部署场景。 - 生成:获取可直接运行的完整
docker-compose.yml和odoo.conf。 - 调试:描述容器错误并获取诊断结果和修复方法。
示例
示例 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或17Docker 镜像标签——应固定为经过审核的镜像摘要;odoo:17.0是可变的系列标签,并非不可变的补丁版本标识。 - ❌ 不建议: 挂载
odoo.conf并在 CI/CD 中依赖它存储密钥——请改用 Docker secrets 或环境变量。
局限性
- 此技能涵盖自托管 Docker 部署——Odoo.sh(云托管服务)采用完全不同的部署模式。
- 水平扩展(在负载均衡器后运行多个 Odoo 容器)需要共享文件存储(NFS 或兼容 S3 的存储),此处不作介绍。
- 不包含 Nginx 配置模板——完整的反向代理配置请参阅 Odoo 官方 Nginx 文档。
- Docker 镜像中的
addons_path可能会随着基础镜像版本更新而变化——升级 Odoo 镜像后务必验证。
评论
支持 Markdown