logo
3
0
WeChat Login
Job Zhao<postmaster@huo15.com>
NGINX反向代理

🚀 Docker Odoo19 开发环境

青岛火一五信息科技有限公司

🎓 由青岛火一五信息科技有限公司提供技术支持

🌟 打破信息孤岛,用一套系统驱动企业增长 🌟


🏫 教学机构👨‍🏫 讲师📧 联系方式💬 QQ群📺 配套视频
逸寻智库焰漩十三postmaster@huo15.com1093992108📺 B站视频

📖 项目介绍

这是一个 基于 Docker 的 Odoo 19.0 开发环境,用于快速搭建和部署 Odoo 系统。 企业版目录enterprise在这里https://huihuoyun.huo15.com/odoo/documents
目录:公司/软件/odoo/版本-19

🎯 核心特点

  • 🐳 容器化部署:使用 Docker 和 Docker Compose 实现一键部署
  • 📦 模块化设计:支持多个自定义模块目录,灵活扩展
  • 💾 数据持久化:通过挂载卷保证数据安全可靠
  • ⚡ 开箱即用:预配置 PostgreSQL 数据库和 Odoo 服务
  • 🔧 易于维护:提供便捷的模块管理脚本

📂 项目结构

docker_odoo/ ├── config/ │ └── odoo.conf # Odoo 主配置文件 ├── huo15_addons/ # 火一五自定义模块目录 ├── enterprise/ # 企业版模块目录(空目录即为社区版) ├── tutorials/ # 教程模块目录 ├── waha_addons/ # 哇哈汽车模块目录 ├── xbwd_addons/ # 萧伯网大模块目录 ├── huo15_base_addons/ # 火一五基础模块目录 ├── tpm_huihuoyun/ # 辉火云第三方模块目录 ├── Dockerfile # Docker 镜像构建文件 ├── docker-compose.yml # Docker 编排配置 ├── update_module.sh # Linux/Mac 模块管理脚本 ├── update_module.bat # Windows 模块管理脚本 └── README.md # 项目说明文档

注意:基于 Odoo 19 开发,请区分好模块开发。


代码规范与最佳实践

模块结构规范

  • 每个模块应遵循标准的Odoo目录结构
  • 使用有意义的模块命名,建议采用公司前缀避免命名冲突
  • 模块内部文件组织应按照功能划分目录:
    • models/ - 存放模型定义
    • views/ - 存放视图和模板
    • controllers/ - 存放HTTP控制器
    • data/ - 存放示例数据和初始化数据
    • security/ - 存放访问权限和安全规则
    • static/ - 存放静态资源(CSS, JS, 图片等)
    • wizard/ - 存放向导相关文件(如需要)
    • report/ - 存放报表相关文件(如需要)
    • tests/ - 存放测试文件

