Odoo 19 首次登入自動建立資料庫方案:自動生成 Demo 庫的最佳實踐

Odoo 19 首次登入自動建立資料庫方案

——安裝後訪問時自動生成 Demo 資料庫的完整解決方案

​ ​在 Odoo 19 的預設行為中,首次訪問系統時會停留在資料庫選擇頁面(/web/database/selector)。管理員需要手動點擊“建立資料庫”來建立新資料庫,或選擇現有資料庫進行登入。

然而,在某些場景下,這種默認行為無法滿足需求,例如:

  • SaaS 模式期望用戶在首次造訪時取得自動建立的試用資料庫;
  • 內部環境期望 Odoo 在安裝後即可直接進行系統存取,無需手動建立資料庫;
  • Demo/demo 環境需要穩定生成一個演示庫並自動導航進入其中;
  • 在自動化部署場景中,期望實現零接觸體驗。

本文將全面介紹如何從原理、實現方式、設定方法和增強方案四個層面,在Odoo 19中實現「首次存取時自動建立資料庫」的能力。

1. Odoo 19 的預設資料庫建立行為

Odoo 19 在安裝後預設啟用 dbfilter 機制:

  • 未指定資料庫時,將進入資料庫管理頁面。
  • 使用者需要手動輸入資料庫名稱、管理員電子郵件、密碼和其他內容以完成初始化。

此方法對初學者不友好,也不適合自動化部署。

2. 需求分析:自動建立示範資料庫的邏輯

目標行為如下:

  1. 首次造訪 Odoo 入口網站 /
  2. 系統檢測:
    • 演示資料庫是否已經存在?
    • 如果不存在 → 自動建立
    • 如果存在 → 自動重定向進入
  3. 用戶無需點擊任何按鈕即可直接進入後台介面。

自動建立的示範資料庫可以包含:

  • 指定一個名稱(例如 demo_db)
  • 自動安裝所選模組(銷售、CRM、庫存等)
  • 自動設定管理員密碼
  • 根據需求注入初始資料

III. 實施計畫(適用於 Odoo 19)

為了在首次存取時自動建立資料庫,我們可以採用以下「三層方法」,你可以選擇其中任意一種或多種方法的組合。

選項 1:使用 --init 參數 + 指定預設資料庫(最簡單)

適用於 Docker 或命令列部署。

1. 啟動參數語法

在 odoo.conf 或啟動命令中加入:

db_name = demo_db

首次啟動時,如果資料庫不存在,Odoo 將自動嘗試建立一個同名資料庫。

與自動安裝模組配合使用:

init = base,website,sale,crm

2. Docker Compose 範例

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

3. 功能

  • 簡單且穩定
  • 無需開發
  • 但不支援高級邏輯(例如首次造訪偵測、跳轉控制等)

選項 2:透過反向代理強制路徑重新導向(零接觸體驗)

當使用者存取 / 時,他們會被直接重新導向到用於自動建立資料庫的 URL。

Nginx 範例:

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

如果在 Odoo 設定中啟用了自動建立資料庫(選項 1),則此方法可以實現真正的:

安裝 → 啟動 → 透過瀏覽器存取 → 自動進入後端

選項 3(推薦):開發自動初始化模組(自動資料庫建立器)

這是滿足 SaaS/自託管需求的最靈活、可擴展且可投入生產的解決方案。

核心思想

編寫一個自訂模組,在用戶首次訪問 Odoo 路由時執行以下邏輯:

  1. 呼叫 Odoo API 檢查 demo_db 是否存在
  2. 如果不存在 → 調用Odoo的內部服務自動創建
  3. 建立後自動重新導向至 /web?db=demo_db
  4. 管理員初始密碼從配置或環境變數中讀取。
  5. 一組模組可以自動安裝
  6. 可以自動匯入示範資料

代碼設計結構

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

控制器(核心判斷邏輯)

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平台上批次建立範例資料庫
  • 強大的可擴展性,支持添加審計、初始化數據和二次重定向等功能。

4. 高級:自動生成多個資料庫(適用於 SaaS)

​ ​如果您需要根據子網域或 URL 自動建立資料庫,可以結合 Odoo 內建的 dbfilter:

	​	​dbfilter = ^%h$

​ ​示例:

​ ​ 訪問:

	​	​abc.myodoo.com

​ ​系統自動建立並載入:

	​	​abc

​ ​結合本文所述的自動建立模組,可以實現動態資料庫建立。

5. 部署建議

​為降低維護成本,建議採用以下方法:

    ​
    • Docker + 設定檔方法
      → 自動指定 db_name + 安裝模組
    • 自訂自動建立模組
      → 控制初始化行為、跳轉、資料範本
    • 反向代理重定向
      → 讓使用者無縫存取資料庫

三者的結合帶來最佳體驗。

6. 典型使用場景

場景 推薦方案
官方演示 選項 1 + 選項 2
內部 ERP 自動部署 選項 1
SaaS 自動建立多租戶 方案三(模組)
零互動安裝體驗 選項 1 + 反向代理重新導向

关于我们

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

扫一扫获取顾问以及手册

归档
登入 發表評論
Odoo19 Docker 部署後如何徹底切斷官方數據回傳?完整配置教程(含 Docker Compose 示例
Odoo 從很早的版本開始,就預設開啟了 Telemetry(遠端資料回傳/Usage Statistics)。這些資料會週期性上傳到 Odoo 官方伺服器,包括但不限於:伺服器資訊、模組使用情況、使用者數量、安裝情況、系統健康度等。對於部分企業來說,這本身並不是壞事,可以幫助 Odoo 改進產品。