iT邦幫忙

2024 iThome 鐵人賽

DAY 7
0
Odoo

Odoo 部署策略系列 第 7

docker-compose 入門:同步啟動 odoo 與 PostgreSQL

  • 分享至 

  • xImage
  •  

這一章,我們將介紹如何使用 docker-compose 來同步啟動 odoo 和 PostgreSQL。需要注意的是,這次的 docker-compose.yml 設計主要是用來測試我們的 Dockerfile,並不是真正用於生產環境的部署。實際用於部署的 docker-compose 將會放在 WebApp-Deployment 並且帶有更多安全策略(也代表更麻煩),這裡則是在 odooBundle-Codebase 中進行測試 Dockerfile 或是 module 用的。

本章相關內容可參考 odoo 官方的 Docker 文件: GitHub/docker-library/docs/odoo
PostgreSQL 的環境變數說明也可以參考: Docker/Postgres


初次使用 docker-compose

手動的方式雖然能夠啟動 Odoo 和 PostgreSQL,但每次都需要手動分開執行,不太方便。接下來,我們將介紹如何使用 docker-compose 來簡化這個流程,讓我們一次啟動 odoo 和 PostgreSQL。

docker-compose.yml 文件

services:
  postgresql:
    image: postgres:16.4  # 使用官方的 PostgreSQL 16.4 Image
    restart: always  # 如果容器崩潰,自動重啟
    networks:
      - odoo-net  # 使用自訂的 odoo-net 網路進行通訊
    environment:
      - POSTGRES_DB=postgres  # 設定資料庫名稱為 postgres
      - POSTGRES_USER=odoo_user  # 設定 PostgreSQL 使用者
      - POSTGRES_PASSWORD=JXPF9aDZeZWlrDpf  # 設定資料庫密碼
    volumes:
      - db-data:/var/lib/postgresql/data  # 將資料庫數據持久化存放在 db-data volume 中

  odoo:
    build: .  # 使用當前目錄下的 Dockerfile 來構建 odoo
    restart: always  # 如果 odoo 容器崩潰,自動重啟
    depends_on:
      - postgresql  # 確保 PostgreSQL 容器已啟動,才啟動 odoo
    networks:
      - odoo-net  # 使用自訂的 odoo-net 網路進行通訊
    ports:
      - "8069:8069"  # 將 odoo 的 HTTP 服務端口映射到主機的 8069 端口,讓我們可以訪問 odoo 的網頁界面
      - "8071:8071"  # XML-RPC over HTTPS,後續會再介紹的埠口
      - "8072:8072"  # long-polling,後續會再介紹的埠口
    environment: # 為什麼會是這些變數名稱呢?還記得我們上一篇介紹的 entrypoint.sh 嗎?
      - HOST=postgresql  # 設定 odoo 連接的資料庫主機名稱
      - USER=odoo_user  # 設定 odoo 連接資料庫的使用者名稱
      - PASSWORD=JXPF9aDZeZWlrDpf  # 設定 odoo 連接資料庫的密碼
    volumes:
      - odoo-data:/var/lib/odoo  # 將 odoo 的資料(如檔案儲存、sessions 等)持久化存放
在 odoo-data volume 中

networks:
  odoo-net:
    driver: bridge  # 使用橋接網路,讓 odoo 和 PostgreSQL 容器能互相通訊

volumes:
  db-data:  # 持久化存放 PostgreSQL 資料
  odoo-data:  # 持久化存放 odoo 的檔案和 sessions 數據

如何使用這個 docker-compose.yml

  1. 確保 Docker 和 Docker Compose 已安裝

    • 你需要在系統上安裝好 Docker 和 Docker Compose,才能使用這個文件。可以通過 docker --versiondocker-compose --version 來檢查是否已安裝。
  2. 放置 docker-compose.yml 文件

    • 在專案目錄中創建一個名為 docker-compose.yml 的文件,將上述內容複製進去。
  3. 構建並啟動容器

    • 在終端中,進入你存放 docker-compose.yml 的目錄,執行以下指令來構建並啟動 odoo 和 PostgreSQL 容器:

      docker-compose up --build
      
    • 這條指令會自動構建 odoo 的 Docker Image 並啟動 PostgreSQL 和 Odoo 容器,--build 確保每次都重新構建。

  4. 訪問 Odoo

    • 一旦容器啟動,你可以在瀏覽器中通過 http://localhost:8069 訪問 odoo 的網頁界面。
  5. 停止容器

    • 要停止容器,執行以下指令:

      docker-compose down
      
    • 這會停止並刪除所有相關的容器,但資料會保留在定義的 volumes 中。

順帶提下,我自己目前用的環境是在 Windows 裝 WSL 的 ubuntu 和 Docker Desktop,從 ubuntu 下 Docker command 會自動透過 API 帶到 Docker Desktop,就會顯示出下圖這樣的 docker-compose 包住 container 的樣子,相當直覺(應該也可以只使用 Docker Desktop)。
https://ithelp.ithome.com.tw/upload/images/20240921/20168935Rv1pcp6TFN.png
因為我的設定應該都是有 Docker 安裝就可跨平台的,目前就沒打算特別提我自己的環境怎麼處理的,若是大家有興趣可以留言,考慮塞一篇進來。


這樣設定後,我們只需要一條指令就能同步啟動 odoo 和 PostgreSQL,資料庫的介面也不會曝露在網路上(會包在 odoo-net 中),增加了一點點安全性。

關於 Dockerfile 基礎的設定到這邊告一段落,未來還會有 Dockerfile 相關的改動,但接下來我們先來思考該怎麼做真正佈署用的 docker-compose。


上一篇
odoo Docker 的自訂啟動:分析官方 entrypoint.sh
下一篇
從網路設計到 docker-compose:搭建 odoo 反向代理的第一步
系列文
Odoo 部署策略30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言