命名规范

  • Python文件命名:使用下划线分隔的小写字母(如 sale_order.py
  • XML文件命名:应明确表示其内容用途(如 res_partner_view.xml
  • 模型命名:使用点号分隔(如 sale.order
  • 继承模型应放在单独的文件中以保持清晰度

开发最佳实践

  • 使用 odoo scaffold 命令创建新模块骨架

    方法一:使用 docker-compose exec(推荐)

    基本语法

    docker-compose exec web /usr/bin/odoo scaffold 模块名 /usr/lib/python3/dist-packages/odoo/huo15_addons

    示例:创建一个名为 my_module 的模块

    docker-compose exec web /usr/bin/odoo scaffold my_module /usr/lib/python3/dist-packages/odoo/huo15_addons

    方法二:使用 docker-compose run(一次性容器)

    基本语法

    docker-compose run --rm web --config /etc/odoo/odoo.conf scaffold 模块名 /usr/lib/python3/dist-packages/odoo/huo15_addons --stop-after-init

    示例:创建一个名为 my_module 的模块

    docker-compose run --rm web --config /etc/odoo/odoo.conf scaffold my_module /usr/lib/python3/dist-packages/odoo/huo15_addons --stop-after-init
  • 在稳定版本中修改现有文件时,严格遵循原有风格以维护修订历史

  • 在开发版本中应用编码指南仅对修改部分或重大更改的文件

  • 定义访问权限、用户组和记录规则时使用指定的安全文件

  • 确保模块专注于特定功能,保持清晰和易于维护

  • 遵循Odoo的命名约定和文档标准提高可读性和可用性

代码质量要求

  • 遵循PEP8 Python编码规范
  • 保持代码简洁、可读性强
  • 添加必要的注释说明复杂逻辑
  • 确保所有功能都有相应的测试覆盖

🛠️ 技术栈

  • Odoo:19.x
  • python: 13.x
  • 数据库:PostgreSQL 18.x
  • 容器化:Docker & Docker Compose
  • Python 依赖
    • xlsxtpl - Excel 模板处理
    • pyjwt - JWT 认证
    • wechatpy - 微信集成
    • google-auth - Google 认证
    • 等其他核心库

🌐 访问信息

🔄 Nginx 反向代理配置

当使用 nginx 配置反向代理的时候,请参考 nginx_odoo19.conf 文件。该配置文件包含了完整的 Odoo 19 反向代理设置,包括:

  • WebSocket 支持(用于即时通讯、实时看板等)
  • 静态资源缓存优化
  • 代理超时设置
  • 客户端请求体大小限制

🔗 创建目录别名(可选)

如果需要将其他目录链接到项目中的 addons 目录,可以使用以下命令:

Windows

New-Item -ItemType SymbolicLink -Path "D:\workspace\huo15\docker_odoo\tyb_addons" -Value "D:\workspace\projects\tyb\tyb_addons"

macOS/Linux

ln -s /Users/job/workspace/projects/tyb/tyb_addons /Users/job/workspace/huo15/business_suite_huihuoyun/docker_odoo/tyb_addons

🚀 快速开始

⚠️ 重要提示

每次执行 docker compose 命令时,请务必使用 -p <项目名> 参数指定项目名,例如:

sudo docker compose -p <项目名> up -d

这样可以避免多个项目之间的容器名称冲突,确保每个项目使用独立的容器命名空间。

1️⃣ 启动项目

# 构建并启动所有服务(请替换 <项目名> 为您的实际项目名) sudo docker compose -p <项目名> up -d --build

2️⃣ 重启 Odoo 服务

# 推荐使用,仅重启 Odoo Web 服务 docker-compose restart web

3️⃣ 停止服务

# 停止所有服务 docker-compose down

🔧 模块管理工具 update_module

项目提供了便捷的模块管理工具,支持 更新卸载 模块操作。Windows 和 Linux/Mac 用户都可以使用相同的参数和功能。

📋 Windows 用户:使用 update_module.bat

🔹 语法格式

update_module.bat [-m 模块名1 模块名2 ...] [-d 数据库名] [-p 项目名] [-s web服务名,db服务名] [--update|--remove] [-h]

🔹 参数说明

参数说明默认值
-m指定要操作的模块名(可多个,空格分隔)huo15_online_edu
-d指定数据库名edu
-p指定 Docker Compose 项目名称-
-s指定服务名,格式:web服务名,db服务名 或仅 web服务名web,db
--update更新模块(默认操作,可省略)✅ 默认
--remove卸载模块-
-h, --help显示帮助信息-

🔹 使用示例

1. 基础用法(更新默认模块 huo15_online_edu

update_module.bat

2. 更新单个模块(使用默认数据库)

update_module.bat -m huo15_online_edu

3. 更新多个模块

update_module.bat -m huo15_online_edu waha_crm -d edu

4. 更新模块到指定数据库

update_module.bat -d test_db -m huo15_online_edu

5. 指定项目名更新模块

update_module.bat -p waha -m waha_doc_management -d waha --update

6. 指定服务名更新模块

update_module.bat -s job_web,job_db -m huo15_online_edu

7. 仅指定 web 服务名(db 服务名使用默认值)

update_module.bat -s job_web -m huo15_online_edu

8. 卸载模块

update_module.bat -m huo15_onlyoffice --remove

9. 卸载模块(指定数据库和项目名)

update_module.bat -p waha -m waha_doc_management -d waha --remove

10. 查看帮助信息

update_module.bat -h

📋 Linux/Mac 用户:使用 update_module.sh

🔹 语法格式

./update_module.sh [-m 模块名1 模块名2 ...] [-d 数据库名] [-p 项目名] [-s web服务名,db服务名] [--update|--remove] [-h]

🔹 参数说明

参数说明默认值
-m指定要操作的模块名(可多个,空格分隔)huo15_online_edu
-d指定数据库名edu
-p指定 Docker Compose 项目名称-
-s指定服务名,格式:web服务名,db服务名 或仅 web服务名web,db
--update更新模块(默认操作,可省略)✅ 默认
--remove卸载模块-
-h, --help显示帮助信息-

🔹 使用示例

1. 更新单个模块(使用默认数据库)

./update_module.sh -m huo15_online_edu

2. 更新多个模块

./update_module.sh -m huo15_online_edu waha_crm -d edu

3. 更新模块到指定数据库

./update_module.sh -d test_db -m huo15_online_edu

4. 指定项目名更新模块

./update_module.sh -p waha -m waha_doc_management -d waha --update

5. 指定服务名更新模块

./update_module.sh -s job_web,job_db -m huo15_online_edu

6. 仅指定 web 服务名(db 服务名使用默认值)

./update_module.sh -s job_web -m huo15_online_edu

7. 卸载模块

./update_module.sh -m huo15_onlyoffice --remove

8. 卸载模块(指定数据库和项目名)

./update_module.sh -p waha -m waha_doc_management -d waha --remove

9. 使用默认配置(更新 huo15_online_edu 到 edu 数据库)

./update_module.sh

10. 查看帮助信息

./update_module.sh -h

🔹 脚本执行流程

  1. ⏹️ 停止容器 - docker-compose down
  2. 🚀 启动容器 - docker-compose up -d
  3. 等待服务启动 - 等待 3 秒
  4. 检查容器状态 - docker-compose ps
  5. 🔧 执行模块操作 - 更新或卸载指定模块
  6. 🔄 重启 Odoo 服务 - docker-compose restart web
  7. 完成 - 显示访问信息和操作提示

💡 手动更新模块(通过界面)

如果您更喜欢通过 Odoo 界面手动操作:

更新/安装模块

  1. 访问 http://localhost:8070
  2. 登录系统(账号:admin,密码:admin
  3. 进入 应用 菜单
  4. 点击 更新应用列表
  5. 搜索目标模块
  6. 点击 升级(已安装)或 安装(首次安装)

卸载模块

  1. 进入 应用已安装的应用
  2. 搜索目标模块
  3. 点击 卸载

🔧 开发环境配置

📝 让 Cursor/VSCode 读取被 .gitignore 忽略的目录

由于 enterprise 目录在 .gitignore 中被忽略,Cursor 和 VSCode 默认不会索引这些文件,导致 AI 功能无法读取这些代码。

✅ 解决方案

项目已配置 .vscode/settings.json 文件,确保 Cursor/VSCode 能够读取 enterprise 目录:

  • files.exclude:控制文件浏览器显示,不排除 enterprise 目录
  • search.exclude:控制搜索范围,不排除 enterprise 目录
  • files.watcherExclude:控制文件监视,不排除 enterprise 目录
  • python.analysis.exclude:控制 Python 分析,不排除 enterprise 目录

🔄 如何应用到其他被忽略的目录

如果需要让 Cursor 读取其他被 .gitignore 忽略的目录(如 huo15_base_addons),只需确保这些目录不在 .vscode/settings.json 的排除列表中即可。

⚠️ 注意事项

  • 配置修改后,建议重启 Cursor/VSCode 以使配置生效
  • 该配置仅影响编辑器行为,不会影响 Git 的忽略规则
  • 如果遇到 Cursor AI 无法读取代码的情况,请检查 .vscode/settings.json 配置

📝 常见问题

Q1: 如何添加自定义模块?

将模块放入相应的 addons 目录(如 huo15_addons/),然后在 config/odoo.conf 中配置 addons_path,最后使用 update_module.sh 脚本更新模块。

Q2: 如何修改访问端口?

修改 docker-compose.yml 文件中的端口映射:

ports: - "8070:8069" # 将 8070 改为您想要的端口

Q3: 如何备份数据?

数据存储在 config/pgdata/ 目录中,定期备份该目录即可。

Q4: 容器自动重启配置

docker update --restart=always <container_id>

📞 技术支持

如需帮助或有任何问题,欢迎联系我们:


© 2025 青岛火一五信息科技有限公司 | 让企业数字化更简单

萧伯网络大学二维码

请您关注我们的微信公众号:"逸寻智库"