Odoo 19 首次登入自動建立資料庫方案
——安裝後訪問時自動生成 Demo 資料庫的完整解決方案
在 Odoo 19 的預設行為中,首次訪問系統時會停留在資料庫選擇頁面(/web/database/selector)。管理員需要手動點擊“建立資料庫”來建立新資料庫,或選擇現有資料庫進行登入。
然而,在某些場景下,這種默認行為無法滿足需求,例如:
- SaaS 模式期望用戶在首次造訪時取得自動建立的試用資料庫;
- 內部環境期望 Odoo 在安裝後即可直接進行系統存取,無需手動建立資料庫;
- Demo/demo 環境需要穩定生成一個演示庫並自動導航進入其中;
- 在自動化部署場景中,期望實現零接觸體驗。
本文將全面介紹如何從原理、實現方式、設定方法和增強方案四個層面,在Odoo 19中實現「首次存取時自動建立資料庫」的能力。
1. Odoo 19 的預設資料庫建立行為
Odoo 19 在安裝後預設啟用 dbfilter 機制:
- 未指定資料庫時,將進入資料庫管理頁面。
- 使用者需要手動輸入資料庫名稱、管理員電子郵件、密碼和其他內容以完成初始化。
此方法對初學者不友好,也不適合自動化部署。
2. 需求分析:自動建立示範資料庫的邏輯
目標行為如下:
- 首次造訪 Odoo 入口網站 /
-
系統檢測:
- 演示資料庫是否已經存在?
- 如果不存在 → 自動建立
- 如果存在 → 自動重定向進入
- 用戶無需點擊任何按鈕即可直接進入後台介面。
自動建立的示範資料庫可以包含:
- 指定一個名稱(例如 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 路由時執行以下邏輯:
- 呼叫 Odoo API 檢查 demo_db 是否存在
- 如果不存在 → 調用Odoo的內部服務自動創建
- 建立後自動重新導向至 /web?db=demo_db
- 管理員初始密碼從配置或環境變數中讀取。
- 一組模組可以自動安裝
- 可以自動匯入示範資料
代碼設計結構
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 + 安裝模組
-
Docker + 設定檔方法
-
自訂自動建立模組
→ 控制初始化行為、跳轉、資料範本
-
自訂自動建立模組
-
反向代理重定向
→ 讓使用者無縫存取資料庫
-
反向代理重定向
三者的結合帶來最佳體驗。
6. 典型使用場景
| 場景 | 推薦方案 |
|---|---|
| 官方演示 | 選項 1 + 選項 2 |
| 內部 ERP 自動部署 | 選項 1 |
| SaaS 自動建立多租戶 | 方案三(模組) |
| 零互動安裝體驗 | 選項 1 + 反向代理重新導向 |
