Odoo 19 首次登录自动创建数据库方案:自动生成 Demo 库的最佳实践

Odoo 19 首次登录自动创建数据库方案

——安装后访问即可自动生成 Demo 数据库的完整解决方案

​在 Odoo 19 的默认行为中,首次访问系统会停留在数据库选择页(/web/database/selector)。管理员需要手动点击“Create Database”创建一个新的数据库,或从已有库中选择进行登录。

然而在一些场景中,这种默认行为并不符合需求,例如:

  • SaaS 模式希望用户首次访问即可获得一个自动创建的试用数据库;
  • 内部环境希望 Odoo 安装好即可直接进入系统,无需人工创建数据库;
  • Demo/演示环境需要固定生成一个 demo 库并自动跳转进去;
  • 自动化部署场景中希望 zero-touch(零操作)体验。

本文将从 原理、实现方式、配置方法、增强方案 四个层面,完整介绍如何在 Odoo 19 中实现“首次访问自动创建数据库” 的能力。

一、Odoo 19 的默认数据库创建行为

Odoo 19 安装后默认启用 dbfilter 机制:

  • 未指定数据库时,会进入数据库管理页面。
  • 用户需要手动输入数据库名称、管理员邮箱、密码等内容来完成初始化。

这种方式对新手并不友好,也不适用于自动化部署。

二、需求分析:自动创建 Demo 数据库的逻辑

目标行为如下:

  1. 首次访问 Odoo 入口 /
  2. 系统检测:
    • 是否已经存在 demo 数据库?
    • 如果不存在 → 自动创建
    • 如果存在 → 自动跳转进入
  3. 用户无需点击任何按钮即可直接进入后台界面。

自动创建的 Demo 数据库可包含:

  • 指定名称(如:demo_db)
  • 自动安装选定模块(sales、crm、inventory 等)
  • 自动设置管理员密码
  • 根据需求注入初始数据

三、实现方案(适用于 Odoo 19)

为了在首次访问时自动创建数据库,我们可以采用以下“三层方案”,你可任选其一或多方案组合。

方案一:使用 --init 参数 + 指定默认数据库(最简单)

适用于 Docker 或命令行部署方式。

1. 启动参数写法

在 odoo.conf 或启动命令中加入:

db_name = demo_db

第一次启动时,如果数据库不存在,Odoo 会自动尝试创建一个同名数据库。

搭配自动安装模块:

init = base,website,sale,crm

2. Docker Compose 示例

command: >
  odoo --db_host=db --db_user=odoo --db_password=odoo
       --db_name=demo_db
       --init=base,website,sale,crm

3. 特点

  • 简单稳定
  • 不需要开发
  • 但不支持高级逻辑(例如首次访问检测、跳转控制等)

方案二:通过反向代理强制路径跳转(zero-touch 体验)

让用户访问 / 时直接跳转到自动创建数据库的 URL。

Nginx 示例:

location / {
    return 302 /web?db=demo_db;
}

如果 Odoo 配置中启用了自动创建数据库(方案一),此方式可做到真正意义上的:

安装 → 启动 → 浏览器访问 → 自动进入后台

方案三(推荐):开发一个自动初始化模块(Auto DB Creator)

这是最灵活、可扩展、最符合生产环境 SaaS/自用需求的方案。

核心思路

编写自定义模块,在用户首次访问 Odoo 路由时执行以下逻辑:

  1. 调用 Odoo API 检查 demo_db 是否存在
  2. 如果不存在 → 调用 Odoo 的内部服务自动创建
  3. 创建完成后自动重定向 /web?db=demo_db
  4. 管理员初始密码从配置或环境变量读取
  5. 可自动安装一组模块
  6. 可自动导入 demo 数据

代码设计结构

auto_db_creator/
  ├── __manifest__.py
  ├── controllers/
  │     └── main.py
  └── data/
        └── auto_init.xml

controller(核心判断逻辑)

from odoo import http
from odoo.http import request

class AutoDBCreator(http.Controller):

    @http.route('/', type='http', auth='none')
    def auto_create_db(self, **kwargs):
        db_list = http.db_list()
        target_db = 'demo_db'

        if target_db not in db_list:
            # 自动创建数据库
            request.env['ir.http'].sudo()._create_database(
                target_db,
                admin_password='admin',
                demo=True,
                lang='zh_CN'
            )

        # 自动跳转进入系统
        return http.redirect_with_hash('/web?db=%s' % target_db)

特点

  • 可自动安装模块
  • 控制复杂逻辑(首次访问才触发)
  • 可用于 SaaS 平台批量创建示例数据库
  • 扩展能力强,可加入审计、初始化数据、二级跳转等功能

四、进阶:自动生成多个数据库(可用于 SaaS)

​如果你需要根据子域名或 URL 自动创建数据库,可以结合 Odoo 自带的 dbfilter:

		​dbfilter = ^%h$

​示例:

​ 访问:

		​abc.myodoo.com

​系统自动创建并加载:

		​abc

​结合本文的自动创建模块即可实现 动态数据库创建

五、部署建议

​为了减少维护成本,推荐方式如下:

    • Docker + 配置文件方式
      → 自动指定 db_name + 安装模块
    • 自定义自动创建模块
      → 控制初始化行为、跳转、数据模板
    • 反向代理跳转
      → 让用户无感进入数据库

​三者组合可实现最佳体验。

六、典型使用场景

场景 推荐方案
官方 Demo 演示 方案一 + 方案二
内部 ERP 自动部署 方案一
SaaS 自动创建多租户 方案三(模块)
零交互安装体验 方案一 + 反向代理跳转

关于我们

​我们致力于帮助中小企业实现数字化转型,我们的团队由一群充满激情和创新思维的专业人士组成,他们具备丰富的行业经验和技术专长。

扫一扫获取顾问以及手册

归档
登录 留下评论
Odoo19 Docker 部署后如何彻底切断官方数据回传?完整配置教程(含 Docker Compose 示例
Odoo 从很早的版本开始,就默认开启了 Telemetry(远程数据回传/Usage Statistics)。这些数据会周期性上传到 Odoo 官方服务器,包括但不限于:服务器信息、模块使用情况、用户数量、安装情况、系统健康度等。对于部分企业来说,这本身并不是坏事,可以帮助 Odoo 改进产品。