Odoo 是一款功能強大的開源 ERP 系統,涵蓋了企業管理的各個層面,包括會計、銷售、庫存管理、電子商務、CRM 等模組,能夠根據企業需求靈活擴充與自訂。由於 Odoo 具備模組化架構,開發者與企業用戶可以根據需求選擇合適的功能,並透過社群或官方應用程式市集來擴展其能力。
然而,在傳統環境中部署 Odoo 可能涉及較為繁瑣的設定,包含資料庫安裝、相依性處理以及伺服器配置等,這對於新手或不熟悉系統管理的使用者來說,可能會造成一定的門檻。因此,使用 Docker Compose 來安裝 Odoo,成為一種高效率且簡單的解決方案。透過 Docker Compose,可以輕鬆地管理 Odoo 及其相依的 PostgreSQL 資料庫,確保環境的一致性,同時降低部署與維護的難度。此外,Docker 提供了容器化技術,使得 Odoo 的執行環境與系統主機隔離,避免了因環境變更而產生的相容性問題。
GitHub 儲存庫:https://github.com/qwe987299/odoo-docker
docker-compose.yml
services:
odoo:
image: odoo:latest
container_name: odoo_web
restart: always
depends_on:
- postgres
ports:
- "8069:8069"
volumes:
- ./odoo-web-data:/var/lib/odoo
- ./odoo-config:/etc/odoo
- ./odoo-addons:/mnt/extra-addons
environment:
- HOST=postgres
- POSTGRES_DB=postgres
- POSTGRES_USER=odoo
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
postgres:
image: postgres:15
container_name: odoo_postgres
restart: always
volumes:
- ./odoo-db-data:/var/lib/postgresql/data
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=odoo
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- PGDATA=/var/lib/postgresql/data
pgadmin:
image: dpage/pgadmin4:latest
container_name: odoo_pgadmin
restart: always
depends_on:
- postgres
ports:
- "8080:80"
volumes:
- ./pgadmin-data:/var/lib/pgadmin
environment:
PGADMIN_DEFAULT_EMAIL: "example@gmail.com"
PGADMIN_DEFAULT_PASSWORD: "${PGADMIN_PASSWORD}"
PGADMIN_LISTEN_PORT: 80
在這份 docker-compose.yml
設定檔中,我們透過 Docker Compose 部署了一個完整的 Odoo 環境,其中包含 Odoo 服務本身、PostgreSQL 資料庫,以及 pgAdmin 資料庫管理工具。透過這種方式,可以確保各個組件的相容性,並且方便管理與擴充。
首先,odoo
服務負責運行 Odoo 應用程式,使用官方提供的 odoo:latest
映像檔,確保始終獲取最新版本。這個容器名稱設定為 odoo_web
,並且設置為自動重啟,確保當服務意外停止時能夠自動恢復。Odoo 依賴 postgres
服務,因此 depends_on
指定了 PostgreSQL 作為前置條件,確保 Odoo 只有在資料庫準備就緒後才會啟動。Odoo 的 Web 介面被映射到主機的 8069 端口,以便透過瀏覽器存取。此外,透過 volumes
映射三個資料夾來儲存數據與配置,分別對應 Odoo 的資料目錄(/var/lib/odoo
)、設定檔(/etc/odoo
)以及額外的擴充模組(/mnt/extra-addons
),讓開發者能夠更靈活地管理 Odoo 環境。環境變數部分,則指定了連接 PostgreSQL 的資訊,包括主機名稱、資料庫名稱、用戶名與密碼,這些變數可以透過 .env
檔案管理,確保敏感資訊不會直接暴露在 docker-compose.yml
中。
postgres
服務負責提供 Odoo 運行所需的 PostgreSQL 資料庫,使用的是 postgres:15
這個較新的官方映像檔,確保良好的性能與安全性。容器名稱設定為 odoo_postgres
,並且同樣啟用了自動重啟機制,確保當資料庫發生異常時能夠自動重新啟動。透過 volumes
,資料庫的儲存位置被映射到 ./odoo-db-data
目錄,確保數據不會因容器重新啟動而遺失。此外,透過環境變數配置了資料庫名稱、使用者帳號與密碼,並設定了 PGDATA
變數來確保資料庫數據存儲在指定目錄內。
最後,pgadmin
服務提供了一個 Web 介面的資料庫管理工具,使用的是 dpage/pgadmin4:latest
映像檔,並將容器命名為 odoo_pgadmin
,這樣使用者可以透過 pgAdmin 來管理 PostgreSQL 資料庫。此服務同樣依賴 postgres
,確保在資料庫啟動後才開始運行。它將主機的 8080 端口映射到容器內部的 80 端口,允許使用者透過瀏覽器(http://localhost:8080
)存取 pgAdmin 介面。此外,volumes
映射了一個目錄來存儲 pgAdmin 設定與數據,避免因為容器重啟而遺失管理資料。環境變數部分設定了 pgAdmin 的管理員帳號與密碼,確保只有授權的使用者能夠存取系統。
.env
POSTGRES_PASSWORD=Password1234
PGADMIN_PASSWORD=Password1234
這份 .env
檔案主要用來設定 Docker Compose 部署 Odoo 環境時的環境變數,確保資料庫與管理工具的存取安全性與靈活性。透過 .env
檔案,可以將敏感資訊獨立於 docker-compose.yml
,避免將密碼等機密資訊直接寫入設定檔,進而提升安全性與可維護性。
其中,POSTGRES_PASSWORD=Password1234
用來設定 PostgreSQL 資料庫的 root 密碼,這個密碼會被 Odoo 服務與 pgAdmin 服務使用,以便進行資料庫存取與管理。而 PGADMIN_PASSWORD=Password1234
則是用來設定 pgAdmin 的登入密碼,配合 PGADMIN_DEFAULT_EMAIL
(在 docker-compose.yml
設定為 example@gmail.com
),這組帳號與密碼可以用來登入 pgAdmin 並進行資料庫管理。
fix_permissions.sh
sudo chown -R 101:101 odoo-web-data
sudo chown -R 5050:5050 pgadmin-data
sudo chmod -R 775 odoo-web-data
這支 fix_permissions.sh
腳本的主要功能是調整 Odoo 及 pgAdmin 相關資料夾的權限,確保這些服務在 Docker 容器內能夠正常存取與讀寫所需的數據。當我們使用 Docker Compose 來部署 Odoo 時,容器內的應用程式會嘗試讀取與寫入對應的掛載資料夾,但若權限設定不當,可能會導致存取權限錯誤,進而影響 Odoo 或 pgAdmin 的正常運作。因此,這個腳本提供了一個簡單的解決方案來修正這些權限問題。
▲ 從 GitHub 下載 Odoo Docker 專案,並執行 docker compose up -d
來啟動 Odoo、PostgreSQL 和 pgAdmin 服務。接著執行 fix_permissions.sh
修正權限,最後透過 docker compose ps
確認所有容器都已成功啟動。透過 localhost:8069
進入 Web 介面。
▲ 第一次進入 Odoo 時,需要建立資料庫。設定 Master Password、資料庫名稱、管理員帳號(即電子信箱)與密碼,選擇語言與國家後,點擊「Create database」來初始化系統。
▲ 資料庫建立完成後,進入 Odoo 登入畫面,輸入剛剛設定的管理員 Email 和密碼,點擊「登入」按鈕,即可進入系統管理後台。
▲ 成功登入 Odoo 後,進入應用程式市集,可以看到各種可用的模組,如銷售、會計、庫存管理、CRM 等,可依需求安裝對應功能,擴展 Odoo 的使用範圍。
留言區 / Comments
萌芽論壇