iT邦幫忙

2024 iThome 鐵人賽

DAY 3
0
Odoo

Odoo 部署策略系列 第 3

分析 odoo 官方安裝方法:從原始碼、套件管理或 Docker 安裝

  • 分享至 

  • xImage
  •  

分析 odoo 官方提供的安裝方式

在開始深入編寫我們的 Dockerfile 之前,我們先來分析 odoo 官方提供的三種安裝方式,了解它們的運作機制:

  1. 從原始碼安裝
  2. 使用套件管理器安裝
  3. 使用官方 Docker 映像檔安裝

一、從原始碼安裝

首先,我們來看從原始碼安裝的方法。以下是官方提供的安裝步驟:

git clone https://github.com/odoo/odoo.git
sudo apt install postgresql postgresql-client
sudo -u postgres createuser -d -R -S $USER
createdb $USER
cd odoo  # CommunityPath
sudo ./setup/debinstall.sh
sudo npm install -g rtlcss  # 若需要支持右至左語言(如阿拉伯語或希伯來語)

可以看到,大部分的步驟都相當淺顯易懂。只有倒數第二行 sudo ./setup/debinstall.sh 需要深入探討。

這個指令執行了一個腳本 debinstall.sh,我們來看看它的主要內容:

  1. 定位控制檔 debian/control

     script_path=$(realpath "$0")
     script_dir=$(dirname "$script_path")
     control_path=$(realpath "$script_dir/../debian/control")
    

    這段程式碼用於找到控制檔的位置,首先取得當前腳本的實際路徑,然後找到其目錄,最後定位到 ../debian/control

  2. 提取依賴套件列表:

     sed -n '/^Depends:/,/^[A-Z]/p' "$control_path" \
     | awk '/^ [a-z]/ { gsub(/,/,"") ; gsub(" ", "") ; print $NF }' | sort -u \
     | DEBIAN_FRONTEND=noninteractive xargs $cmd
    

    解釋:

    • sed 指令從 Depends: 開始,到下一個以大寫字母開頭的行,提取所有內容,這些內容包含了所有的依賴套件。
    • awk 指令過濾並格式化套件名稱,移除逗號和空格,取得每個套件的名稱。
    • sort -u 將套件名稱排序並移除重複項。
    • 最後,使用 xargs $cmd 將套件名稱傳遞給之前定義的安裝命令,執行安裝。
  3. 安裝依賴套件:

    如果不使用 -l 選項,腳本會使用以下命令來安裝所有的依賴套件:

     apt-get install -y --no-install-recommends [套件列表]
    

二、使用套件管理器安裝

接下來,我們看看使用套件管理器直接安裝 odoo。官方提供的步驟如下:

sudo apt install postgresql -y
wget -q -O - https://nightly.odoo.com/odoo.key | sudo gpg --dearmor -o /usr/share/keyrings/odoo-archive-keyring.gpg
echo 'deb [signed-by=/usr/share/keyrings/odoo-archive-keyring.gpg] https://nightly.odoo.com/17.0/nightly/deb/ ./' | sudo tee /etc/apt/sources.list.d/odoo.list
sudo apt-get update && sudo apt-get install odoo

解釋:

  1. 安裝 PostgreSQL
  2. 添加 odoo 的 GPG 金鑰
  3. 添加 odoo 的套件庫
  4. 更新套件列表並安裝 odoo

三、使用官方 Docker 映像檔安裝

最後,我們來看使用官方提供的 Docker 映像檔。官方的指令如下:

docker run -d -e POSTGRES_USER=odoo -e POSTGRES_PASSWORD=odoo -e POSTGRES_DB=postgres --name db postgres:15
docker run -p 8069:8069 --name odoo --link db:db -t odoo

分析 Dockerfile:

官方的 Dockerfile 主要執行以下步驟:

  1. 安裝 WKHTMLTOPDF:用於將報表轉換為 PDF 格式,Odoo 需要這個工具來生成 PDF 報表。
  2. 安裝 PostgreSQL 客戶端
  3. 安裝 RTL(Right-to-Left)支援:安裝 rtlcss,以支持從右至左的語言,如阿拉伯語或希伯來語。
  4. 添加 odoo 的套件來源並安裝 odoo:與使用套件管理器安裝的方法相似,添加官方的套件來源,然後使用 apt 進行安裝。
  5. 複製模組和 Odoo 的設定檔:將必要的模組和設定檔複製到容器中。
  6. 等待資料庫啟動並連接:在 Odoo 啟動前,確保資料庫服務已經就緒。

選擇與調整

我們的目標是盡可能利用現有的資源,減少自行處理的部分,降低採到問題而要 debug 的機會。因此,我們計劃在官方提供的第三種方法——使用官方 Docker 映像檔的基礎上進行調整。

思考點:為什麼不直接使用官方映像檔?

由於我們需要進行開發,並可能安裝自訂的 Python 套件和 odoo 模組,如果直接使用官方的 Docker 映像檔,會面臨以下問題:

  • 依賴套件的管理複雜性:

    官方映像檔中的 odoo 及其依賴套件是透過套件管理器安裝的,而我們的模組可能需要額外的 Python 套件。這會導致依賴套件分散在不同的地方,不利於統一管理。

  • 缺乏彈性:

    官方映像檔每次都使用最新的 Odoo 版本,可能導致開發基礎不穩定。此外,不易修改啟動流程,無法滿足特定的開發和佈署需求。

最終解決計畫

因此,我們決定基於官方的 Dockerfile,進行以下調整:

  • 從套件安裝改為從原始碼安裝:

    這樣可以確保我們對 odoo 有完全的控制權,方便進行開發和除錯。

  • 統一依賴套件管理:

    所有的 Python 依賴套件(無論是 odoo 的還是自訂模組的)都在 Dockerfile 中統一管理,避免分散在系統套件和 Python 套件之間。

  • 客製化啟動流程:

    透過自訂的 entrypoint,可以修改 Odoo 的啟動流程,實現更多功能,例如自動化初始,節省開發時間。


上一篇
模組、整合與部署:三層 Git Repo 結構的設計思考
下一篇
從官方 Dockerfile 開始調整:以原始碼安裝取代套件安裝
系列文
Odoo 部署策略13
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言